XAMPP lokal für php Bildupload konfigurieren

@Neurodeamon,

Ich glaube du hast meinen Tonfall (welchen es beim Schreiben ja nur indirekt gibt) ein wenig falsch verstanden :)

Mit "blödsinnig" meinte ich nicht die Antwort oder ähnliches, sondern meinen Gedankengang - was gleichzeitig eine Frage sein sollte:

Die Upload Pfade richtig setzen? Hm, das hört sich für mich so an, als würde er nur in einen Ordner laden können danach - ist ja blödsinnig

Der erste Satz enthält sogar ein "?" welches zeigen sollte, dass ich das nicht verstehe - Satz danach ist einfach nur mein Gedankengang und das "FALSE" Ende in meinem Kopf wodurch ich gerne noch mal eine genauere Erklärung hätte :)

Das mit dem "nicht genügend Informationen geben" und "Frage geklärt" war wahrscheinlich nicht auf mich bezogen - ich hatte extra einen Mod angeschrieben um den Thread wieder zu "entmarkieren". Und ich hatte echt versucht alle Informationen zu geben die ich so habe (Script gepostet etc.).

Und die PHP-Doku kann man sein Leben lang jeden Tag lesen - und wird trotzdem kein PHP können :)
 
@kipperlenny: Ich habe es auch nicht wirklich böse aufgefasst, sonst hätte ich nämlich gar nicht erst geantwortet :) Und ja, Du hast Recht, man kann bei geschriebenem halt nur einen bestimmten 'Tonfall' annehmen.

Meine letzten Angaben solltest Du ausprobieren und mir das Ergebnis nennen. Aus Erfahrung kann ich sagen das PHP meist sehr aussagekräftige Fehlermeldungen von sich gibt.
 
Na jetzt sagt ihr mit bestimmt gleich, dass mein gesamtes Script Schrott ist :)

Also, einmal auch ohne Hochladen (html form) zeigt er schon mal diese Fehler an:
Übrigens ist die erste Variable jetzt "$_FILE1" weil ich das mal ausprobiert habe...

Code:
Notice: Undefined variable: _FILE1 in C:\xampp\htdocs\david\Ainhalt.inc.php on line 65

Notice: Undefined variable: file2 in C:\xampp\htdocs\david\Ainhalt.inc.php on line 83

Notice: Undefined variable: file3 in C:\xampp\htdocs\david\Ainhalt.inc.php on line 101

Notice: Undefined variable: file4 in C:\xampp\htdocs\david\Ainhalt.inc.php on line 119

Notice: Undefined variable: file5 in C:\xampp\htdocs\david\Ainhalt.inc.php on line 137

Und nach dem Hochladen (welches ja nicht stattfindet) :

Code:
Array ( [file1] => Array ( [name] => RK_deutsch_ss2.JPG [type] => image/pjpeg [tmp_name] => C:\xampp\tmp\php26.tmp [error] => 0 [size] => 113992 ) [file2] => Array ( [name] => RK_deutsch_ss2.JPG [type] => image/pjpeg [tmp_name] => C:\xampp\tmp\php27.tmp [error] => 0 [size] => 113992 ) [file3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [file4] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [file5] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )

ps: ich habe jetzt nur 2 Datein versucht hochzuladen - möglich sind 5 - deswegen sind die Arrays 3-5 leer!
 
Okay, als erstes: Don't mess with the server variables. Die Variable $_FILES ist vorgegeben, am besten nennst Du keine eigenen Variablen so oder so ähnlich (und besonders nicht mit Unterstirch "_". Kein Wunder das es Fehlermeldungen hagelt! ;)

Und nach dem Hochladen (welches ja nicht stattfindet) :
Das ist nicht korrekt, an der Ausgabe des Arrays $_FILES kannst Du sehen, das der Server die Daten in einen Ordner für temporäre Dateien erhält (C:\xampp\tmp\), welches übrigens der in der Konfiguration vorgegebene Wert ist (den ich vorhin erwähnt habe, da landen alle Uploads). Also funktioniert der Upload, Du verarbeitest den Upload aber nicht richtig!

Jetzt mußt Du mit dem Befehl move_uploaded_file() die Datei aus dem temporären Verzeichnis an die gewünschte Position im Dateisystem verschieben.

Ein Beispiel:
PHP:
$uploaddir = 'uploads/';
foreach ($_FILES as $datei){
$uploadfile = $uploaddir . basename($datei['userfile']['name']);
move_uploaded_file($datei['userfile']['tmp_name'], $uploadfile);
}

So, es ist fast fünf Uhr morgens. Ich hoffe mal das ich mich nicht vertan habe :)
Alle hochgeladenen Dateien sollten von diesem Schnipsel in den Ordner 'uploads' kopiert werden mit dem Dateinamen den sie beim Hochladen hatten. Laut Deinem Beispiel:
Code:
uploads/RK_deutsch_ss2.JPG
Es ist natürlich nur eine Datei, da alle Dateien mit gleichem Namen die hochgeladen werden, bestehende Dateien überschreiben!

Zum Nachlesen Beispiel 38-2:
http://de2.php.net/manual/en/features.file-upload.php
Und der Befehl:
http://de2.php.net/move_uploaded_file

Nur nochmal dazu:
Und die PHP-Doku kann man sein Leben lang jeden Tag lesen - und wird trotzdem kein PHP können
Du mußt nicht jeden Tag in der Doku lesen. Aber wenn Du etwas erledigen willst, kannst Du sehr gut recherchieren, da die Doku sehr viele Beispiele enthält und Du nach und nach die Funktionsweise der Befehle lernst. Das ist nicht viel arbeit, schau Dir immer nur an was Du gebrauchen könntest, was für Dein anstehendes Problem hilfreich sein könnte und Du wirst Seite für Seite besser - nur Mut!
 
Zuletzt bearbeitet:
so....

das hier ist jetzt der Code:

PHP:
echo "<h2>Photos hochladen</h2>
<form action=\"./admin.php?action=bilder&aktion=".$check."&id=".$id."\" method=\"post\" enctype=\"multipart/form-data\">
Nur Gif und Jpg Dateien mit einer Größe von max. 2000kb:
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"submit\" value=\"Speichern\">
</p>
</form>";
 foreach ($_FILES["pictures"]["error"] as $key => $error) {
   if ($error == UPLOAD_ERR_OK) {
       $time=time();
       $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
       $name = $_FILES["pictures"]["name"][$key];
       move_uploaded_file($tmp_name, "./pics/$name");
       chmod ("./pics/".$name."", 0777);
	   $db->query("INSERT INTO bilder VALUES ('','$name','$time')");
	   echo $name." erfolgreich hochgeladen!<br />";
   }

und das hier die Meldung die er ausgibt beim hochladen im Netz (funktioniert alles super) :

Code:
Array ( [pictures] => Array ( [name] => Array ( [0] => image1.jpg [1] => image2.jpg [2] => image3.jpg [3] => [4] => ) [type] => Array ( [0] => image/pjpeg [1] => image/pjpeg [2] => image/pjpeg [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpTeuZIv [1] => /tmp/phpurCraZ [2] => /tmp/php9fvAUG [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 2592 [1] => 4240 [2] => 5101 [3] => 0 [4] => 0 ) ) )

und wenn ich auf die Page klicke bei xampp kommt diese Meldung (Hochladen klappt jetz aber super!) :

Code:
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\david\Ainhalt.inc.php on line 74
Array ( [pictures] => Array ( [error] => ) )

und nach dem Hochladen:

Code:
Array ( [pictures] => Array ( [name] => Array ( [0] => image4.jpg [1] => image3.jpg [2] => [3] => [4] => ) [type] => Array ( [0] => image/pjpeg [1] => image/pjpeg [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => C:\xampp\tmp\php36.tmp [1] => C:\xampp\tmp\php37.tmp [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 0 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 8284 [1] => 5101 [2] => 0 [3] => 0 [4] => 0 ) ) )
 
Ich nehme an das Du uploadscript und uploadformular im selben Dokument stehen hast. Beim normalen (vor dem Upload) sollte definitiv der Fehler kommen da foreach kein Array bekommt (da unser $_FILES erst nach dem Upload gefüllt wird).
Du solltest den Inhalt trennen. Entweder indem Du Formular und Script in unterschiedliche Dateien schreibst oder indem Du den Inhalt in der einen Datei trennst trennst.

Beispiel:
PHP:
<?php
$wassollichtun = $_GET['wastun'];
switch($wassollichtun){
case "post":
 // hier kommt das upload script rein
break;
default:
echo "<h2>Photos hochladen</h2>
<form action=\"./admin.php?action=bilder&wastun=post&aktion=".$check."&id=".$id."\" method=\"post\" enctype=\"multipart/form-data\">
Nur Gif und Jpg Dateien mit einer Größe von max. 2000kb:
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"file\" name=\"pictures[]\" size=\"50\"/><br />
<input type=\"submit\" value=\"Speichern\">
</p>
</form>";
}
?>

Das ist jetzt ein ganz grobes Beispiel. Das Formular ruft die PHP-Datei mit einem weiteren Befehl in der URL auf. Im Beispiel wastun=post. Sobald die Variable wassollichtun gleich "post" ist, wird der upload verwarbeitet. Wenn wastun gar nicht oder mit anderen Daten gefüttert wird, wird das Formular aufgerufen ohne die Upload-Prozedur durchzuarbeiten solange es keine Daten bekommt.

Ich hoffe ich schreibe nicht zu verworren. Bin ein bissl müde :)

Vermutlich ist auf dem Server die Fehlerausgabe etwas restriktiver eingestellt und der Server beschwert sich zumindest nicht sichtbar. Xampp ist allerdings eher als Entwicklungsumgebung gedacht, da ist es besser wenn es jeden Fehler sichtbar macht.
 
Zuletzt bearbeitet:
hm, danke dir für deine ausführliche Antwort - aber diesmal hätte auch ein "Du dummer Typ du, leg dich ins Bett, steh wieder auf und schau selber woran es liegt!" völlig ausgereicht.

Das hätte ich jetzt eigentlich schon selber wissen müssen - arbeite ja schon die ganze zeit mit "action" etc. im Link...

Gut gut, dann änder ich das noch und dann sollte alles fertig sein. Ich danke dir!
Am meißten nervt mich momentan nur, das mein Kumpel später anrufen wird: "Du hast ja schon wieder nichts an der Seite gemacht" Weil er ja von den 5 Stunden Arbeit heute Nacht nichts zu sehen bekommt...
 
Kipperlenny hat gesagt.:
und wenn ich auf die Page klicke bei xampp kommt diese Meldung.....
Nun, foreach() wird ja auch ausgeführt wenn das Formular nicht abgeschickt wurde.
Und wenn das Formular nicht abgeschickt wurde, dann ist halt auch das Array von $_FILES leer.
Wenn $_FILES nun aber leer ist, wie soll foreach() dann ein as $key draus machen?! ;)
Du solltest also zuerst prüfen ob das Formular abgeschickt wurde.
Dann solltest Du prüfen ob $_FILES leer ist..... und dann erst foreach() ausführen.

Ich stelle es mir ja eher so vor (müsstest Du aber noch anpassen):
PHP:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<?php
$upload_felder = "5";
 
for($i = 1; $i <= $upload_felder; $i++) {
    echo '  <input type="file" name="file['.$i.']" /><br />';
}
?>
    <input type="submit" name="upload" value="Hochladen" /><br />
</form>
 
<?php
if(isset($_POST['upload'])) {
    $i = 1;
    while($i <= count($_FILES['file'])) {
        if(!empty($_FILES['file']['name'][$i])) {
            if( ($_FILES['file']['type'][$i] == "image/pjpeg") OR ($_FILES['file']['type'][$i] == "image/jpeg") OR ($_FILES['file']['type'][$i] == "image/gif") ) {
                move_uploaded_file($_FILES['file']['tmp_name'][$i], "./pics/".$_FILES['file']['name'][$i]);
                chmod("./pics/".$_FILES['file']['name'][$i], 0644);
                echo $_FILES['file']['name'][$i].": erfolgreich hochgeladen!<br />";
            } else {
                echo $_FILES['file']['name'][$i].": bitte nur .jpg oder .gif datein hochladen!<br />";
            }
        }
    $i++;
    }
}
?>
 
Zurück