Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis obrazków do MySQL
Forum PHP.pl > Forum > Przedszkole
northwest
Witam,
Mam taki skrypt:
  1. <?php
  2. $logo_tmp = $_FILES["logo"]["tmp_name"];
  3. $logo_name = $_FILES["logo"]["name"];
  4. $logo_size = $_FILES["logo"]["size"];
  5. $logo_type = $_FILES["logo"]["type"];
  6. if($logo_tmp==""){
  7. echo"<b><center><font color='DF0000'><center>Proszę wybrać plik do wgrania!!</center><br/><br/>";
  8. }
  9. if($logo_tmp!=""){
  10. if ($logo_size > 1024000) {
  11. echo"<b><center><font color='DF0000'><center>Wybrany plik jest za duży!!</center><br/><br/>";
  12. }
  13. if($logo_type=="" && $logo_type!="image/jpg" && $logo_type!="image/jpeg" && $logo_type!="image/pjpeg" ){
  14. echo"<b><center><font color='DF0000'><center>Błędny format pliku!!</center><br/><br/>";
  15. }
  16. if($logo_type=="image/jpg" || $logo_type=="image/jpeg" || $logo_type=="image/pjpeg" ){
  17. if ($logo_size <= 1024000) {
  18. $path_thumbs = "temp";
  19. $losowa_nazwa = md5(microtime());
  20. $pobierz_rozszerzenie = explode ('.', $logo_name);
  21. $rozszerzenie = $pobierz_rozszerzenie[count($pobierz_rozszerzenie)-1];
  22. $dozwolone = array(".jpg",".jpeg", ".JPG",".JPEG", ".Jpg",".Jpeg");
  23. $thumb_path = substr($logo_tmp,0,strrpos($logo_tmp, '.')).'_min.jpg';
  24. $max_width = $max_height=640;
  25. $img_attr = getimagesize($logo_tmp);
  26. if($img_attr[0]>$img_attr[1])
  27. { $scale = $img_attr[0] / $max_width; }
  28.  else { $scale = $img_attr[1] / $max_height; }
  29.  $w = floor($img_attr[0]/$scale);
  30.  $h = floor($img_attr[1]/$scale);
  31.  $ext = strrchr($logo_name,'.');
  32.  $ext = strtolower($ext);
  33.  if (in_array($ext,$dozwolone))
  34.  {
  35. $nowy = imagecreatefromjpeg($logo_tmp);
  36. $zmniejszony_obrazek = imagecreatetruecolor($w,$h);
  37. imagecopyresampled($zmniejszony_obrazek, $nowy, 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  38. imagejpeg($zmniejszony_obrazek,"$path_thumbs/$losowa_nazwa.$rozszerzenie",70);
  39. imagedestroy($zmniejszony_obrazek);
  40. imagedestroy ($nowy);
  41. }} }}
  42. $test="INSERT INTO `baza` (
  43. `id` ,`login` ,`kategoria` ,`podkategoria` ,`dzial` ,`1` ,`2` ,`3` ,`4` ,`5` ,`6
    ` ,`7` ,`8` ,`9` ,`10` ,`11` ,`12` ,`13` ,`14` ,`15` ,`16` ,`adres` ,`opis` ,`obr
    azek1`, `obrazek2`, `obrazek3`, `obrazek4`, `status`, `datarejestracji` ,`ip` ,`o
    dwiedziny`)
  44. VALUES ('' , '$_SESSION[username]', '$_POST[kategoria_ogloszenia]', '$_POST[typ_ogloszenia]','$_POST[kategoria_ogloszenia]', '$_POST[1]', '$_POST[miasto]', '$_POST[2]', '$_POST[3]', '$_POST[4]', '$_POST[5]', '$_POST[6]', '$_POST[7]', '$_POST[8]', '$_POST[9]', '$_POST[10]', '$_POST[11]', '$_POST[12]', '$_POST[13]', '$_POST[14]', '$_POST[15]', '$_POST[16]','$_POST[17]','$mysqlPicture1', '$mysqlPicture2','$_POST[my_field3]','$_POST[my_field4]','', '$peta_data', '$ip', '0');";
  45. mysql_query("$test");
  46. ?>


Po wykonaniu tego skryptu obrazek się kopiuje ładnie, zmniejsza i niby zapisuje w bazie - ma przynajmiej taki sam rozmiar w
mysql jak w rzeczywistości (zapisuje go w polu blob).

Do odczytu obrazka używam czegoś takiego:
  1. <?php
  2. $_GET['id'] = ZamienZnaki($_GET['id']);
  3. mysql_connect("$host", "$user","$pass", "$name") or die("Unable to connect to SQL server");
  4. @mysql_select_db("$name") or die("Unable to select database");
  5. $result=mysql_query("SELECT obrazek FROM baza_szukanie_pracy WHERE id=$_GET[id]") or die("Can't perform Query");
  6. $row=mysql_fetch_object($result);
  7. Header( "Content-type: image/jpg");
  8. echo $row->obrazek;
  9. ?>


Ale coś nie chce mi się wyświetlić...:/ Co robie źle??
dadexix
Cytat
Ale coś nie chce mi się wyświetlić...:/

Wiesz jasnowidz na urlopie więc możesz opisać bardziej ten problem...
Sprawdzać tego nikt własnoręcznie nie będzie...
Cytat
Co robie źle??
a może nic nie jest źle? tylko server coś nie trybi?
sniezny_wilk
a co wyświetla skrypt bez:

  1. <?php
  2. Header( "Content-type: image/jpg");
  3. ?>

?
northwest
chodzi o to że kopiowanie plików na serwer działa. Nazwa się ładnie zmienia i wszystko na pierwszy rzut oka wygląda poprawnie.
Rozmiar w MySQL jest taki sam jak pliku na serwerze. Problem pojawia się w wyświetleniu tego obrazka na stronie www.
Do wyświetlania używam tego 2 skryptu i potem robie tylko <img src="...">.
Problem jest w tym,że nic się nie wyświetla (jest biała strona). co robie nie tak?? serwer na 100% umożliwia takie coś...

białą stronę wyświetla bez tego nagłówka....
dadexix
na serverze masz:
display_errors=on?
error_reporting=E_ALL?
sniezny_wilk
Skasuj "@" w kodzie i powiedz czy dostajesz jakieś błędy ? Sprawdź również poprawność zapytania. Sprawdź również co daje:

  1. <?php
  2. echo $result->num_rows;
  3. ?>


jeśli 0 to znaczy, że nie ma obrazka o podanym id, lub skopałeś coś z zapytaniem lub coś jest nie tak z funkcją ZamienZnaki.
northwest
zapytanie jest okey, skasowałem te @ i dodałem error_reporting(E_ALL); na początku tego skryptu.
Dalej nic nie ma... mi się wydaje że może zapis do bazy jest zły i dlatego nie chce odczytać??
sniezny_wilk
Sprawdź te num_rows co podałem.. jaką wartość daje ?
northwest
Notice: Trying to get property of non-object in C:\wamp\www\test.php on line 11

taką odpowiedz dostaje... ale jak wklejam do phpmyadmin:
SELECT obrazek1 FROM baza_anonse_oferty_mieszkania_sprzedaz WHERE id=2

to mam wynik...
sniezny_wilk
sorry mój błąd, zagapiłem się i wpisałem w OOP. Hmm.. może coś masz źle skonfigurowane, lub spróbuj dostać się do rekordów jakąś inną funkcją, np taką

Zauważ że w skrypcie masz wpisane OBRAZEK, a teraz napisałeś OBRAZEK1, czy nie pomyliłeś nazwy pola ?, pamiętaj że

  1. <?php
  2. echo $row->obrazek;
  3. ?>

obrazek - musi mieć taką samą nazwę jak pole.

i przed samym zapytaniem daj dla pewności

  1. <?php
  2. echo $_GET['id'];
  3. ?>


może funkcja przez którą GET'a puszczasz coś źle działa.
northwest
$zapytanie_kontrolne = "SELECT obrazek1 FROM baza_anonse_oferty_mieszkania_sprzedaz WHERE id=2";
$resultat = mysql_query($zapytanie_kontrolne);
while ($wynik = mysql_fetch_array($resultat)){
echo"$wynik[obrazek1]";
}

zrobiłem takie zapytanie i wywaliło mi krzaczki zaczynające sie od ˙krzaczki CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 70

czyli mój obrazek jest w bazie...
sniezny_wilk
Cytat(northwest @ 10.01.2008, 12:47:21 ) *
$zapytanie_kontrolne = "SELECT obrazek1 FROM baza_anonse_oferty_mieszkania_sprzedaz WHERE id=2";
$resultat = mysql_query($zapytanie_kontrolne);
while ($wynik = mysql_fetch_array($resultat)){
echo"$wynik[obrazek1]";
}

zrobiłem takie zapytanie i wywaliło mi krzaczki zaczynające sie od ˙krzaczki CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 70

czyli mój obrazek jest w bazie...


no to użyj tego do swojego skryptu smile.gif sprawdź poprawność id i nazwę tabel i pól w SQL.
northwest
tzn nie kumam questionmark.gifwinksmiley.jpg
to zapytanie potwierdziło mi poprawność zapytania i istnienie w nim danych (wykorzystuje tą funkcję do wyświetlania danych z bazy)smile.gif
ale jak to wykorzystać do obrazka?? <img src="test.php"> questionmark.gif i w tym test.php zostawić te krzaczki??
sniezny_wilk
Tak, w test zostaw krzaki, tylko daj odpowiedni header.. jak dasz header to zamiast krzaków powinny być obrazki smile.gif
northwest
nic nie ma jak dodałem header ...sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.