Avatar billede hav0k Nybegynder
05. januar 2006 - 23:21 Der 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:

echo "<img src=\"house/img.php?id=$house1" . "\"";include("house/img.att.php");

hvor img.att.php ser således ud:

$query = mysql_query("SELECT width, height, description FROM house_img WHERE id = '$id'") or die(mysql_error());
while($data = mysql_fetch_array($query)) {
    //max img width and heights for output:
    $width = 200;
    $height = 500;
    $width_orig = $data["width"];
    $height_orig = $data["height"];
    if(($width_orig <= $width) && ($height_orig <= $height)){
        $width = $width_orig;
        $height = $height_orig;
    }
    if(($width_orig > $width) || ($height_orig > $height)){
        $difwidth = $width_orig - $width;
        $difheight = $height_orig - $height;
    if($difwidth >= $difheight){
        $scale = $height_orig / $width_orig;
        $height = $width * $scale;
    }elseif($difwidth < $difheight){
        $scale = $width_orig / $height_orig;
        $width = $height * $scale;
    }
}   
    $description = $data["description"];
    echo "width=\"$width" . "\" height=\"$height" . "\" alt=\"$description" . "\">";
}


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?
Avatar billede erikjacobsen Ekspert
05. januar 2006 - 23:27 #1
Er $house1 det samme som $id ?
Avatar billede hav0k Nybegynder
06. januar 2006 - 00:42 #2
jep. det er det
Avatar billede erikjacobsen Ekspert
06. januar 2006 - 09:31 #3
Men hvorfor har du så to navne for det samme.

Du bruger $house1 i:      echo "<img src=\"house/img.php?id=$house1"
og $id i includefilen:  include("house/img.att.php")

Og du har testet at hvis du selv skriver  ..../house/img.php?id=17    i en browser, så får du, eller ikke får, et billede?
Avatar billede hav0k Nybegynder
07. januar 2006 - 00:19 #4
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)));

                list($width, $height) = getimagesize($filename);

                  $type = addslashes($_FILES['img_upload']['type']);       
                mysql_query("INSERT INTO house_img (house_id, image, filetype, width, height, description) values ('$_SESSION[house_id]', '$data','$type','$width','$height','$_POST[img_desc]')") or die(mysql_error());
            } else {
                $status = "Possible file upload attack. Filename: " . $_FILES['img_upload']['name'];
            }
}
Avatar billede hav0k Nybegynder
07. januar 2006 - 00:20 #5
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.
Avatar billede erikjacobsen Ekspert
07. januar 2006 - 00:32 #6
Har du et link til siden?
Avatar billede erikjacobsen Ekspert
07. januar 2006 - 00:53 #7
I din INSERT bruger du house_id, men i din SELECT er det: id.  Hænger det sammen?
Avatar billede hav0k Nybegynder
07. januar 2006 - 01:10 #8
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
Avatar billede hav0k Nybegynder
07. januar 2006 - 01:12 #9
Avatar billede hav0k Nybegynder
07. januar 2006 - 17:06 #10
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.
Avatar billede erikjacobsen Ekspert
07. januar 2006 - 21:33 #11
Siger du at du har en login-bruger så vi  (jeg)  kan teste det?
Avatar billede hav0k Nybegynder
09. januar 2006 - 17:08 #12
Jep bare brug: test@test.dk - password: test

Når du kommer til add house, bare tryk på next, så kommer billedupload..
Avatar billede erikjacobsen Ekspert
09. januar 2006 - 19:41 #13
Men jeg kan ikke se hvor jeg kan se en anvendelse af house/img.php?id=$house1  ??
Avatar billede hav0k Nybegynder
09. januar 2006 - 20:00 #14
$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?
Avatar billede hav0k Nybegynder
09. januar 2006 - 20:01 #15
ups fejl.. jeg bruger $id i img.att.php fordi den jo includes.. i det andet bruger jeg bare $house1, 2 eller 3..
Avatar billede erikjacobsen Ekspert
09. januar 2006 - 21:09 #16
Står der noget i house_img tabellen for nogle id-er?
Avatar billede hav0k Nybegynder
09. januar 2006 - 21:56 #17
Ja: 3, 4, 20, 23, 28, 34 osv..
Avatar billede erikjacobsen Ekspert
09. januar 2006 - 23:19 #18
Ok, men så må du gøre noget mere.

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.
Avatar billede hav0k Nybegynder
10. januar 2006 - 20:03 #19
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?
Avatar billede erikjacobsen Ekspert
10. januar 2006 - 20:26 #20
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 ;)
Avatar billede hav0k Nybegynder
11. januar 2006 - 12:38 #21
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!
Avatar billede erikjacobsen Ekspert
11. januar 2006 - 12:53 #22
Jeg samler slet ikke på point, tak.
Avatar billede hav0k Nybegynder
11. januar 2006 - 14:57 #23
Okay :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester