TripleD Geschrieben 15. Juni 2005 Teilen Geschrieben 15. Juni 2005 Hallo zusammen, mein Problem ist nicht so einfach wie es im Titel steht. Ich erstelle insgesamt sieben gleiche Upload-Zeilen durch eine WHILE-Schleife. Mit diesen sieben Upload-Zeilen sollte es aber möglich sein, jedes einzeln hochzuladen. Hier mal ein Stück Code, wie das bei mir aussieht. <? echo '<form action="index.php?site=forms&func=art&grpid='.$grpid.'" method="post" enctype="multipart/form-data">'; ?> <tr> <? $i = 1; while($i <= 7) { ?> <td valign="top"> Artikel / <? echo $i; ?><br> <br> <center><input type="submit" name="update" value="Update"></center> </td> <td valign="top"> <? $art = mysql_query("SELECT * FROM ".$T_ART." WHERE artid = ".$i." AND grpid = ".$_GET['grpid']); $artdat = mysql_fetch_assoc($art); if($artdat == false) { /* Leeren Datensatz einfügen, falls nicht vorhanden */ mysql_query("INSERT INTO ".$T_ART." (artid, grpid, kurz, lang, bild) VALUES ('$i', '$_GET[grpid]', '', '', '')"); /* Artikelgruppe Kurzbeschreibung */ echo '<input type="text" name="akb" value="'.$artdat['kurz'].'" size="54"><br>'; /* Artikelgruppe Langebeschreibung */ echo '<textarea cols="40" rows="5" name="alb">'.$artdat['lang'].'</textarea><br>'; /* Auswahl neues Bild */ echo '<input type="file" name="bild" size="37"><br>'; /* Auswahl bestehendes Bild */ ?> <select name="bild_exist"> <option value="">Kein Bild</option><br> <? $dir = "./images/pics/"; $handle = opendir($dir); while($file = readdir ($handle)) { if($file != "." && $file != "..") { if(is_dir($dir.$file)) { echo '<option value="'.$file.'">'.$file.'</option>\n'; } else { echo '<option value="'.$file.'">'.$file.'</option>\n'; } } } closedir($handle); ?> </select><br> <font color="#FF0000"><b>Falls Bild nicht erscheint, bitte "F5" drücken!</b></font> </td> <td width="300" height="250"> <? /* Bild */ if($grpdat['bild'] == "") { echo 'Kein Bild vorhanden'; } else { echo '<img src="images/pics/'.$artdat['bild'].'" alt="Bild" >'; } ?> </td> <? } else { /* Artikelgruppe Kurzbeschreibung */ echo '<input type="text" name="akb" value="'.$artdat['kurz'].'" size="54"><br>'; /* Artikelgruppe Langebeschreibung */ echo '<textarea cols="40" rows="5" name="alb">'.$artdat['lang'].'</textarea><br>'; /* Auswahl neues Bild */ echo '<input type="file" name="bild'.$i.'" size="37"><br>'; /* Auswahl bestehendes Bild */ ?> <select name="bild_exist"> <option value="">Kein Bild</option><br> <? $dir = "./images/pics/"; $handle = opendir($dir); while($file = readdir ($handle)) { if($file != "." && $file != "..") { if(is_dir($dir.$file)) { echo '<option value="">Kein Bild</option>\n'; echo '<option value="'.$file.'">'.$file.'</option>\n'; } else { echo '<option value="'.$file.'">'.$file.'</option>\n'; } } } closedir($handle); ?> </select><br> <font color="#FF0000"><b>Falls Bild nicht erscheint, bitte "F5" drücken!</b></font> </td> <td width="300" height="250"> <? /* Bild */ if($artdat['bild'] == "") { echo 'Kein Bild vorhanden'; } else { echo '<img src="images/pics/'.$artdat['bild'].'" alt="Bild" >'; } } ?> </td> </tr> <? echo '<input type="hidden" name="ai" value="'.$i.'">'; $i++; echo "\n"; } ?> Hoffe es kann mir jemand helfen. Gruß TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 15. Juni 2005 Teilen Geschrieben 15. Juni 2005 Ähm. Und wie war jetzt die Frage? Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 16. Juni 2005 Autor Teilen Geschrieben 16. Juni 2005 Hi, also die Frage wäre, wie bekomm ich das hin, dass ich jedes dieser Upload-Felder einzeln benutzen kann, die ich ja in einer WHILE-Schleife erstellen lasse. Gruß TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 16. Juni 2005 Teilen Geschrieben 16. Juni 2005 1. Du gibst jedem input vom type file einen eindeutigen namen 2. Du durchläufst in deinem Script alle Elemente des Feldes $_FILES, denn da stehen alle Info sdrin, die man bruacht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 16. Juni 2005 Autor Teilen Geschrieben 16. Juni 2005 Hi Enrico, danke für deine Antwort. Wenn ich das richtig versteh, mach ich die Inputs folgendermaßen: zu 1. <input type="file" name=bild[$i]> $i ist in dem Fall die Variable der WHILE-Schleife. zu 2. $var = $_FILES["bild"]["name"]; TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 16. Juni 2005 Teilen Geschrieben 16. Juni 2005 Es reicht, wenn Du den INPUT-Feldern z.B. allen den gleichen Array-Namen gibst, Schlüssel sind nicht zwingend erforderlich...z.B.: <input type="file" name="bild[]"> Diese kannst Du dann über PHP aus dem Array $_FILE entnehmen. Du kannst Dir ja mal am Anfang vom verarbeitenden Script die Inhalte des Arrays anzeigen lassen, dann weisst Du, wie Du es verarbeiten musst...: echo "<pre>"; print_r($_FILE); echo "</pre>"; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Danke für deine Hilfe, aber irgendwie will das ganze nicht so richtig. Ich hab es jetzt zwar als Array, aber ich komm nicht drauf, wie ich das Array auslesen kann. Nochmal den Sachverhalt: -------------------------- 1.0 Formular mit sieben Eingabefeldern (mit WHILE-Schleife realisiert) 2.0 Formularblock: 2.1 <input type="file" name="bild[]"> 2.2 <select name="bild_exist[]"> 2.3 Ein Textfeld und ein Textarea 3.0 Übergabe an die ausführende Datei echo "- Bin drin in Artikel<br>"; echo "<pre>"; echo "Neues Bild<br>"; print_r($_FILES["bild"]["name"]); echo "</pre>"; foreach($bild_exist as $key => $bild_exist1) { echo $key." | ".$bild_exist1."<br>"; echo "------------------------<br>"; $bild = $bild_exist1; } if($bild != "") { echo "- Beginne Upload<br>"; $dateipfad="images/pics/"; $datei=$_FILES["bild"]; $dateiname=$_FILES["bild"]["name"]; $dateiuploadname=$_FILES["bild"]["tmp_name"]; move_uploaded_file($dateiuploadname,$dateipfad.$dateiname); $bild = $dateiname; echo "- Erfolgreich Upgeloaded<br>"; } else { echo "- Existierendes Bild verwendet<br>"; } //mysql_query("UPDATE ".$T_ART." SET kurz='$akb', lang='$alb', bild='$bild' WHERE grpid = ".$grpid); //header('Location: index.php?site=artikel&grpid='.$grpid); Hoffe es findet jemand eine Lösung. Ich bin am verzweifeln. TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Wofür ist das <select>-Eingabelelement? Wie sieht denn das Array aus? Poste mal die Ausgabe von print_r.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Hallo Monty, hier mal die Ausgabe: Vom Input Feld: Neues Bild Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => ) Vom SELECT-Feld Existierendes Bild Array ( [1] => pwd.png [2] => [3] => [4] => [5] => [6] => [7] => ) Ich hab ja in meinem ausführenden Script eine Abfrage drin, dass wenn das INPUT leer ist, der Eintrag aus dem SELECT genommen werden soll. TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Die obere Ausgabe ist sicher die des Arrays $_FILES?? (also print_r($_FILES)) Und mit den Werten aus dem <select>-Feld willst Du, dass die Bilder weiterverwendet werden, die schon auf dem Server liegen? Wie sieht btw der <form>-Tag aus? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Genau, die obere Ausgabe ist aus dem $_FILE - Array. Es soll eigentlich mit beiden weitergearbeitet werden. Je nachdem was ausgewählt wird. Die ausgewählte Datei aus dem SELECT wird in eine mySQL-DB eingetragen. Und die aus dem $_FILE - Array wird hochgeladen und dann in die DB eingetragen. Hier mal der FORM-Tag: <? echo '<form action="index.php?site=forms&func=art&grpid='.$grpid.'" method="post" enctype="multipart/form-data">'; ?> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Vielleicht hab ich mich unglücklich ausgedrückt Ich wollte die Ausgabe von print_r($_FILES); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Have a try... Parse-Error sind möglich $dstPath = "/tmp/"; if (is_Array($_FILES)) { foreach ($_FILES as $fkey=>$fval) { if (is_File($fval['tmp_name'])) { $dstFName = preg_replace("/[^\._A-Za-z0-9]/is","_",$fval['name']); $dstFPath = realpath($dstPath)."/".$dstFName; if (move_uploaded_file($fval['tmp_name'],$dstFPath)) { //Datei $fval['name'] wurde hochgeladen und unter $dstFName im Verzeichnis $dstPath gespeichert.... //Quasi kann hier jetzt Dein Eintrag in die DB erfolgen... } } } } if (is_Array($_POST['bild_exist'])) { foreach ($_POST['bild_exist'] as $fkey=>$fval) { if (!empty($fval)) { //Hier kannst Du jetzt das existierende Bild in die DB schreiben... ($fval) } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Hi Monty, erst mal einen ganz großen Dank an dich. Es funktioniert wunderbar, bis auf eine kleinigkeit. Das Bild aus dem $_FILE wird nicht hochgeladen und kann somit auch nicht in die Datenbank eingetragen werden. Der rest funktioniert aber ohne Probleme. Danke nochmals für deine Hilfe. Gruß TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Dann poste mal print_r($_FILES);, beim Versuch, Dateien hochzuladen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Ich hab da nochmal was ausprobiert, und zwar geht er nicht in folgende Schleife rein. if (is_File($fval['tmp_name'])) { $dstFName = preg_replace("/[^\._A-Za-z0-9]/is","_",$fval['name']); $dstFPath = realpath($dstPath)."/".$dstFName; if (move_uploaded_file($fval['tmp_name'],$dstFPath)) { //Datei $fval['name'] wurde hochgeladen und unter $dstFName im Verzeichnis $dstPath gespeichert.... //Quasi kann hier jetzt Dein Eintrag in die DB erfolgen... //mysql_query("UPDATE ".$T_ART." SET kurz='$akb', lang='$alb', bild='$dstFName' WHERE grpid = ".$grpid." AND artid=".$fkey); echo "Erfolgreich hochgeladen<br>"; } else { echo "Fehler beim Upload<br>"; } } Damit hat sich "print_r($_FILES);" wohl erledigt, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Nicht unbedingt... Vielleicht war ich einfach unfähig mich an die richtigen Array-Schlüssel und die richtige Array-Struktur zu erinnern Also bitte posten... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 OK, also hier mal die Ausgabe von $_FILES: Array ( [bild] => Array ( [name] => Array ( [0] => [1] => hide.gif [2] => [3] => [4] => [5] => [6] => ) [type] => Array ( [0] => [1] => image/gif [2] => [3] => [4] => [5] => [6] => ) [tmp_name] => Array ( [0] => [1] => C:\WINDOWS\TEMP\php4C7.tmp [2] => [3] => [4] => [5] => [6] => ) [error] => Array ( [0] => 4 [1] => 0 [2] => 4 [3] => 4 [4] => 4 [5] => 4 [6] => 4 ) [size] => Array ( [0] => 0 [1] => 379 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 ) ) ) 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Dann nimm das hier für den oberen Bereich... if (is_Array($_FILES['bild']['tmp_name'])) { foreach ($_FILES['bild']['tmp_name'] as $fkey=>$fval) { if (is_File($fval))) { $dstFName = preg_replace("/[^\._A-Za-z0-9]/is","_",$_FILES['bild']['name'][$fkey]); $dstFPath = realpath($dstPath)."/".$dstFName; if (move_uploaded_file($fval,$dstFPath)) { //Datei $_FILES['bild']['name'][$fkey] wurde hochgeladen und unter $dstFName im Verzeichnis $dstPath gespeichert.... //Quasi kann hier jetzt Dein Eintrag in die DB erfolgen... } } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Entweder bin ich zu blöd, das ganze bei mir einzubauen, oder es stimmt irgendwas an dem Script nicht. Fehler im Script: Es wird die Temp-Datei in die DB geschrieben. print_r($_FILE) von INPUT: Array ( [bild] => Array ( [name] => Array ( [0] => hide.gif [1] => [2] => [3] => [4] => [5] => [6] => ) [type] => Array ( [0] => image/gif [1] => [2] => [3] => [4] => [5] => [6] => ) [tmp_name] => Array ( [0] => C:\WINDOWS\TEMP\php583.tmp [1] => [2] => [3] => [4] => [5] => [6] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 [5] => 4 [6] => 4 ) [size] => Array ( [0] => 379 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 ) ) ) 1 print_r($_FILE) von SELECT: Array ( [bild] => Array ( [name] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => ) [type] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => ) [tmp_name] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => ) [error] => Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 4 [4] => 4 [5] => 4 [6] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 ) ) ) 11 Und hier noch der Coder der Ausführbaren Datei: echo print_r($_FILES); $dstPath = "/images/pics/"; if (is_array($_FILES['bild'])) { foreach ($_FILES['bild']['tmp_name'] as $fkey=>$fval) { if (is_file($fval)) { $dstFName = preg_replace("/[^\._A-Za-z0-9]/is","_",$_FILES['bild']['name'][$fkey]); $dstFPath = realpath($dstPath)."/".$dstFName; if (move_uploaded_file($fval,$dstFPath)) { //Datei $_FILES['bild']['name'][$fkey] wurde hochgeladen und unter $dstFName im Verzeichnis $dstPath gespeichert.... //Quasi kann hier jetzt Dein Eintrag in die DB erfolgen... mysql_query("UPDATE ".$T_ART." SET kurz='$akb', lang='$alb', bild='$dstFName' WHERE grpid = ".$grpid." AND artid=".$fkey); } } } } echo print_r($bild_exist); if (is_Array($_POST['bild_exist'])) { foreach ($_POST['bild_exist'] as $fkey=>$fval) { if (!empty($fval)) { //Hier kannst Du jetzt das existierende Bild in die DB schreiben... ($fval) mysql_query("UPDATE ".$T_ART." SET kurz='$akb', lang='$alb', bild='$fval' WHERE grpid = ".$grpid." AND artid=".$fkey); } } } header('Location: index.php?site=artikel&grpid='.$grpid); Danke für deine Hilfe TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 if (is_array($_FILES['bild'])) { Zunächst mal der Vollständigkeit halber: if (is_array($_FILES['bild']['tmp_name'])) { Ich sehe keinen Fehler in meinem Code, vielleicht sieht ihn jemand anderes. Du kannst Dir doch einfach mal die Variablen, die ich verwende ausgeben lassen... Vielleicht ist da ja irgendwo der Fehler ($destFName, $destFPath, $fval, ...) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 Das Problem mit dem Dateinamen in der Datenbank hab ich behoben, hab ne falsche Variable eingetragen. Nur das mit dem Datei-Upload will noch nicht. Ich hab mir jetzt mal den Inhalt der Variablen anzeigen lassen, das ist der Inhalt: - dstPath: /images/pics/ - dstFName: hide.gif - FILES['bild']['tmp_name']: Array - FILES['bild']['name']: Array - fkey: 1 - fval: C:\WINDOWS\TEMP\php72E.tmp Kann es sein das es Problem mit $FILES und fval gibt? Muss man da noch irgendetwas umschreiben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Ich vermute eher, das Problem liegt daran, dass $destPath absolute Linux-Pfade enthält... Aber da das Script anscheinend auf nem Windows-Server läuft, würde ich es mal mit $destPath = "C:\\verz\unterverz\\.." versuchen oder relative Pfade benutzen... Gegebenenfalls musst Du den ."/". in der Nähe von realpath() auch noch durch ein ."\\". ersetzen... Lass Dir deswegen auch mal die Ausgabe von realpath($destPath) anzeigen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TripleD Geschrieben 17. Juni 2005 Autor Teilen Geschrieben 17. Juni 2005 So, jetzt hab ich das Problem gelöst. War eigentlich ganz easy. Es lag an folgender Zeile: $dstFName = preg_replace("/[^\._A-Za-z0-9]/is","_",$_FILES['bild']['name'][$fkey]); Diese hab ich in folgende Zeile geändert: $dstFName = $_FILES['bild']['name'][$fkey]); Nochmal danke für deine Hilfe. Wünsch dir noch nen schönen Tag. Gruß TripleD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 17. Juni 2005 Teilen Geschrieben 17. Juni 2005 Versteh ich zwar nicht, da genau diese Zeile bei mir funktioniert, aber egal ... Jetzt kriegst Du nur ein Problem, wenn jemand mit Linux oder Mac eine Datei mit Nicht-Windows-Konformen Sonderzeichen hochlädt... Aber solange der Workaround läuft ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.