Jeg får kun binære data skrevet på skærmen fra en database
Jeg har oprettet en database i mysql. Jeg har lavet en side getpic.php der henter et billede fra databasen. Denne side modtager en parameter id. Dette virker fint. Når jeg kalder getpic direkte med f.eks getpic.php?id=s011627 får jeg kun volapyk tilbage fra browseren. scriptet getpic.php ser ud som følger:
<?php include('users_connect.php');
$query = "select bin_data,filetype from fil_data where studienummer='$id'"; $result = mysql_query($query); $row = @mysql_fetch_array($result);
?> Dette kalder jeg med linien <img src="getpic.php?id=s011627" width="75" alt="">
Jeg ved godt at det ikke er dynamisk. Men vil få det til at virke så simpelt som muligt først.
Det virker som om at jeg ikke fortæller php rigtigt at det er et billede, de binære data jeg sender i echo $row[bin_data]; . Er der nogen der kan hjælpe?? Har siddet og kigget på lignende spørgsmål i snart 2 timer. Fatter ikke en meter af hvorfor det ikke virker.
Udfordringerne hober sig op i fødevare- og drikkevareindustrien og gør den til en af de mest sårbare.
24. oktober 2024
Slettet bruger
27. september 2004 - 03:12#1
For en ordens skyld skal du huske at skrive feltnavnene i anførselstegn når du bruger arrays, som $row['feltnavn']. PHP kan normalt godt finde ud af det, men der kan optræde situationer, hvor det kan skabe fejl, der er meget svære at finde, hvis man ikke gør det korrekt.
Har du nogle gode ideer? På forhånd tak for hjælpen.
Synes godt om
Slettet bruger
27. september 2004 - 21:03#3
Måske er pjpeg ikke understøttet af din browser. Jeg kunne ikke umiddelbart finde ud af nogen forskel mellem image/jpeg og image/pjpeg, så prøv at se, om det virker med følgende linie:
Jeg har nu prøvet den linie du foreslog. Jeg har desuden prøvet med BMP og GIF billeder. Den kan databasen også godt finde ud af. Jeg har desuden lavet et nyt html script til at kalde getpic.php?id=s011627 som kun indeholder linien:
Gad vide om man ikke kan oprette en fil på serveren som man så kopierer indholdet fra databasen ind i og så bruger den location. Jeg kan nemlig sagtens vise billeder som ligger direkte på serveren. Det virker bare rimelig meget som en lappe løsning.....
Synes godt om
Slettet bruger
27. september 2004 - 22:40#5
Jeg kom lige til at tænke på at måske er magic_quotes_runtime slået til på serveren. Hvis den er, så prøv med
Virker heller ikke. Enten er jeg meget dum eller også er der en eller anden mærkelig ting jeg ikke har taget højde for. Sandsynligvis det første.
Synes godt om
Slettet bruger
28. september 2004 - 13:42#7
Lige nøjagtig sådan noget som at gemme filer i et databasefelt er der mange, der har problemer med, så det har ikke noget at gøre med om du er dum. (Det skal jeg ikke kunne sige, om du er, for jeg kender dig jo ikke. ;-)
Hvor stor er den oprindelige fil, og hvilken felttype har du brugt i databasen?
Jeg har brugt longblob....går vist op til en gigabyte. Har dog fået rettet en anden fejl i min include('users_connect.php'); Da denne fil indeholdte nogle html headers. Det virker jo ikke når der ikke må echoes noget før man laver sin egen header. Da jeg rettede det, fik jeg det til at virke på en af mine venners computer. Stripslashed gør ingen forskel. Man kan dog ændre i billedet ved at kære addslashes på det. Det virker dog stadig ikke. Måske er det noget med opsætningen af min apache og php?
Synes godt om
Slettet bruger
28. september 2004 - 22:48#9
Du kan måske bruge denne funktion:
function my_stripslashes($streng){ return get_magic_quotes_runtime()?stripslashes($streng):$streng; }
Den bruges, når du skal udskrive billedet
echo my_stripslashes($row['bin_data']);
Forskellen på den og den almindelige stripslashes er, at denne kun laver stripslashes, hvis PHP er sat op til automatisk at lave addslashes på det, du trækker ud fra databasen.
Du skal nok også bruge addslashes() på billedet, når du sætter det ind i databasen.
nix header kaldet virkede fint. For jeg havde sjovt nok først en fil liggende ved det navn. Så den opretter tilsyneladende ikke s011627.jpg filen med den kode du skrev. Jeg synes fandme du gør en stor indsats for mig. Tak for det.
Synes godt om
Slettet bruger
29. september 2004 - 00:39#16
Prøv engang at rette
$data=my_stripslashes($row['bin_data']); if ($fil=fopen($id . '.jpg', 'wb')){ while($svar=fwrite($fil,$data,strlen($data)){ $data=substr($data,$svar); if(strlen($data)==0) break; } if ($svar===false) die("Fejl under skrivning"); } else { die("Kunne ikke åbne fil"); }
Nu kommer der et stort felt til billedet. Men stadigt et rødt kryds Desuden oprettes en fil med navnet s011627.jpg i mappen pmp som en bør. Desværre er den tom. dvs size = 0KB
Synes godt om
Slettet bruger
29. september 2004 - 01:43#18
OK, lad os se, om det måske er fordi der slet ikke er kommet noget i databasefeltet:
Ok nu virker det. Jeg fatter ikke hvordan. Det der gør udslaget er at skifte <? mysql_connect("localhost","root","") or die("Cannot connect to server"); mysql_select_db("users") or die("Cannot select database"); ?>
ud med
<?php $link = MYSQL_CONNECT("localhost","root",""); if (!$link) { die("fejl i forbindelse"); }
$selectdb = mysql_select_db("users"); if (!$selectdb) { die("databasen findes ikke"); }
?>
Tusind tak for hjælpen. Har trods alt lært en masse.
Synes godt om
Slettet bruger
29. september 2004 - 23:41#21
Det fatter jeg ikke, for de to stykker kode skulle gøre nøjagtig det samme. Den eneste reelle forskel er, at den første kræver at short_open_tag = On i php.ini.
Hvis short_open_tag = On kan man nøjes med <? ellers skal man skrive <?php
Synes godt om
Ny brugerNybegynder
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.