05. januar 2006 - 23:21Der er
22 kommentarer og 1 løsning
MySQL billede kald - bizart?
Bruger flg. meget enkle script til at kalde et billede frem:
img.php:
$query = mysql_query("SELECT image, filetype FROM house_img WHERE id = '$_GET[id]'") or die(mysql_error()); if (mysql_num_rows($query)) { extract(mysql_fetch_array($query)); if($filetype){ header("Content-type: $filetype"); echo $image; }
og når jeg så skal hente et billede gør jeg meget enkelt:
Den kan sagtens finde ud af at justere bredde og højde og indsætte alt="billedtekst", men det vigtigste mangler sgu - der kommer ikke noget billede - hva hulen er det lige jeg har overset?
Jeg har lige prøvet at teste .../house/img.php?id=17 i en browser - og der sker ikke andet end en helt blank side. Grunden til at jeg bruger $house1 som id i det ene tilfælde er at jeg vælger mellem 1, 2 og 3 nå jeg skal vise billederne .. lidt kringlet men burde ikke have indflydelse når den får fat i den rigtige id (hvis jeg højreklikker på det tomme billede står der den rigtige sti i source (fx house/img.php?id=17)). Men siden min img.php heller ikke viser noget i sig selv kan der så være noget galt med den kode jeg bruger til at gemme billedet?:
if($_FILES['img_upload']['size'] > 512000){ $status = "Picture size is too big. The limit is 0,5 megabyte - try another."; }else{ $filename = $_FILES["img_upload"]["tmp_name"]; /* $image_p = imagecreatetruecolor($width, $height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, "img_db.jpg", 80);
print "$image_p<br>"; */ if (is_uploaded_file($filename)) { $data = addslashes(fread(fopen($filename,"r"),filesize($filename)));
bare se bort fra det der er gemt i kommentaren - det er noget jeg skal bruge til at komprimere billedet, men det har jeg ikke rigtigt kunne få til at virke - vel helst lige ha det andet til at fungere først.
grunden til at jeg bruger house_id i min insert er at de forskellige billeder er forbundet med et hus (house_id, (id er primary, auto-increment og behøver jo ikke at indsættes)), mens at når jeg skal hente det billedet frem igen skal kalde det vha. id (der kan være op til 3 billeder pr. hus).
et link finder du her: http://www.waldorfwide.com/house.php?page=login <- bare tryk join for free og skriv et eller andet tilfældigt under user information (de steder med en *) og tryk next ved house information (der er ingen validering).. derefter kommer du til billede upload siden
Please, har virkelig brug for at få løst det billede problem inden længe, er der nogen som har et bud, eller måske bare kender en anden metode til at uploade billeder i en mysql database som jeg ikke har prøvet? Er ved at blive lidt desperat, her.
$query = mysql_query("SELECT id FROM house_img WHERE house_id = '$_SESSION[house_id]'") or die(mysql_error()); $nr = 0; while($data = mysql_fetch_array($query)){ $nr = $nr + 1; if($nr == 1){ $house1 = $data["id"]; }elseif($nr == 2){ $house2 = $data["id"]; }elseif($nr == 3){ $house3 = $data["id"]; } } $nr = 0; $nopic = "<img src=\"../images/nopic.gif\" alt=\"There is no picture here - upload your own ;)\">"; if($house1){ $id = $house1; echo "<img src=\"house/img.php?id=$house1" . "\"";include("house/img.att.php"); echo "<a href=\"house.php?page=register&step=picture&imgdel=$house1" . "\" OnClick=\"return yesno();\"><img src=\"../images/del.gif\" border=\"0\" alt=\"Delete picture?\"></a>"; }else{ echo $nopic; }
Den kode bruger jeg til at vise (én af) de 3 billeder som er uploadet.. Derfor bruger jeg heller ik direkte $house1, men kalder $id for den gældende $house1, 2 eller 3 som vist i eksemplet.. Som sagt så virker img.php heller ikke for sig selv, så fejlen ligger måske et sted mellem det at uploade billede og i img.php?
1) Kører du på en server, hvor man ikke ser syntaksfejl i PHP? Det er noget "nymodens stads" at gøre sådan, men jeg ser flere der har det og bøvler med det. Du kan teste ved at tage et script, der virker, lave en syntaksfejl (en krølleparentes for meget eller lidt), og se at siden bliver blank.
2) Vis hele koden for img.php - det har du ikke gjort i spørgsmålet.
3) Tælle krølleparenteser i img.php - det du viser mangler een. Jeg har antaget, at det var en fejl i klippe-klistre.
Okay her følger den komplette img.php: <? $connect1 = mysql_connect("localhost", "user", "pass") or die(mysql_error()); mysql_select_db("waldorfwide_com", $connect1); /* Bruges til at trække stien ud af et billede fra mysql databasen. * Brug flg. kald: <img src="include/img.php?id=xx"> * Kræver flg. foruddefinerede variabler: id */
$queryimg = mysql_query("SELECT image, filetype FROM house_img WHERE id = '$id'") or die(mysql_error()); if (mysql_num_rows($queryimg)) { extract(mysql_fetch_array($queryimg)); header("Content-type: $filetype"); echo $image; } ?>
Så ja det var en klippeklister fejl.. Mht. syntaksfejlbeskeder så kan jeg godt slå det til, men den fortæller mig bare en masse (lidt for mange til at det ser godt ud) variabler ikke er defined (fx hvis der er et felt i den tidligere form der ikke er blevet udfyldt), hvilket jo er underligt - hvis en variabel er tom så indsætter den en tom værdi i databasen (eller nærmere: gør intet) - det har alle tider virket og virker stadig, den siger det bare som en syntaksfejl, hvilket er uforståeligt som mig. Jeg har slået error reporting til nu så kan du selv se.
Jeg kan også vælge mellem php4 og php5, hvad er bedst at jeg tager?
Ja, men den er jo meget anderledes end den vi startede med. 1) Det er ikke sundt at bruge extract-funktionen. Brug altid som det her (sådan ca.)
$result = mysql_query("SELECT image, filetype FROM house_img WHERE id = '$id'") or die(mysql_error()); if ($row=mysql_fetch_array($result)) { header("Content-type: ".$row['filetype']); echo $row['image']; }
2) Brug altid $_GET og $_POST. I det du viser til sidst skal du ikke bruge $id men hente den med $_GET
3) Vær dog glad for fejlmeddelelser. Slå alt til, og få dem så væk med sund kodning. Nu har du spildt 5 dage, bare fordi du ikke gad se på dem. Ok, det må du selv, men du har ret beset også spildt min tid ;)
Okay det er jeg ked af.. må ærligt sige at jeg havde den opfattelse at de fejlmeddelelser der kom mere var en slags statusmeddelelser om at en given variabel ikke eksisterede, men at det var okay. Det virker selvfølgelig nu, så læg endelig et svar, og mange tak for hjælpen!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.