PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Dateien in SQL datenbank speichern



pogo
29.11.2004, 21:21
Ich hab keine tutorials zu dem thema gefunden, weiß vielleicht wer welche? Ansonsten kanns ja hier erklärt werden :p

Also: Wie speicher ich dateien in einer MySQL datenbank? Welchen variablen typ brauch ich und wie viele spalten brauch ich überhaupt für so eine tabelle? Und wie kann ich das ganze dann über php von einer webseite hochladen? Also, es ist klar, dass ich ein formular mit 'nem file-feld brauch, aber was dann?

Thx für antworten :)

Jesus_666
01.12.2004, 16:02
Ich hab keine tutorials zu dem thema gefunden, weiß vielleicht wer welche? Ansonsten kanns ja hier erklärt werden :p

Also: Wie speicher ich dateien in einer MySQL datenbank? Welchen variablen typ brauch ich und wie viele spalten brauch ich überhaupt für so eine tabelle? Und wie kann ich das ganze dann über php von einer webseite hochladen? Also, es ist klar, dass ich ein formular mit 'nem file-feld brauch, aber was dann?

Thx für antworten :)
An sich ist die üblichste Methode, um binäre Daten in einer Tabelle abzulegen, ein Feld vom Typ "Blob".*
Zum Thema "Wie mache ich einen Dateiupload" könnte dir die PHP-Referenz (http://de2.php.net/manual/de/features.file-upload.php) weiterhelfen. Zumindest der Aufbau des benötigten Formulars ist darin beschrieben.
Ich glaube, du mußt einfach die Datei per POST an das Skript übergeben (was das Formular tut) und dann im Skript die entsprechende Variable in die Datenbank schreiben.


* Die Blobs können folgende Datenmengen aufnehmen:
Tinyblob: 255 Byte
Blob: 65535 Byte (knapp 64 KiB)
Mediumblob: 16777215 Byte (knapp 16 MiB)
Longblob: 4294967295 Byte (knapp 4 GiB)

pogo
03.12.2004, 18:08
Ich hab jetzt mal folgendes gemacht:


echo '<form enctype="multipart/form-data" action="index.php?section=admin&amp;site=galerie&amp;action=g1_screenshots&amp;'.SID.'" method="post">';
echo '<input type="hidden" name="MAX_FILE_SIZE" value="30000">';
echo 'Send this file: <input name="userfile" type="file">';
echo '<input type="submit" value="Send File">';
echo '</form>';

if (isset($_FILES['userfile'])) {
$sql = "INSERT INTO
galerie_screenshots_g1(datei,name)
VALUES
('".$_FILES['userfile']."',
'".$_FILES['userfile']['name']."')";
mysql_query($sql) OR die(mysql_error());
echo "Datei hochgeladen!";
}


Das funktioniert nun soweit auch. Aber ich möchte bilder hochladen, die dann wieder ausgegeben werden. Dafür hab ich sowas gemacht:



$sql="SELECT
`datei`,
`name`
FROM
`galerie_screenshots_g1`;";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
echo "<img src=\"".$row['datei']."\" alt=\"".$row['name']."\">\n";
}


Blöderweise klappt das nicht. Kann man das überhaupt, also bilder aus einer datenbank anzeigen? Und wenn ja, wie? Was hab ich falsch gemacht?

Chocwise
03.12.2004, 18:50
@ pogo:
Du kannst ein Bild nicht innerhalb einer HTML/Text-Datei ausgeben lassen, das Bild muss separat in einem Script mit dem passenden header ausgegeben werden.
Also:
- Headerinformationen (image/jpeg || image/gif || ... , no cache, ...)
- Bilddateidaten

Ich habs nie gemacht, aber versuchs mal so in etwa:

<?php
$sql="SELECT
`datei`,
`mime`
FROM
`galerie_screenshots_g1`;";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result)) {

Header( "Content-type: ".$row['mime']);
ImageJPEG($row['datei']);

}
?>

Liest du dir dieses Script aufmerksam durch, wird dir auffallen das du ein weiteres DB-Feld brauchen wirst um den Mime-Typ des hochgeladenen Bildes abzuspeichern damit bei der Ausgabe der korrekte Mime-Typ an den Browser übermittelt werden kann.
An den richtigen Mime-Typ des hochzuladenen Bildes kommst du wenn du dir hier Seite 123 ff durchliest:
http://www.mut.de/media_remote/katalog/bsp/382726202Xbsp.pdf

Denk dran das beim Bildausgabescript nichts anderes an den Browser ausgegeben werden darf als Headerinformationen und Grafikdaten. Sobald du irgendwas z.B. mit echo ausgibst, ists verhunzt.


Have Phun und sags obs und wie's funzt.

pogo
03.12.2004, 19:24
Erstmal gibts da gar keine seite 123, das geht nur bis seite 48 :D Aber trotzdem danke, das teil ist extrem nützlich!

Es funzt aber noch nicht. Ich hab jetzt noch ein feld "mime" in die DB eingebaut. Welchen typ muss ich da denn nehmen? Reicht ein ganz normales VARCHAR?
Dann hab ich das script zum hochladen ein wenig verändert:


$sql = "INSERT INTO
galerie_screenshots_g1(datei,mime)
VALUES
('".$_FILES['userfile']."',
'".$_FILES['userfile']['type']."')";
mysql_query($sql) OR die(mysql_error());
echo "Datei hochgeladen!";

Ein neues bild hochgeladen und dein code zum ausgeben genommen, aber es geht nicht...

Chocwise
03.12.2004, 20:31
Erstmal gibts da gar keine seite 123, das geht nur bis seite 48 :D Aber trotzdem danke, das teil ist extrem nützlich!

Es funzt aber noch nicht. Ich hab jetzt noch ein feld "mime" in die DB eingebaut. Welchen typ muss ich da denn nehmen? Reicht ein ganz normales VARCHAR?
Dann hab ich das script zum hochladen ein wenig verändert:


$sql = "INSERT INTO
galerie_screenshots_g1(datei,mime)
VALUES
('".$_FILES['userfile']."',
'".$_FILES['userfile']['type']."')";
mysql_query($sql) OR die(mysql_error());
echo "Datei hochgeladen!";

Ein neues bild hochgeladen und dein code zum ausgeben genommen, aber es geht nicht...
Jo, VARCHAR müsste reichen.
der Mime-Typ den das in der PDF-Datei angegebene Verfahren vorschlägt, müsste etwas nach diesem Schema sein:
image/jpeg oder auch image/jpg oder auch image/png usw..
Ist es nicht so, stimmt da was mit den Mime-Typ-Einstellungen des Servers nicht.
Am besten prüfst du zunächst mal nach ob überhaupt der erste Schritt des Daten Abspeicherns funktioniert. Wenn du PHPMyAdmin noch nicht hast, sei's dir als Webentwickler empfohlen:
http://www.phpmyadmin.net/home_page/

pogo
04.12.2004, 14:39
phpMyAdmin hab ich natürlich, ist ja sowieso bei jedem webhoster vorinstalliert und auch bestandteil von xampp. Der schritt des hochladens klappt soweit, dass ein neuer eintrag in der DB gemacht wird und der mime-type stimmt. Aber in der spalte in der die datei liegt, steht immer sowas: [BLOB-5 Bytes]. Auch wenn die datei eine andere größe hat, es wird immer 5 bytes angegeben. Ich habs mit mehreren bildern versucht...

dead_orc
11.12.2004, 19:14
Auch wenn dieser Thread uralt ist - man soll ja erst die Suchen-Funktion verwenden :p
Also: Ich habe das in etwa genau so gemacht. Die Ausgabe erfolgt nicht mit imagejpeg, imagegif ö.Ä. sondern einfach mit echo.
Trotzdem weiß ich nicht, wie ich die Datei per Skript in die DB bekomme - so gehts auf jeden Fall nicht!

pogo
12.12.2004, 17:57
Auch wenn dieser Thread uralt ist
Na, so alt ist er auch noch nicht...

Trotzdem weiß ich nicht, wie ich die Datei per Skript in die DB bekomme
Ich weiß es ja auch immer noch nicht und warte eigentlich noch auf jemanden, ders mir erklärt ;)