Avatar billede tipman Juniormester
20. september 2010 - 19:57 Der er 21 kommentarer og
1 løsning

Vise billede fra MySQL

Jeg har en database med tabellen "upload". I den gemmer jeg billeder under typen "mediumblob". Den indeholder felterne id, name, size, type og content.

Jeg benytter følgende til at vise billederne, hvor $id kommer fra et link:

$id    = $_GET['id'];
$query = "SELECT name, type, size, content FROM upload WHERE id = '$id'";

$result = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $content) = mysql_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $size;
echo $type;
echo $name;
echo '<img src="'.$content.'"/>';

mysql_close(); 
exit;
}



Jeg får følgende resultat:
$size=11327
$type=images/pjpeg
$name=fil.jpg
en firkant med rødt kryds i.

Hvad gør jeg galt, siden jeg ikke kan få den til at vise et billede?
Hvis jeg bare bruger echo $content så viser den alverdens tegn som fil.jpg består af, det kan jeg ikke bruge.
Jeg benytter IE8.
Avatar billede erikjacobsen Ekspert
20. september 2010 - 20:46 #1
Du skal bare

echo $content;

og så bruge det script her andetsteds som

  <img src="dettscrtip.php?id=123">
Avatar billede erikjacobsen Ekspert
20. september 2010 - 20:46 #2
Og selvfølge ikke udskrive 
echo $size;
echo $type;
echo $name;
Avatar billede tipman Juniormester
20. september 2010 - 20:53 #3
Det virker bare ikke med echo content; alene. Den udskriver også bare alle tegnene i filen.
Avatar billede erikjacobsen Ekspert
20. september 2010 - 20:59 #4
Du skal jo bruge den som jeg skriver... gør du det?

Og så skal linien med  Content-Disposition  ikke med når det skal vises i et img-tag. Desuden staves det Content-Length og Content-Type.

Men - har du et link?
Avatar billede tipman Juniormester
20. september 2010 - 21:03 #5
Kan du tilrette det jeg skrev i første indlæg. Du kan se det her.
www.rullebaren.dk/test1.php.
Den åbner download.php, som viser siden.

Jeg har ikke helt forstået hvad det er jeg skal gøre.
Avatar billede erikjacobsen Ekspert
20. september 2010 - 21:09 #6
Skal billedet downloades - eller vises i et img-tag?

Hvis det skal downloades, skal du ikke fjerne Content-Disposition, men ellers gøre det jeg skriver.

Men det virker ikke som om det kører på dit link er den kode, som du viser her. Kan det passe?
Avatar billede tipman Juniormester
20. september 2010 - 21:20 #7
Billedet skal vises. Det hele står på en side html side.
Jeg er altså slet ikke med, hvad du mener. Kan du indsætte hele koden her?
Avatar billede erikjacobsen Ekspert
20. september 2010 - 21:29 #8
Det synes jeg er lidt unfair. Det du viser her er ikke den kode, der kører på det link du angiver.
Avatar billede aners Nybegynder
20. september 2010 - 21:31 #9
Avatar billede tipman Juniormester
20. september 2010 - 21:38 #10
Vil ikke være unfair. Her er hele koden for download.php. Men din metode virker heller ikke endnu. Det giver en tom img, altså en firkant med rødt kryds. Jeg har udskiftet pw.
Jeg har bare lavet en ny simpel html fil.

<html>
<head>
<title>Untitled Document</title>
</head>

<body>
<?php
if(isset($_GET['id']))
{
// if id is set then get the file with the id from database

    $user="rullebaren_dk";
      $password="yyyy";
      $database="rullebaren_dk";
      mysql_connect('rullebaren.dk.mysql',$user,$password);
      mysql_select_db($database) or die( "Unable to select database");

$id    = $_GET['id'];
$query = "SELECT name, type, size, content FROM upload WHERE id = '$id'";

$result = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $content) = mysql_fetch_array($result);
//header("Content-length: $size");
header("Content-type: $type");
//header("Content-Disposition: attachment; filename=$name");
//echo $size;
//echo $type;
//echo $name;
echo $content;
//echo '<img src="'.$content.'"/>';

mysql_close(); 
exit;
}
?>

</body>
</html>
Avatar billede erikjacobsen Ekspert
20. september 2010 - 22:10 #11
<?php
if(isset($_GET['id']))
{
// if id is set then get the file with the id from database

    $user="rullebaren_dk";
      $password="yyyy";
      $database="rullebaren_dk";
      mysql_connect('rullebaren.dk.mysql',$user,$password);
      mysql_select_db($database) or die( "Unable to select database");

$id    = $_GET['id'];
$query = "SELECT name, type, size, content FROM upload WHERE id = '$id'";

$result = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $content) = mysql_fetch_array($result);
//header("Content-length: $size");
header("Content-type: $type");
//header("Content-Disposition: attachment; filename=$name");
//echo $size;
//echo $type;
//echo $name;
echo $content;
//echo '<img src="'.$content.'"/>';

mysql_close();
exit;
}
?>
Avatar billede erikjacobsen Ekspert
20. september 2010 - 22:10 #12
Og intet før den første linie med <?php
Avatar billede tipman Juniormester
20. september 2010 - 23:04 #13
Sådan, så virker det.
Hvorfor virker det ikke på en hjemmeside, hvor der er noget HTML før og efter?
Jeg vil nemlig gerne hente flere forskellige felter fra databasen og putte det hele ned i en HTML tabel og vise nogle billeder i tabellen, som nedenfor. Det er samme tabeller der skal vises billeder i.
Kan en include.php hjælpe mig videre?

Den øvrige side, som jeg ville integrere det på, ser ud som nedenfor:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Rullebaren.dk</title>

<link href="css/generel.css" rel="stylesheet" type="text/css" />
</head>





<body bgcolor="#000000">

<table width="960" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="20" bgcolor="#ffac00">&nbsp;</td>
    <td width="585" bgcolor="#ffac00"><h1>Velkommen til drinksdatabasen</h1>
    <p>Indtast søgeord for drink eller ingrediens:
    <form id="form1" name="form1" method="post" action="./drinks-output.php">
    <input type="text" name="ord" id="ord" />
    <input type="submit" name="sog" id="sog" value="SØG" />
    </form>
    </p></td>
    <td width="400" align="center" valign="middle" bgcolor="#ffac00">&nbsp;</td>
  </tr>
</table>

     
<?php
$ord=$_POST['ord'];

$user="rullebaren_dk";
$password="yyyy";
$database="rullebaren_dk";
mysql_connect('rullebaren.dk.mysql',$user,$password);
mysql_select_db($database) or die( "Unable to select database");

$query="SELECT * FROM drinks WHERE opskrift LIKE '%$ord%' OR navn LIKE '%$ord%'ORDER BY navn ASC";
$result=mysql_query($query);
$num=mysql_numrows($result);
$i=0;
while ($i < $num) {

$taeller=mysql_result($result,$i,"taeller");
$navn=mysql_result($result,$i,"navn");
$opskrift=mysql_result($result,$i,"opskrift");
$dato=mysql_result($result,$i,"dato");


      echo "<table width='960' border='0' cellspacing='0' cellpadding='0'>";
      echo "<tr>";
      echo "<td width='17' bgcolor='#ffac00'></td>";
      echo "<td width='600' class='guestbook' align='left' bgcolor='#ffac00'><font size='4'>".$navn."</font></td>";
      echo "<td width='326' class='guestbook' align='right' bgcolor='#ffac00'>".$dato."</td>";
      echo "<td width='17' bgcolor='#ffac00'></td>";
      echo "</tr>";
      echo "</table>";

      echo "<table width='960' border='0' cellspacing='0' cellpadding='1'>";
      echo "<tr>";
      echo "<td width='17' align='left' bgcolor='#ffac00'></td>";
      echo "<td width='900' align='left' bgcolor='#ffac00'>".$opskrift."</td>";
      echo "</tr>";
      echo "</table>";
     


$i++;
}

mysql_close();

      echo "<table width='960' border='0' cellspacing='0' cellpadding='0'>";
      echo "<tr>";
      echo "<td width='960' bgcolor='#ffac00'>&nbsp</td>";
      echo "</tr>";
      echo "</table>";
 

?>
     

</body>
</html>
Avatar billede tipman Juniormester
20. september 2010 - 23:07 #14
Takker i hvert fald mange gange for din hjælp indtil nu... Tak.
Avatar billede erikjacobsen Ekspert
20. september 2010 - 23:15 #15
Vi forstår vist ikke hinanden.... Et billede er et billede, det er ikke, slet ikke, HTML. Derfor giver det ingen mening overhovedet at kombinere det med HTML.

Dit script, download.php, er vist ok nu, så på den HTML-side, hvor du skal have vist billeder, skriver du fx mellem alt det andet HTML:

  <img src="http://www.rullebaren.dk/download.php?id=8">
  <img src="http://www.rullebaren.dk/download.php?id=7913">

hvis du skal have 2 billeder vist. Der er for så vidt ingen forskel på at vise et billede fra en database og et billede, der ligger som fx .jpg fil.
Avatar billede tipman Juniormester
21. september 2010 - 00:14 #16
Jeg tror vi misforstår hinanden. Jeg har brug for noget i denne retning:
<HTML>
<BODY>
Noget alm HTML kode.
<?php
Noget kode som viser mine databasedata og billeder fra databasen.
?>
</BODY>
</HTML>

Men jeg kan jo ikke få nogle billeder ud af databasen, når der står noget alm. HTML kode før og efter min php script. Hvorfor vil php script ikke vise billedet, når det er midt mellem HTML kode?
Avatar billede erikjacobsen Ekspert
21. september 2010 - 10:07 #17
Ja, og så gør du som jeg skriver:

<HTML>
<BODY>
Noget alm HTML kode.
  <img src="http://www.rullebaren.dk/download.php?id=8">
  <img src="http://www.rullebaren.dk/download.php?id=7913">
</BODY>
</HTML>
Avatar billede repox Seniormester
21. september 2010 - 10:16 #18
#17
erikjacobsen misforstår dig ikke - det er dig der misforstår ham.
Han prøver at forklare dig at et billede ikke har noget med HTML'en at gøre, hvorfor din logik omkring dette er dybt fejlagtig.

Et billede er binær data og du kan som udganggspunkt ikke bare sætte binært data ind på en HTML side og så forvente et virkende output.

Et eksempel der måske giver mening, vil være at vise dig HTML som virker:
<html>
<head>
  ...
</head>
<body>
  <img src="/sti/til/dit_billede.jpg">
</body>
<html>


Det der sker der er at din browser får at vide at den skal hente et billede og vise det på den plads du har angivet i HTML'en. Det forstår din browser og det giver god mening.

Det du forsøger at gøre er dette:
<html>
<head>
  ...
</head>
<body>
  <img src="‰PNG

 
IHDR  <  <  µžN%  tEXtSoftware Adobe ImageReadyqÉe< 
SIDATxÚ¼ZKodG®sïuwÛnw»í±3{f2Ž'DQ&DAa"„‚Ä6HHHü6ì"vlØ ˆ„Ä‚,²    ;ˆ É1yMf<Oíñøm÷ûÞ[‡SïªÛíÎ0H\ÙÝ·«««¾:uÎwu¡Ùl2ïBDÎù?ßßøû•ÍíÖúNÛÿ'1Pä;¸-Q×è>荼.žª.ÌM|éÙÅžYˆ¢À
´‚{kýà×zïÁ^çÒÓg>iáÔD©"ÄižËß õ¡wz¥{o &ÛA­Ev ±ŠO„DÍŠ #ÑS6ÊÓ´ÔÓ_õ$$»½ìòÕíËÿºsjºòãW/-/N[è4
'çù•ë[¿úã•Çfk?xåé~šoïµZÝ´Ûϐ‹É s¯Ñ3<͍jVùîzڏ~gÛÁ\|1'Tu¼4S¯UË¿ÿËÇk›»?ýö³Ï^|,Žc\ƒ&Äw7÷ñ›wÏ-5¾ûòSw7wÚyŽjð± V´
ðZ"ö‡N­ì¹-ñ·N´ÅQT«--—þÛÍk7¶~þ£çÏ-4wD}h/ºÝîïÞø€-õ­—.Þº·O2Îú¹ÜF¡7âqq‹Rhž‹Ï\\¨nL¦ú›{ù§;ˆVž›ah.;粑ë?52Ýdy¾wع~g÷›/.7ê"¯¿ñ!á¤q"ú6MÓkwvV7Ú¯|ye÷ ½sØÎr1|.aˆ¹ &[¸ÄÏ...f¸E™öÏþVuQôOüqÐ.
Ý=í<7Cq<hviç¿þÒÊõÖµÛÛ„6¡Þý~ÿ7ækõñÒÝû‡iÆíö‘$Н¾Ýûû­?š{maO,P„znzÌ,ǝÃÎS•Óóõw>ÚZ97›6·Ûíµ­æ...ó‹G­^§—Ñæƒ4Í@Õ
¯àiŸ2>É-'T;BhÒ"Ú{x1$Aï!&q×ëeÇÝå󍵻ë„V€ît:Ív:=U&Ð)iFŽÆÒ1g(šéBÒðhD~ŵ+ôûkø²...{_é€^1×óJfT?ä€Gí^£^¾ÞJ    ­ MêÑKsÄœeÜG¯µZ˜9<¹9 ŠŽ5¥È¥\Ó3*4ÌâfBÑÕB¹­ÈÁð"2VÙU¼w{Y'$ýL :MH...9æœ+#C:BÂ/ ö½Z—à
_™ó-Ö™£q#v
Vø¡Fl g´ÿR „6Ñdİ×Ë1ã¤J*hœ...o9ê#sî 0ôÞ à¦íÆè‘Ù0m4[í³5OrvY?Wh# F­ä    thÌÖ8|ß¡€¡C/3xÂ...à‡FÚò=6S-¯œ¹°Ô¨×*åÒáÐv,F>ºµýæ?ni×#'M8æi¦ì'±°RRë\ð"óœj«B‡Øh­íÇ­ÃÓ¿Òúk
Ó¿*cñ×¾ðÄgž>3:È*—"\¬„™ÁQ¨.ä
•i?%í;{ BY[ºãà‚­Æzœ=Yþ™,Å?ùÎóÕjå"C
+¸$1£Œ¢IØšj0 zýl „svfÞÄYí`m™ýõã÷Áï¿úÜà 6¸Q›¡Ê4ËYÐÂûç ý~^+|z-ï{ϵw2>ˆ¦òÌôÒéúÃ"æjÏ=æÉÈ3êá#h ªf1p• ê¬+óäÂKõ¹yš>‚ª^üÜ9öÐ
~ã>ÄŒ¥F¢NÒ¤F™Š mdìÊàVaƒOô-.8Ö¶‹Ö‘T'øÂÙÙ‡Ä $V½Ä¾‘T! ÍX-æñX,¼Ô$-8e‹úàíˆÍkÀè‡YÎÎVÇ'ø$ˆ[‡o¿wµññDšq´¾uœgzë´j'eæ"}IÛsàÆ¥Z¢37è|¡5^`ˆƒ9ŸèfìÁ@„pB¢xûèµß¾Õã p ž€4SÖè4µ‘[ð%xÂBæ" Ö%ã¡‘ˏúF6§üDMøpu§•rÛ9]Ø¡©‘4ÇãV-T#×èÿžù4DÆ^úˆ¾vév×ç'zìN'E‘Áp/÷)M36[ýñn÷Ò(bSãI•ƒc^·§ÓŒ{ìç$C™EMÌ'‰dKËÑ'©þ lºÙÉÚ½¼c š¶§ÝÍèu¼œ „&¶Rj.4ò¢çiöôdIK "â0ã Æn/ovS;xâ{gG³+â¿r)6"޾Œæ„îµ> Ë!À0V)Ž<÷>ԏح⡲    WÝ鉨î'ñr3oÓšRÎ)²þ‚‡ciš?üÆ3ÓÕ2‰ ˜ž€èã...ç-ææ«‘ç`éþƒÛo¾}‡ÀtÓ¼×ç6    ãžö‚ ZœØ2OÌ4Œç|OnDξøé¥ÚCDgæëôWh¼wÿ¨ßçý\Ä÷~Ø^ <i—&rEž'yGE-8 [[RÀ E{§›ÕªìѮջ{Ý4 éÃæÑ4 ÍÔ@ÆãÊ•)x<¦¸<»Æ‚ÚÂÐ:p=v‘VlíµUQÀ'`)XòdI%
éÑD²\i$r
uI÷esÕÀ•5•Mºº½t¿ÕC¿`!D¬" <¢î ÑxG/ »ÁUF$µ(²pÁi30›<Òµ»ßUÆç¼,„    ( H' E
éå&æT9ŸµàÈè    ý—Ç
t³ÕÍu\
^YbБ
­¬+ êìR='ÅÜ‹Z.¿¿^›(«Xw~vòñ³3C!îì5oÜÞ—¥PTuÞ÷®mµº™Ÿ-b Äh+ _G×ô!Œò„l~ù‡ËJmˆª/-ϼö³—‡þò¯oÝ|ýÍ«.ÉQîÆT...‚¬šé""5Dæ9%¿^Å\uݯé¡-è«iú™³

ÐF$)ý\Ù®7IP01r"æ(rPZÕ;þI€úóЛCÍ/>™ÿˆM±xP€ÞéÇùEîÌ Âš¢'>,J¾˜5€IZˆ翻ÀÓ
õïåèE•º1
ªB†¬²sã`ƒ×lˆ£åiÜ¡7º¨ d¡f㪣ÎÝ÷«x脊Pý™=õ,„Z'ÇÓ²¦
:>Gg®þëÓ†öÊŸVGýœÊ>b¨Á...ã/òqˆq‡˜‹Å½Zµo'ê÷VüQˆ ØŠ‹¬ÀÓéâyœ}
F—8Nä€ÂÔEõ;
*,„ΆdRl <¢ƒuf...ô®A‘õÑ?]TCÊç¡>!˜ ½$†5sÔ'.a‘ÄÛœb-:2²+J·j}ƒ(˜ÈºQ˜gD!_h´Fi¢ZÀàDÛFÕ~ѸWœâZö#tÐqßžÂrq=tš¢ýGô&ó' ¯"¥No‘ŽRMŒá¡\8õŠ"íK"»;QœÈ¥è˜£KsjºE¨°À7J§ÃÜœ¯P$„ÒðLa-²¼cÖv¹.3 -lK]š† ,µÛB‰Í‘ð"
¤:zЁº !‰<ú°ÇW>ûøÒ™SÍv¿ÕIò ªã^ì~-׏ Ù¢¼MN&Ó§&¿÷ÕOá°`ÒVïx9©ŽÝÛœÒ'-ÏWˆÄòXl¹Þ<¤áa¡
圇}    €ŸŽ~o ;²eVÑÕ·•±L    e`³>†Y«ÓŸš$Ø¢ÿhCXî²Ï— „&~¤P rG&¹à—/0`h³"'˜$}Üî#O5è8ŽKü¸ÓUÓÚd    "°~ lžªëÍÌCd°¸?~`U‹"ù€ó"GP¯-³œ÷Ó¼ŒMñ¼‡@\*MÆ­~¯soëx~f²*K"½ªP©̧ÊpôCNÞCz*-`m¢4]«ll7»á$´t¥R™ž®wöoÓRîmž_˜&yG*áÖ5?`ƒ¥êBUmÁ³xP‹#õ\$o¢"S.chÔ*‹Õnop޽ƒÛ„"Ð&zbb¢ÑhÔ××·7Vaéâ­õƒ‹çGÍÞþq·ÕM3ùÌ‹; α͇ð踸ËÈàd¥Ž£"iÐ"J¥˜,o¦V¡"þã;»"­íl¬ÎUšÆã„6¡á;^XX8¼zuízkñ‰Kÿ¾þàôÌäÒüéuȽs:µy =,ø‡ïÅç°@§¥ôšgùƒ&ó
Ãô™®_š(Ùݤþ4)—¥Ôíã½£¢ŒµWêÑÎÂ...§'¡^©çT677WWWoÞ¼¹{œÖžiœZ(•ÊPŒiÀe›êÁ+õ$&±[äa—Ć<± Ú{ýÞþÎæÑæû³ScËËË+++$Y!ißü¹¹9ιPñµµíÍw¯];Ž'æ §íÅA!Æõžˆ8±Û°sÒÁ
fS@ÁÓ¼½=55µ87wöìÙóçÏBÂIh5q'$Õj•nÈ6ëõúƒöööHüý~¹¼õ?\äîhŸ'-žœ™™™—ÝLNNN÷\ž}ž°×ëµZ­££#jïv»©¨¯óÿ?hçØØÉ•DY«Õn¹\VOÒ·ÿ` ¢‰...›J'Ø    IEND®B`‚">
</body>
<html>


I sagens natur vil browseren igen forsøge at hente et billede, på den sti du har angivet i src attributten; den sti findes bare ikke (hvilket jeg virkelig håber du kan se giver god mening, ellers skal du læse op på din HTML inden du fortsætter med PHP) og browseren viser derfor ikke noget billede.
Avatar billede tipman Juniormester
21. september 2010 - 16:41 #19
OK, nu forstår jeg det, mange tak for det...
Avatar billede tipman Juniormester
21. september 2010 - 16:42 #20
egentligt, så er min $content indholdet af jpg filen og ikke selve jpg-filen. Er det ikke korrekt forstået?
Avatar billede erikjacobsen Ekspert
21. september 2010 - 19:16 #21
Din $content er indholdet af filen, ja, men du skal bruge en url til filen i et <img>-tag.
Avatar billede tipman Juniormester
13. oktober 2010 - 06:44 #22
Tak
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