Bilder in einer MYSQL Datenbank abspeichern
In diesem Tutorial will ich euch zeigen, wie man Bilder in eine Datenbank abspeichert und anschließend wieder aufruft.
Als erstes erstellen wir eine Tabelle mit dem folgenden Query:
CREATE TABLE Avatare (
Id INT NOT NULL AUTO_INCREMENT ,
Bild BLOB NOT NULL , // !!! Die Spalte, in der das Bild gespeichert wird, muss den Datentyp BLOB bzw. LONGBLOB besitzen (BLOB = Binary Large OBject)!!!
PRIMARY KEY (Id)
);
Nun erstellt man ein Upload Formular womit man ein Bild hochladen kann:
<html>
<body>
<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data"> <!-- method und enctye sind notwenig! -->
<input type="file" name="Bild"><br>
<input type="submit" value="Hochladen">
</form>
</body>
</html>
Über dem Html-Konstrukt schreiben wir nun folgenden PHP-Code:
<?php
if(isset($Bild)){
$Bild = fread(fopen($Bild, "r"), filesize($Bild)); // Datei wird geöffnet(fopen) und bis zum Ende(filesize) gelesen(fread)
$Bild = addslashes($Bild); // um den Inhalt der Datei zu speichern, müssen noch die Sonderzeichen escaped werden
mysql_connect("", "", ""); // Mysql Routine
mysql_select_db("test");
mysql_query("INSERT INTO Avatare (Bild) VALUES ('$Bild')");
echo "Bild wurde hochgeladen und abgespeichert!";
mysql_close();
}
?>
Nun wollen wir das Bild aus der Datenbank herausholen:
Wir erstellen eine neue Datei "Bild.php", ohne Html-Konstrukt.
Man muss darauf achten, dass vor "<?php" kein Leerzeichen oder änliches steht!
<?php
header("Content-type: image/png"); // Sagt dem Browser, dass die Datei ein Bild (PNG) ist
mysql_connect("", "", ""); // Mysql Routine
mysql_select_db("test");
$Q = mysql_query("SELECT * FROM Avatare WHERE id=$BildNr"); // Abfrage mit Bedingungen...
$Q = mysql_fetch_array($Q);
echo($Q['Bild']); // Binärer Inhalt wird ausgegeben
mysql_close();
?>
Nun kann man in einer HTML-Datei das Bild aufrufen:
<img src="Bild.php?BildNr=XXX"> // XXX ist die Bild Nr.