Bild in Datenbank speichern

willimc

Mitglied
Hallo,
zurzeit bastle ich mir gerade eine eigene Internetseite. Ich möchte gerne, dass man sich da auch anmelden kann wenn man möchte. Und wenn man angemeldet ist, sollte jeder Nutzer die Möglichkeit haben ein Bild von sich hochzuladen. Das Bild muss ja dann auch gespeichert werden in einer Datenbank. In der Datenbank habe ich dann das Bild als BLOB.

Ich habe mit google nun schon mal ein Script gefunden mit dem man angeblich Dateien hochladen kann. Bei mir funktioniert das allerdings noch nicht so richtig. Zurzeit versuche ich das noch alles offline zu machen mit dem XAMPP Control Panel.

In diesem Script ist noch nichts mit der Datenbank drin. Wie muss ich das nun umbauen, dass das Bild in meiner Datenbank abgelegt wird?


Das ist ein Ausschnitt aus meiner Datenbank:
PHP:
    	$server = 'localhost';
			$user = 'root';
			$passwort = '';
			$datenbank = 'portal';
        //Verbindung zum DB Server herstellen:
        $link = mysql_connect($server,$user,$passwort)
        	or die('Keine Verbindung möglich!');
        
        // Auswahl der Datenbank:
        mysql_select_db($datenbank)
        	or die('Auswahl der Datenbank fehlgeschlagen'.mysql_error());
					
        $result = mysql_query('CREATE TABLE IF NOT EXISTS user(
		Bild BLOB
         )Type=InnoDB;');


hier das Script das ich gefunden habe.
PHP:
<html> 
<head> 
<title>Upload</title> 
</head> 
<body><? 
echo $HTTP_POST_FILES['userfile']['tmp_name'];
if($action){ 
$path = "/"; // Url zum Speicher Ordner 
$filename = "/test/"; 
$deindomain = "http://127.0.0.1/XAMPP"; 
$time=time(); 
echo "hallo";
if ($HTTP_POST_FILES['userfile']['tmp_name']<> 'none') 
   {    
	 echo "test";
         $file = $HTTP_POST_FILES['userfile']['name']; 
         $temp = $HTTP_POST_FILES['userfile']['tmp_name']; 
         $path_parts = pathinfo($file); 
         $filename = "test_" . $time . "." . $path_parts["extension"]; 
           $dest = $path.$filename; 
    
         copy($temp, $dest); 
    
      echo "Die Datei ist auf dem Server! <br><br>"; 
      echo "Url der Datei: <a href=\"$deindomain$path$filename\" target=\"_blank\">".$deindomain.$path.$filename; 
     echo "</a>"; 
   } 
} else { ?> 

<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF ?>"> 
<input type="hidden" name="MAX_FILE_SIZE" value="400000"> 
<br> 
<strong>File Upload</strong> <br> 
<br> 
<input name="userfile" type="file" size=40> <!-- hier ist auch der Duchsuchen Button dabei (type file) -->
<br> 
<br> 
<input type="submit" name="action" value="Speichern"> 
</form><? } ?></body> 
</html>


für eure Atworten vielen Dank im Voraus
Gruß
Timo
 
Die DB-Connection hat im Fall des Bilderuploads keine Relevanz, so wie ich das sehe.

if($action){ <- if(isset($_POST['action/submit'])) {
 
Hi!

Man kann keine Bild in einer Datenbank speichern.

Höchstens den Pfad zu dem Bild und der Name des Bildes.
Das heißt du musst nur den Pfad in deine DB eintragen.

Denke, dass du das hinbekommst :)


Gruß
 
Man kann keine Bild in einer Datenbank speichern.
Höchstens den Pfad zu dem Bild und der Name des Bildes.
ähhh Unfug...

das geht nämlich so...
PHP:
<?php
// $img ist eine Bild-Resource
// eine Datenbankverbindung besteht
// eine Tabelle bilder existiert
// imagepng() steht für imagebeliebig()
ob_start();
ob_clean();
imagepng($img);
$sdata = ob_get_contents();
ob_end_clean();
mysql_query("insert into bilder (data) values (".base64_encode($sdata).");");
?>

Bei mir funktioniert das nahezu perfekt. So in etwa sieht mein DBSessionHandler aus. Ich frage mich allerdings, wieso die resultierende Pufferlänge ca. 25 mal länger (und das noch vor "base64_encode();") wird, wenn ich statt in eine Datei in eine Datenbank schreibe.

cu C. Monroe
 
Zurück