Archiv verlassen und diese Seite im Standarddesign anzeigen : Bilderupload
Hallo Leute,
ich habe da ein Problem/Frage.
Ich habe in einer Form verschiedene Textfelder die in eine Datenbank eingetragen werden, darunter auch 2 felder um dateien (bilder) auswählen zu können.
Was wäre der beste weg die Dateien hochzuladen und wie das bild zum jeweiligen Datensatz zuzuordnen. Ich habe schon überlegt ob es sinn machen würde das Bild auch in die DB mit einzutragen, aber das ist ja eigentlich nicht so gut und brint ja auch ned mehr.
Kann mir jemand mit einem Script aushelfen oder einem verständlichen TUT das auch mal einer kappieren kann der noch ned so weit ist?
silvercross
24-01-2003, 09:55
Ja, das Bild Upload Problem haben viele, ich hoffe ich kann dir mit meinem Script helfen...
index.php
Das ist das Formular ... enctype ist sehr wichtig !
<form enctype=multipart/form-data action=senden.php method=post>
Hier ist Das Feld zum Image auswählen
<input type="file" name="picture">
senden.php
// Generiert Zufallsnamen für Bild
$zahl = md5 (uniqid (rand()));
$image_name =
$zahl[0] . $zahl[5] . $zahl[2] . $zahl[8] . $zahl[1] . $zahl[9] . $zahl[11] .$zahl[10].$zahl[13]. $zahl[7];
// Die Datei Endung Bestimmen
$pic_typ = $_FILES['picture']['type'];
if($pic_typ=="image/gif") {
$extension = "gif";
}
if ($pic_typ=="image/jpg") {
$extension = "jpg";
}
if ($pic_typ=="image/jpeg") {
$extension = "jpg";
}
if ($pic_typ=="image/pjpeg") {
$extension = "jpg";
}
if ($pic_typ=="image/png") {
$extension = "png";
}
if ($pic_typ=="image/bmp") {
$extension = "bmp";
}
// Destination
$destination = "upload/".$image_name.".".$extension;
// Du musst volle Rechte haben in dem Order upload .. ich habe hier auf 777 gesetzt
// Bild verschieben
move_uploaded_file ($_FILES['picture']['tmp_name'], "$destination");
// Vollständiger Bildname zum Speichern in MYSQL
$bild = $image_name.".".$extension;
// MySQL Query
mysql_query("insert into tabelle(bild) values('$bild')");
jetzt solltest du in der mysql drinnen stehen haben einen beliebigen image name mit der endung ... die datei findest du im upload verzeichnis
mfg
Michael
Ja ok das ist schon mal sehr hilfreich und auch einfach zu lesen :)
Ich werd das mal versuchen und melde mich dann mit Erfolg oder auch miserfolg zurück...
Vielen Dank
silvercross
24-01-2003, 10:45
ich hab mir auch viel mühe gegeben :)
hoffe ich konnte dir helfen
mfg
Michael
Also eingebaut und funkelt auch wunderbar :)
etz hab ich aber 3 kleine sachen, wenn ich nun kein bild dazu auswähle, dann bekomme ich ja 2 kleine fehlermeldungen:
Notice: Undefined variable: extension in /home/harley/hserver/harley/meister/senden.php on line 35
Notice: Undefined variable: extension in /home/harley/hserver/harley/meister/senden.php on line 43
dabei wird dann wieder eine zufallszahl in die db eingetragen, die natürlich dann nicht stimmen kann, daher vermute ich mal liegt das an der fehlenden endung. Am einfachsten wäre es ja dann wenn er einen eintrag machen würde mit einem standartpfad zu einem nopic.gif oder sowas oder nicht?
Wenn ich nun zwei files hochladen möchte in ein anderes datenfeld, dann muß ich doch nur die form anderst benennen und das db feld umbenennen oder irre ich da?
silvercross
24-01-2003, 12:18
Original geschrieben von ace23
Also eingebaut und funkelt auch wunderbar :)
etz hab ich aber 3 kleine sachen, wenn ich nun kein bild dazu auswähle, dann bekomme ich ja 2 kleine fehlermeldungen:
dabei wird dann wieder eine zufallszahl in die db eingetragen, die natürlich dann nicht stimmen kann, daher vermute ich mal liegt das an der fehlenden endung. Am einfachsten wäre es ja dann wenn er einen eintrag machen würde mit einem standartpfad zu einem nopic.gif oder sowas oder nicht?
Wenn ich nun zwei files hochladen möchte in ein anderes datenfeld, dann muß ich doch nur die form anderst benennen und das db feld umbenennen oder irre ich da?
Freut mich zu hören ..
Nunja, du kannst ja abfragen ob im picture feld was drinnen steht, dh. ob etwas hochgeladen wurde ..
IF (strlen(picture<"10")) {
fehler .......
}
else {
extension, db eintrag, move upload file usw..
}
Das ist keine gute Idee, du brauchst einfach einen zweiten <input type=file > bereich in deiner form
mfg
Michael
as ist keine gute Idee, du brauchst einfach einen zweiten <input type=file > bereich in deiner form
Wie meinst Du das nun?
Ist das auf das zweite Bild bezogen zum uploaden oder um dem zu sagen das kein bild gewählt wurde?
silvercross
24-01-2003, 12:49
es ist keine gute idee eine neue form zu erzeugen nur wegen einem 2. bildupload ..
vielmehr kannst du ein 2. input type=file in die bestehende form integrieren
mfg
Michael
mehlvogel
24-01-2003, 21:57
Die Variable "extension" muss vor den if Abfragen schon deklariert werden. Sonst wird sie am Ende des Blocks zerstört.
$extension = "";
// Oder irgendnen anderen Standardwert
if (...) $extension = "...";
/*
....
*/
hm also jetzt verstehe ich das ned so ganz.
mehlvogel
25-01-2003, 14:03
In dem Quelltext gibt es die Stelle wo der Variable $extension ein Wert (je nach Bildtyp zugeordnet wird). Da die Variable $extension aber nicht ausserhalb der if Abfrage existiert, wird eine erzeugt und beim Ende der Abfrage ( beim } ) wieder zerstört. Das hilft dagegen:
/* ... */
$pic_typ = $_FILES['picture']['type'];
$extension = "";
if($pic_typ=="image/gif") $extension = "gif";
if ($pic_typ=="image/jpg") $extension = "jpg";
if ($pic_typ=="image/jpeg") $extension = "jpg";
if ($pic_typ=="image/pjpeg") $extension = "jpg";
if ($pic_typ=="image/png") $extension = "png";
if ($pic_typ=="image/bmp") $extension = "bmp";
/* ... */
Hondapower
29-01-2003, 15:22
Besteht die Möglichkeit für User meiner Webseite nicht nur Bilder sondern auch Code hochzuladen?
Das wäre ja fatal, oder berücksichtigt das die Abfrage auf den Image Typ schon?
mehlvogel
29-01-2003, 15:32
ja besteht - die Datei hat den bloß keine Dateiendung
Hondapower
29-01-2003, 15:40
Mhmm... und wie kann ich das dann unterbinden, das dann irgendeiner seine PHP Scripte hochlädt und Unfug damit treibt?
Oder wird das ohne Dateiendung nicht funktionieren?
(Die Administration des Servers liegt nicht in meiner Hand...)
PHP Skripte werden nur als solche erkannt, wenn die Dateiendung in der httpd.conf registriert ist... ohne Endung sind es stinknormale, also ungefährliche, Textdateien.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.