01. december 2004 - 18:18Der er
15 kommentarer og 1 løsning
Visning af billeder fra MySQL database
Hejsa,
Har flg. to MEGET simple scripts der indsætter et billede i en MySQL database:
<? $db_host = "localhost"; $db_user = "xxx"; $db_pass = "xxx"; $db_name = "xxx"; // check login and password // connect and execute query $connection = mysql_connect($db_host, $db_user, $db_pass) or die ("Unable to connect!"); mysql_select_db($db_name); $query = "INSERT INTO images (image1) VALUES ('$_POST[imagefile1]')"; $result = mysql_query($query, $connection) or die ("Error in query: $query. " . mysql_error());
echo "Images uploaded..."; ?>
Men nu er mit spørgsmål så: Hvordan får jeg vist de billeder der ligger i databasen? For hvis jeg prøver med echo $result; så står der bare Resource id #2 ?!?!?!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det er en god ide at gemme mime-type sammen med billedet så kan du hive billedet ud således:
<?php if (isset($_GET['id'])) { $id = $_GET['id']; require 'db.php'; // Forbindelse til databasen $res = mysql_query("select data, type from pics where id='$id'"); if ($row = mysql_fetch_assoc($res)) { header("Content-type: ".$row['type']); echo $row['data']; } } ?>
MySQL er heller ikke det mest velegnede sted at gemme sine billeder (medmindre det er en masse meget små billeder). Det er bedre at ligge dem i en mappe og så gemme navnet (og evt. sti) i databasen.
Det lyder altsammen meget fornemt men er det virkelig ikke muligt bare at lave en simpel SELECT sætning som f.eks: $connection = mysql_connect($db_host, $db_user, $db_pass) or die ("Unable to connect!"); mysql_select_db($db_name); $res = mysql_query("select image1 from images where id='1'",$connection); echo $res['image1'];
Nej, du er nødt til at fetche resultatet fra din forespørgsel, ligesom du osse skal sætte en header. Som minimum vil jeg mene du skal have:
$connection = mysql_connect($db_host, $db_user, $db_pass) or die ("Unable to connect!"); mysql_select_db($db_name); $img = mysql_result(mysql_query("select image1 from images where id='1'"),0); header("Content-type: image/jpeg"); // Hvis det er et jpeg billede echo $res['image1'];
Men når du indsætter billedet kan du heller ikke bare smide det ind uden at bruge escape. Det skal gøres på denne måde:
if (is_uploaded_file($_FILES['imagefile1']['tmp_name'])) { $img = addslashes(file_get_contents($_FILES['imagefile1']['tmp_name'])); $query = "INSERT INTO images (image1) VALUES ('$img')"; mysql_query($query) or die ("Error in query: $query. " . mysql_error()); }
Hmm...nu får jeg at vide: The image “http://localhost/camping/upload2.php” cannot be displayed, because it contains errors.?! Måske man bare skulle lade det ligge...:-(
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.