Hallo,
ich möchte gerne bei einem auf MySQL basierendem CMS dem User die Möglichkeit geben, Bilder hochzuladen. Diese sollen dann in einer DB abgespeichert werden und dann, bei Bedarf, wieder abgerufen werden. Wie kann ich das machen?
Auch ich rate dazu, die Dateien in das Filesystem hochzuladen und nur die Namen der Bilder in der DB zu speichern.
Ansonsten kannst Du Dir mal diesen Beispielcode ansehen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Daten in DB schreiben</title>
<meta name="Author" content="Dr. Thomas Meinike">
<link rev="made" href="mailto:thomas@handmadecode.de">
</head>
<body>
<?php
if($action=="indb")
{
$dbref=mysql_connect("localhost", "...", "...");
mysql_select_db("datenbank",$dbref) or die(mysql_errno() .": ". mysql_error());
if(isset($datei) && $datei!="none")
{
$inhalt=addslashes(fread(fopen($datei,"r"),filesize($datei)));
$dname=$HTTP_POST_FILES["datei"]["name"];
$dgroesse=$HTTP_POST_FILES["datei"]["size"];
$dtyp=$HTTP_POST_FILES["datei"]["type"];
// Feld daten = LONGBLOB, alle weiteren VARCHAR
$abfrage="INSERT INTO tabelle (daten,dname,dgroesse,dtyp) VALUES ('$inhalt','$dname','$dgroesse','$dtyp')";
$ergebnis=mysql_query($abfrage,$dbref);
if($ergebnis==1)
{
print "<b>Die Datei wurde in die DB übernommen:</b><br><br>\n";
print "<i>Ausgabe über $HTTP_POST_FILES["datei"]["..."]</i><br>\n";
print "Dateiname: ".$HTTP_POST_FILES["datei"]["name"]."<br>\n";
print "Dateigröße: ".$HTTP_POST_FILES["datei"]["size"]." Bytes<br>\n";
print "Dateityp: ".$HTTP_POST_FILES["datei"]["type"]."<br><br>\n";
}
else
{
print "<b>Die Daten konnten nicht in die DB übernommen werden.</b>\n";
}
mysql_close();
}
}
else
{
?>
<form action="<?=$PHP_SELF;?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="hidden" name="action" value="indb">
<input type="file" maxlength="100000" size="30" name="datei"><br>
<input type="submit" value="In DB schreiben">
</form>
<?php
}
?>
</body>
</html>
Wichtig ist, den Dateityp mitzuspeichern, um beim Auslesen den richtigen Content-type senden zu koennen.
MfG, Thomas