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 ?!?!?!
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.