.jpg in mysql speichern...

slooodge

Grünschnabel
Hallo,

ich weiß, dass dieses Thema schon des öfteren behandelt wurde, ich habe mir auch etliche tutorials/threads angeschaut und trotzdem komme ich nicht weiter - daher hoffe ich auf eure hilfe...

Möchte gerne per Formular ein Bild in einer MySQL Datenbank speicher. Aber irgendwie gibt es immer nur ein error. Per PHPmyAdmin kann Bilder in dem entsprechendem Feld (MediumBlob) speichern.

html und PHP hängt unten an.

Würde mich wahnsinnig freuen, wenn mir ein Experte auf die Sprünge helfen würde!

Danke, Slooodge

HTML:
<form enctype="multipart/form-data" action="insertpix3.php" method="post"> 
<input type="file" name="file"><br>
<input name="propid"><br>
<input name="photoid"><br> 
<input type="submit" value="hochladen">



PHP:
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
	mysql_select_db(MYSQL_DATABASE);

  		 $sqlab = "insert apartmentpix";
         $sqlab .= "(propid, photoid, pix) values (" . $_POST["propid"] . ", " . $_POST["photoid"] . ", " . $_FILES["file"]["tmp_name"] . ")";
         
         mysql_query($sqlab);
         
		 $num = mysql_affected_rows();
		 if ($num>0) 
		 echo "<h3>Photo with Photoid = " . $_POST["photoid"] . " inserted in database!</h3>"; 
	     else
		 echo "<h3>error</h3>";
 
Du kannst keine Datei in einer Datenbank speichern, du kannst nur den Inhalt in solcher ablegen.

Soll heißen:
1. Datei binär öffnen ( $fd = fopen('file.bin', 'rb'); )
2. Alle Daten aus der Datei in einen Buffer lesen ( $buffer = fread( $fd, filesize('file.bin') );
3. Buffer mit mysql_query() in die DB speichern.

Grüße
 
Hallo Saftmeister,

erstmal vielen Dank für die schnelle Hilfe!
Habe den code jetzt nach deinen Tips umgestellt - bekomme aber immer eine Fehlermeldung (invalid argument).

Würde mich sehr freuen, wenn du nochmal rüberschauen könntest...


DANKE, slooodge


PHP:
$fd = fopen('" . $_FILES["pix"]["tmp_name"] . "', 'rb');
	$buffer = fread( $fd, filesize('"$_FILES["file"]["tmp_name"]"');
	
  		 $sqlab = "insert apartmentpix";
         $sqlab .= "(propid, photoid, pix) values (" . $_POST["propid"] . ", " . $_POST["photoid"] . ", "$buffer")";
 
PHP:
//bei fopen,filesize muss auch der Pfad mitangegeben werden wo das File temporär gespeichert wird.
$fd = fopen($_FILES["pix"]["tmp_name"], 'rb');
$buffer = fread( $fd, filesize($_FILES["file"]["tmp_name"]);
    
$sqlab = "INSERT INTO apartmentpix";
$sqlab .= "(propid, photoid, pix) values ('" . $_POST["propid"] . "', '" . $_POST["photoid"] . "', '".$buffer."')";
 
Hallo slooodge,

ich würde dir davon abraten die Bilder direkt in der Datenbank zu speichern.
Binäre Daten in der MySQL Datenbank machen die Abfragen verdammt langsam.
Ich würde dir empfehlen die hochgeladenen Bilder in ein lokales Verzeichnis zu kopieren und in der Datenbank nur einen String mit dem Pfad zu der Datei zu schreiben.

Schönen Gruß
DaFunk2k
 
Hallo SSurfer,

auch dir erstmal vielen DANK!

Leider läuft es noch nicht ganz... Ich bekomme zwar keine interne PHP-Fehlermeldung aber es wird auch nichts gespeichert. Meine "eigene" upload-Kontrolle schmeisst "Could Not be inserted" raus.

Hast Du eine Ahnung woran das liege könnte?

DANKE, Slooodge



PHP:
$fd = fopen($_FILES["pix"]["tmp_name"], 'rb');
		$buffer = fread( $fd, filesize($_FILES["pix"]["tmp_name"]));
    
		$sqlab = "INSERT INTO apartmentpix";
		$sqlab .= "(propid, photoid, pix) values ('" . $_POST["propid"] . "', '" . $_POST["photoid"] . "', '".$buffer."')";
		
         mysql_query($sqlab);
         
		 $num = mysql_affected_rows();
		 if ($num>0) 
		 echo "<h3>Photo with Photoid = " . $_POST["photoid"] . " inserted in database!</h3>"; 
	     else
		 echo "<h3>Photo with Photoid = " . $_POST["photoid"] . " could NOT be inserted in database!</h3>";
 
Hi,

auch ich stand vor dem gleichen Problem, was aber letzendlich keines war. Kleinigkeiten halt.

Dateien die Du mittels <form enctype="multipart/form-data"></form> hochlädst werden auf dem Server erstmal temporär mit einem Dir unbekannten Namen gespeichert. Diesen Namen kann man sich natürlich anzeigen lassen. Damit die Datei (egal ob Bild, Word, Excel,) nicht verloren geht, muss sie in einen Ordner verschoben werden.

So hab ich das gemacht:

PHP:
$filedata = $_FILES['upload'];
$file = $filedata['name'];
$path = "galerie/";
$tmpfile = $filedata['tmp_name'];
$pathANDname = $path.$file;
move_uploaded_file($tmpfile, $pathANDname);
$pic_add = "INSERT INTO pictures (uploaded_file) VALUES '$pathANDname')";
mysql_query($pic_add);

Nun ist die hochgeladene Datei in einem Ordner "galerie" gespeichert, und in Deiner Table namens "pictures" gibt es einen Eintrag mit dem Verweis auf die Datei.

Gruß
Loveboat
 
Habe den mysql_error eingebaut und bekommen dann folgende Meldung:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷' at line 1
 
Dann haste vermutlich ein Quote innerhalb des Binärcodes. Vorher mit mysql_real_escape_string() Quotes escapen, dann sollte das gehn.
 
Zurück