Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Avatary nie otwierają się, trzymam je w polu blob
mikolodz
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 25.09.2010

Ostrzeżenie: (0%)
-----


Witam,
skrypt umieszczający dane w bazie działa prawidłowo. Po dodaniu obrazka wszystkie dane dotyczące rozmiaru, typu, nazwy są poprawnie wyświetlane.

Tabela ma postać:
id varchar(30)
avatar blob
typ varchar(30)
rozmiar int.

System logowania i rejestracji w pełni działa.

Umieszczam je takim kodem:
Kod
<?
    baner();
    $id = uwierzytelnij(0);
    if(strcmp($id,"gosc")){
        
        $db = polaczZBaza();
        if($_FILES['userfile']['size'] > 0 && $_FILES['userfile']['size'] < 60000){
        
        $fileName = $_FILES['userfile']['name'];
        $tmpName  = $_FILES['userfile']['tmp_name'];
        $fileSize = $_FILES['userfile']['size'];
        $fileType = $_FILES['userfile']['type'];        
        
        $fp = fopen($tmpName, 'r');
        $content = fread($fp, filesize($tmpName));
        $content = addslashes($content);
        fclose($fp);
        
        if(!get_magic_quotes_gpc())
        {
            $fileName = addslashes($fileName);
        }
        
        $zapytanie = "insert into `avatars` (id, avatar, typ, rozmiar) values".
                    "('$id', '$content', '$fileType', '$fileSize')";
        $wynik = $db -> query($zapytanie);
        if($wynik){
            echo '<p class="style1">Avatar wysłany poprawnie</p>';    
            $db -> close();
        }else echo '<p class="style1">Błąd w wysyłaniu. Spróbuj ponownie.</p>';
    }
}
?>


Pliki wysyłane są z formularza:
Kod
<?
baner();
    $id = uwierzytelnij(1);
    if(strcmp($id,"gosc")){
        echo '
        
        <FORM ACTION="send.php" METHOD="POST" ENCTYPE="multipart/form-data">
        <div class="style1"><input type="hidden" name="MAX_FILE_SIZE" value="60000">
        Avatar: </td><td><INPUT type="file" name="userfile">
        <input type="submit" name="sumbit" value="zapisz"/>
        </FORM>';
        echo '<img src="mojserwer/showavatar.php?id='.$id.'" alt="avatar" width="150" height="150" />';

?>


wyświetlane MAJĄ być za pomocą:
Kod
<?
    $db = polaczZBaza();
    $id = $_GET['id'];
    $zapytanie = "select avatar, typ, rozmiar from `avatars` where id='$id'";
    $wynik = $db -> query($zapytanie);
    if(($wynik -> num_rows) != 0){
        $wiersz = $wynik -> fetch_assoc();
        $typ = $wiersz['typ'];
        $content = $wiersz['avatar'];
        header("Content-type: $typ");
        echo $content;  
    }
    $db -> close();
?>


Po użyciu tego cudnego kodu wyskakuje mi pusty kwadrat w miejscu avatara, ale bez ikonki uszkodzenia, tylko taka jakaś szara jest w lewym rogu.
w informacjach obrazka mam:
-prawidłowo wpisany adres do tego pliku np. http://mojserwer/showavatar.php?id=mysikun
-prawidłowy rozmiar np. 3,7KB
-prawidłowy typ image/JPEG
-BŁĘDNY ROZMIAR PLIKU 0x0(przeskalowano do 150x150)

Kiedy wchodzę w źródło strony i klikam na ten 'adres' obrazka uzyskuję informację:

Obrazek "view-source:http://mojserwer/showavatar.php?id=mysiokun" nie może zostać wyświetlony, ponieważ zawiera błędy.

Straciłem na to kilkanaście godzin. implementowałem to na kilka sposobów i za każdym razem to samo.. Obrazek uszkodzony. Testowałem na kilku plikach, na JPEG, zrobionym przeze mnie, sciagnietym z neta, na GIFie PNG nic nie działa.Bardoz proszę Was o pomoc, bo już mi się skończyły pomysły..
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




1) Zakomentuj header i echo $content to będziesz widzieć błędy
2) Spróbuj użyć funkcji z rodziny image* ( np imagejpeg )
Go to the top of the page
+Quote Post
mikolodz
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 25.09.2010

Ostrzeżenie: (0%)
-----


Cytat(wookieb @ 25.09.2010, 22:26:26 ) *
1) Zakomentuj header i echo $content to będziesz widzieć błędy
2) Spróbuj użyć funkcji z rodziny image* ( np imagejpeg )


Pierwsza metoda, jesli dobrze ją zrozumiałem nie zadziałala, bo jedyne co się stało, to źródło jest puste i plik wyświetlający nic nie pokazuje.
Jutro spróbuję coś pokombinować z tym imagejpeg, aczkolwiek nie za bardzo rozumiem jak mógłbym tego użyć, żeby przerobić istniejący plik jpg na jpg.

Zastanawiam się, czy ostatecznie nie skorzystam z polecanego przez wszystkich rozwiązania jakim jest umieszczenie samych linków do avatarów w bazie..
dziękuję za pomoc i jakby ktoś znalazł błąd w moim kodzie to proszę o sugestie!! (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(mikolodz @ 26.09.2010, 00:57:56 ) *
Zastanawiam się, czy ostatecznie nie skorzystam z polecanego przez wszystkich rozwiązania jakim jest umieszczenie samych linków do avatarów w bazie..
dziękuję za pomoc i jakby ktoś znalazł błąd w moim kodzie to proszę o sugestie!! (IMG:style_emoticons/default/smile.gif)

No bo to jest najlepsze rozwiązanie.
Go to the top of the page
+Quote Post
mikolodz
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 25.09.2010

Ostrzeżenie: (0%)
-----


Słuchajcie, zrobiłem tak jak mówicie.
Poprzez imagefrom... avatarki wrzucają się do uploadu, a linki do nich mam w mysqlu.
Obrazki zmieniaja swoj rozmiar, docinają sie i same w sobie są dobrze zapisane na serwerze.
Jednak nadal mam ten sam problem!
Słuchajcie. Zrobiłem plik showavatar.php.
poprzez geta dostaje on login usera, do którego ma zwrócić avatar.
Chcę zastosować taką metodę, aby osoba oglądająca profil nie wiedziała gdzie są obrazki przechowywane.
Oczywiście jak podaję mu, echo "<img src="upload/'.$nazwa.'"/>' to wyświetla obrazek, natomiast problem pojawia się wtedy gry jako ścieżkę podaję adres showavatar.php?id=mysiokiszka.

Oto zawartosc pliku showavatar:
Kod
<?
    //tu oczywiscie mam podane jeszcze includy
    $db = polaczZBaza();
    $id = $_GET['id'];
    $zapytanie = "select avatar from `avatars` where id='$id'";
    $wynik = $db -> query($zapytanie);
    if(($wynik -> num_rows) != 0){
        $wiersz = $wynik -> fetch_assoc();
        $nazwa = $wiersz['avatar'];
          
           $img = imagecreatefromjpeg('upload/'.$nazwa);
           header("Content-type: image/jpeg");
           echo $img;

    }    
    $db -> close();
?>


póżniej chcę obrazik wyświetlić w pliku wyswietlavatar.php:
Kod
echo '<img src="showavatar.php?id='.$id.'" alt="avatar" width="150" height="150" />';


W źródle jest wszystko poprawnie, ściezka podstawia się prawidłowa.
jak chcę wykonać plik showavatar.php to dostaję komunikat taki jak poprzednio:
Cytat
Obrazek "view-source:http://mojserwer/showavatar.php?id=mysiokiszka" nie może zostać wyświetlony, ponieważ zawiera błędy.


Zaznaczam jeszcze raz - ten plik istnieje na serwerze, jest poprawnie zapisany i mogę go pobrać na dysk i otworzyć. Wszystko w nim śmiga!

pozdrawiam! i bardzo proszę o pomoc, bo nie chciałbym podawać linków bezwzględnych z nazwą pliku itp... ;/:(

Ten post edytował mikolodz 26.09.2010, 11:21:41
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 00:06