Avatar billede ullidk Nybegynder
01. december 2004 - 18:18 Der 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 ?!?!?!
Avatar billede detox Nybegynder
01. december 2004 - 18:24 #1
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'];
    }
}
?>
Avatar billede detox Nybegynder
01. december 2004 - 18:26 #2
Scriptet kan så kaldes fra almindelig html på denne måde:

<img src="script_navn.php?id=1" />
Avatar billede ullidk Nybegynder
01. december 2004 - 18:29 #3
Kan du uddybe det lidt mht mime-type? Det her er min upload form:

<form name="form1" method="post" action="upload_performed.php">
<input type="file" name="imagefile1">
<br>

<input type="submit" name="Submit" value="Submit">
Avatar billede detox Nybegynder
01. december 2004 - 18:29 #4
I øvrigt ser det lidt mystisk ud at du henter billedet med: $_POST[imagefile1], skulle det ikke ligge i et $_FILES array?
Avatar billede detox Nybegynder
01. december 2004 - 18:31 #5
Du skal have: enctype="multipart/form-data" i din form:

<form name="form1" method="post" action="upload_performed.php" enctype="multipart/form-data">
<input type="file" name="imagefile1">
<br>
Avatar billede detox Nybegynder
01. december 2004 - 18:32 #6
Prøv at læse lidt om fileuploads her:
http://dk2.php.net/manual/en/features.file-upload.php
Avatar billede detox Nybegynder
01. december 2004 - 18:37 #7
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.
Avatar billede ullidk Nybegynder
01. december 2004 - 18:54 #8
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'];
Avatar billede detox Nybegynder
01. december 2004 - 19:01 #9
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'];
Avatar billede detox Nybegynder
01. december 2004 - 19:06 #10
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());
}
Avatar billede ullidk Nybegynder
01. december 2004 - 19:08 #11
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...:-(
Avatar billede morteeart Nybegynder
01. december 2004 - 19:09 #12
måske skulle du overveje at bare lave filupload, og så kun gemme stien i databasen,
istedet for at have billedet liggende i binær format.

også meget nemmere :)
Avatar billede ullidk Nybegynder
01. december 2004 - 19:12 #13
Ja, det kan godt være jeg bliver nødt til det...selvom jeg er større fan af at have ting samlet fysisk i databasen i stedet for referencer...
Avatar billede detox Nybegynder
01. december 2004 - 19:14 #14
Filsystemet på serveren er skabt til netop det formål, så det vil jeg osse anbefale (selvom det andet er muligt).
Avatar billede ullidk Nybegynder
01. december 2004 - 21:48 #15
Detox, smid et svar! Jeg forsøger med referencer i stedet!
Avatar billede detox Nybegynder
01. december 2004 - 22:05 #16
Værsgo'
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
Computerworld tilbyder specialiserede kurser i database-management

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