# Bilder in MySQL speichern und wieder auslesen



## cry_baby (19. März 2007)

Hallo, 

ich weiss diese Frage wurde wohl schon sehr oft gestellt, da ich aber heute schon den ganzen Tag nur am Foren-durchlesen bin, um meinen Fehler in den Griff zu kriegen, dachte ich ich öffne nen neuen Post.

Ich habe das Problem, das ich mit meinem Script Fotos hochladen will. Allerdings wird immer nur der Pfad zu den Bildern gespeichert. Auch bei der Ausgabe wird mir dann logischerweise nur der Pfad angezeigt.

Wie muss ich mein Script nun umschreiben, damit nicht der Pfad sondern das Foto selbst gespeichert wird?

Was ich noch dazu sagen will, ich weiss, dass es nicht so gut ist, die Fotos in MySQL zu speichern, allerdings geht es für meine Zwecke nur schwer anders. Zumindest wüsste ich nicht wie ich es anders lösen könnte.

Wenn mir jemand dazu nen Tip geben kann, nehm ich den gerne an, allerdings würde ich gern erstmal wissen, wie ich es mit meinem Script auf die Reihe kriege.

Hier ist der Code für die Tabelle, mit der ich meine Daten in die Datenbank speise:

```
<html>
<head>
<title>Feuerwehr Sonnefeld - Berichte und Bilder</title>
<style type="text/css">
<!--
.Stil1 {
	font-family: Tahoma;
	font-weight: bold;
}
-->
</style>
</head>

<body>
<form action="berichte_2007_speichern.php">
  <table border="0" align="left" cellpadding="5" cellspacing="0" bgcolor="#E5E5E5">

      <tr>
      <td align="right"></td>
	  <td style="font-family:HandelGothic BT; font-size:25px; color:#d33736"><b><i>
	  &nbsp;&nbsp;Berichte und Bilder 2007 <i><b></td>
    </tr>
    <tr>
      <td align="right" style="font-family:HandelGothic BT"; >Nummer</td>
      <td><input name="Array[Nummer]" type="text" size="5" maxlength="3"></td>
    </tr>
    <tr>
      <td align="right" style="font-family:HandelGothic BT"; >Datum</td>
      <td>
		<select name="Array[Tag]">
      		<option selected>01</option>
      		<option>02</option><option>03</option><option>04</option><option>05</option><option>06</option><option>07</option><option>08</option><option>09</option>
	  		<option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option>
	  		<option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option>
	  		<option>26</option><option>27</option><option>28</option><option>29</option><option>30</option><option>31</option>
    	</select>
    	<select name="Array[Monat]">
      		<option selected>01</option>
      		<option>02</option><option>03</option><option>04</option><option>05</option><option>06</option><option>07</option><option>08</option><option>09</option>
	  		<option>10</option><option>11</option><option>12</option>
    	</select>
    <span class="Stil1">2007</span>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Tag
    	<select name="Array[Wochentag]">
      		<option selected>Montag</option>
      		<option>Dienstag</option><option>Mittwoch</option><option>Donnerstag</option><option>Freitag</option><option>Samstag</option><option>Sonntag</option>
    </select>
</td>
    </tr>
	    <tr>
      <td align="right" style="font-family:HandelGothic BT"; >Überschrift</td>
      <td><input name="Array[Ueberschrift]" type="text" size="90" maxlength="500"></td>
    </tr>
		    <tr>
      <td> </td>
      <td align="left" style="font-family:HandelGothic BT"; >Details?&nbsp;&nbsp;
    <select name="Array[Details]">
      <option selected>Details</option>
      <option>keine Details</option>
    </select></td>
    </tr>
    <tr>
      <td align="right" style="font-family:HandelGothic BT"; valign="top">Bericht</td>
      <td><textarea name="Array[Bericht]" rows="15" cols="90"></textarea></td>
    </tr>
    <tr>
      <td align="right" style="font-family:HandelGothic BT"; >Bilder</td>
      <td>
	<input name="Array[Bild1]" type="file" size="50" maxlength="100000" accept="text/*"> <br>
	<input name="Array[Bild2]" type="file" size="50" maxlength="100000" accept="text/*"> <br>
	<input name="Array[Bild3]" type="file" size="50" maxlength="100000" accept="text/*"> <br>
	<input name="Array[Bild4]" type="file" size="50" maxlength="100000" accept="text/*"> <br>
      </td>
    </tr>
    <tr>
      <td align="right"></td>
      <td>
        <input type="submit" value=" Speichern ">
        <input type="reset" value=" Zurücksetzen ">
      </td>
    </tr>
	
</table>
</form>

</body>
</html>
```

Das Ganze wird dann mit diesem Code an die Datenbank geschickt:


```
<html>
<head>
<title>Daten verarbeiten</title>
</head>
<body>

<?php

$host = "localhost";
$user = "xxx";
$password = "xxx";
$dbname = "xxx";
$tabelle ="xxx";

$dbverbindung = mysql_connect ($host, $user, $password);

$dbanfrage = "INSERT into $tabelle values ('0', '$Array[Nummer]', '$Array[Tag]', '$Array[Monat]', '$Array[Wochentag]', '$Array[Ueberschrift]', '$Array[Details]', '$Array[Bericht]', '$Array[Bild1]', '$Array[Bild2]', '$Array[Bild3]', '$Array[Bild4]')";

if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {
print ("Datenbankeintrag erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}
mysql_close ($dbverbindung);

?>

</body>
</html>
```

Ausgelesen wird es dann mit diesem Code:


```
<html>
<head>
<title>Inhalte ausgeben</title>
</head>
<body>

<?php

$host = "localhost";
$user = "xxx";
$password = "xxx";
$dbname = "xxx";
$tabelle ="xxx";

$dbverbindung = mysql_connect ($host, $user, $password);

$dbanfrage = "SELECT * from $tabelle";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);

 while ($ausgabe = mysql_fetch_array ($result))
 {

 print ("<strong>Nummer:</strong> $ausgabe[Nummer]<br><strong>Datum:</strong>&nbsp;&nbsp;$ausgabe[Wochentag], $ausgabe[Tag].$ausgabe[Monat].2007<br> <strong>Überschrift:</strong>$ausgabe[Ueberschrift]<br> <strong>Details:</strong> $ausgabe[Details] <br><strong>Bericht:</strong><br>$ausgabe[Bericht]<br><strong>Bilder:</strong><br>$ausgabe[Bild1] $ausgabe[Bild2] $ausgabe[Bild3] $ausgabe[Bild4]<br><hr><br>");
 }

mysql_close ($dbverbindung)
```


----------



## birnkammer (19. März 2007)

Hallo,

um Bilder in einer Datenbank zu speichern, benötigst du den BLOB-Spaltentyp. In dieses Feld musst du dann den kompletten Binärcode des Bildes speichern. 

Viele Grüße


----------



## cry_baby (19. März 2007)

Ich habe den BLOB Spaltentyp verwendet... Wie muss ich das mit meinen Scripts realisieren?


----------



## birnkammer (19. März 2007)

Schau dir am besten dazu mal den Artikel an, dort wird das recht ausführlich erläutert.

Trotzdem solltest du dir vlt noch diese Seite ansehen:

16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
http://www.php-faq.de/q/q-db-blob.html


----------



## cry_baby (19. März 2007)

So blöd es jetzt vielleicht klingt, aber die Seiten hatte ich heut auch schon durch.. Per Google gefunden, bzw. durch dieses Forum hier.

Aber ich krieg es nicht in meinem eigenen Script hin.


----------



## birnkammer (19. März 2007)

Naja es ist auch nicht ganz so leicht, dass man es in ein bestehendes Skript einfach integriert. Aber um es mal schrittweise zu erläutern:

Das Bild wird in ein temporäres Verzeichnis hochgeladen
Dann wird der Binärcode des Bildes ausgelesen (z. B. mit file_get_contents() )
Dieser Binärcode wird in die Datenbank geschrieben
Ein Skript (z.B. bild.php) liest diesen Binärcode wieder aus und gibt ihn aus
eine andere Datei bindet dieses Bild dann ganz normla mit <img src="bild.php" ..> wieder ein

Viele Grüße


----------



## cry_baby (19. März 2007)

birnkammer hat gesagt.:


> Das Bild wird in ein temporäres Verzeichnis hochgeladen
> Dann wird der Binärcode des Bildes ausgelesen (z. B. mit file_get_contents() )
> Dieser Binärcode wird in die Datenbank geschrieben
> Ein Skript (z.B. bild.php) liest diesen Binärcode wieder aus und gibt ihn aus
> eine andere Datei bindet dieses Bild dann ganz normla mit <img src="bild.php" ..> wieder ein



Dh. bei mir ist das Script richtig, ich muss nur punkt nummer 2 irgendwie realisieren, dass nicht der Pfad sondern der Binärcode des Bildes gespeichert wird. Wo und wie füge ich das in mein Script ein?

Und dann muss ich Punkt Nummer 5 noch hinkriegen. Aber ich glaub das hab ich verstanden.


----------



## soulerino (1. August 2009)

Hallo,

ich habe im Prinzip das gleiche Problem.
Ich habe mir den Artikel http://www.phpbuilder.com/columns/florian19991014.php3 durchgelesen und danach selber ausprobiert.

Natürlich habe ich die Daten meiner lokalen Datenbank eingegeben kriege aber eine leere Seite wenn ich das Bild anzeigen lassen will.


```
<?php

// getdata.php3 - by Florian Dittmer <dittmer@gmx.net>
// Example php script to demonstrate the direct passing of binary data
// to the user. More infos at http://www.phpbuilder.com
// Syntax: getdata.php3?id=<id>

if($id) {

    // Daten wurden für die lokale Datenbank angepasst
    $con = mysql_connect("localhost","root","password");

    mysql_select_db("binary_data");

    //Hier wurde der Tabellenname angepasst
    $query = "select bin_data,filetype from binary_data where id=$id";
    $result = mysql_query($query);

    $data = mysql_result($result,0,"bin_data");
    $type = mysql_result($result,0,"filetype");

    Header( "Content-type: $type");
    echo $data;

};
?>
```

Dann habe ich das Bild in einer anderen html Datei mit <img src="datei.php3?id=1"> eingebaut.

Leider ist das Bild dann aber nicht sichtbar.

gruß soulerino


----------



## Dr Dau (1. August 2009)

Hallo!

Ersetze mal $id durch $_GET['id'].

Gruss Dr Dau


----------



## soulerino (1. August 2009)

oh ja natürlich ... och man, so eine Kleinigkeit hat mich jetzt einiges an Zeit gekostet.

Danke für die rasche Hilfe!

Gruß soulerino


----------

