Bild Upload mit text

ayhank

Mitglied
Hi Leute, möchte es in meinem Kontaktformular möglich machen ein Bild hochzuladen, und das in der db zu speichern, ich kenn die risiken die nachtteile usw.

Habe auch eins gefunden, was einne upload ermöglicht,

PHP:
<?php
	// MySQL-Verbindung herstellen


	// MYSQL-Verbindung herstellen
	mysql_connect('localhost', 'root','') or die(mysql_error());
	mysql_select_db('imagedb') or die(mysql_error());

	// Formular abgeschickt
	if(isset($_FILES['image'])) {
          
            
		// Datei hochgeladen
		if(is_uploaded_file($_FILES['image']['tmp_name'])) {

			// Verweis auf Bild
			$image = $_FILES['image']['tmp_name'];

			// Vorbereiten für den Upload in DB
			$data = addslashes(file_get_contents($image));

			// Metadaten auslesen
			$meta = getimagesize($image);
			$mime = $meta['mime'];

			// Bild in DB speichern
			mysql_query("INSERT INTO images, VALUES('', '$data', '$mime')");
		}
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
		<title>MySQL-Bilder-Datenbank</title>
	</head>
	<body>
		<h1>Bild hochladen</h1>
		<form action="" method="post" enctype="multipart/form-data">
			<input name="image" type="file" />
			<input type="submit" value="hochladen" />
		</form>
		<h1>Bilderliste</h1>
		<?php
			$result = mysql_query("SELECT id FROM images");
			while($row = mysql_fetch_object($result)) {
				echo '<img alt="" src="image.php?id='.$row->id.'" /><br />';
			}
		?>
	</body>
</html>

Aber sobald ich das um das speichern eine text file ermöglich will, und in der db eine spalte mit email hinzufüge, ist ein upload nicht mehr möglich ! Hat jemand einen tipp wieso es nicht erweiterbar ist ?
 
Hi,

das Problem ist deine Datenbankabfrage zum Speichern des Eintrags:
PHP:
mysql_query("INSERT INTO images, VALUES('', '$data', '$mime')");

Als erstes fällt mir da gleich das "," nach dem Tabellenname ins Auge, das gehört da nicht hin. Zum einen überprüfst du hier nicht auf Fehler, zum anderen ist diese SQL-Syntax sehr fehleranfällig sobald neue Spalten hinzugefügt werden. Erweitere diese und füge deine Feldnamen hinzu, dann sollte der Upload wieder gehen.

Bei dem Script fällt mir ausserdem auf, dass es den Upload eher suboptimal löst. Das escaping der Daten via addslashes() solltest du eher über mysql_real_escape_string() machen, siehe hier den Auszug aus der Dokumentation zu addslashes():
It's highly recommended to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using doesn't have an escape function and the DBMS uses \ to escape special chars, you can use this function.

Je nach Größe des Bildes wird ausserdem die Query sehr lang, was bis zu einer bestimmten Größe gut geht. Von daher rate ich dir wirklich dazu, das Bild normal als Datei auf dem Server zu speichern und nicht in der Datenbank. Diese ist für sowas einfach nicht geeignet. Was bei dir lokal vielleicht einwandfrei funktioniert, kann auf dem Server je nach Betriebssystem und Konfiguration Probleme machen.

Grüße,
BK
 
Es passiert gar nichts, also der upload erfolgt nur so lange, bis ich nichts in der db hinzufüge, die db sieht so aus

CREATE DATABASE imagedb;
CREATE TABLE imagedb.images (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
image BLOB NOT NULL,
mimetype VARCHAR(32) NOT NULL
);
sobald ich email VARCHAR (124) hinzufüge, passiert einfach nichts mehr.

hab das alles von nem tutorial. http://www.patrick-gotthard.de/6487/bilder-in-mysql-datenbank-speichern

PHP:
mysql_query("INSERT INTO images  VALUES('$data', '$mime', '$email')");

habe es mal so gemacht, aber da tut sich trotzdem nichts.

was wäre den die alternative?, ich lade meine Seite bald auf nem webspace server hoch um sie 100% zu nutzen. wie könnte ich sonst bilder ablegen ?

Das theme mysql_real_escape_string darum kümmere ich mich, habe mich damit befasst gehabt, aber danke
 
Hi,

du hast immer noch keine Fehlerbehandlung und keine Spalten beim INSERT Befehl drin...
Dein SQL wird quasi jetzt zu:

SQL:
INSERT INTO images (`id`, `image`, `mimetype`) VALUES ('$data', '$mime', '$email')

Schau dir den nochmal genau an, dann siehst du den Fehler.

Grüße,
BK
 
So das bild wird abgelegt, vielen dank jungs ******

aber die darstellung haut nicht hin

PHP:
 <img src="<?php echo $row["image"];?> ">

den ausdruck mag er nicht, hat jemand nen tip bitte ?
 
Wie Diel schon sagt, da rein gehört ein Link und nicht die Bilddaten selbst.
Mach zb. sowas wie showimage.php?id=1234 als Link rein,
dazu eine showimage.php die dann wirklich die Daten erst aus der DB holt
und mit passenden header-Befehlen raussendet.

(header: zB. Mimetyp, dass es nicht HTML sondern ein Bild ist.
Damits beim Browser in jedem Fall krorekt angezeigt wird.)
 

Neue Beiträge

Zurück