2009-07-02 5 views
17

Ich versuche, ein HTML-POST-ed-Formular zu erstellen, das zwei Felder hat - ein Datei-Upload und ein Textfeld. Da das Formular einen Typ multipart/form-data für den Datei-Upload hat, kann ich das Textfeld nicht über die normale PHP $ _POST-Variable erreichen. Wie komme ich also mit PHP in das Textfeld?PHP - Analyse von mehrteiligen Formulardaten

Wie pro angefordert, hier ist ein Code, im Grunde direkt von Andrew genommen:

<html> 
    <body> 
     <form action="test2.php" method="post" enctype="multipart/form-data"> 
      Name: <input type="text" name="imageName" /> 
      Image: <input type="file" name="image" /> 
      <input type="submit" value="submit" /> 
     </form> 
    </body> 
</html> 

<?php 
    echo $_POST['imageName']; 
    echo "<pre>"; 
    echo var_dump($_FILES['image']); 
    echo "</pre>"; 
?> 

, dass die gesamte Testdatei ist. Wenn ich den enctype entferne, kann ich die POST-ed Daten bekommen, aber natürlich nicht die Datei. Mit dem Enctype als multipart/form-data kann ich die Datei holen, aber nichts aus den POST-ed Daten.

Hier ist der Ausgang mit dem enctype:

array(5) { 
    ["name"]=> 
    string(34) "testing.png" 
    ["type"]=> 
    string(0) "" 
    ["tmp_name"]=> 
    string(0) "" 
    ["error"]=> 
    int(1) 
    ["size"]=> 
    int(0) 
} 

Ohne:

testing 

NULL 

gleiche genaue Eingabe beide Male.

+1

Wie Jonathan und Andrew gesagt haben, sollte $ _POST funktionieren, vorausgesetzt, Sie haben Post benutzt, um Ihr Formular zu posten (und das ist eine gute Annahme, weil Sie Dateien posten müssen). Kannst du also etwas Code posten? Stellen Sie sicher, dass das name-Attribut im html-Textfeld festgelegt ist und dass Sie den text frield-Wert verwenden. – alanquillin

Antwort

22

Datei-Uploads kommen durch $_FILES. Alles andere kommt durch $_POST (vorausgesetzt natürlich Ihr HTML-Formular hatte sein method Attribut auf "post" gesetzt).

+0

Sie meinen, die Form * Methode * sei Post? – Pacerier

+0

@Pacerier Ups, danke für die Korrektur. – Sampson

+0

Sendet der Client jedes Teil einzeln? Wie kann ich einstellen, dass eine Datei und einige Daten gleichzeitig gesendet werden? – Richard

4

$_POST sollte gut für das Textfeld funktionieren. Sie müssen $_FILES für die tatsächliche Datei verwenden. In Anbetracht der folgenden HTML:

<html> 
    <body> 
    <form action="self.php" method="post" enctype="multipart/form-data"> 
     Name: <input type="text" name="imageName" /> 
     Image: <input type="file" name="image" /> 
     <input type="submit" value="Submit" /> 
    </form> 
    </body> 
</html> 

Sie können die Felder die folgende Art und Weise zuzugreifen:

<?php 
    echo $_POST['imageName']; 
    echo "<pre>"; 
    echo var_dump($_FILES['image']); 
    echo "</pre>"; 
?> 
+1

Funktioniert nicht. Nur um es zu versuchen, ich habe sogar kopiert/eingefügt, was Sie dort hingelegt (aber einen Absenden-Button hinzugefügt) und das versucht - definitiv nicht funktioniert. Wenn ich den enctype entferne, funktioniert es, aber ich bekomme die Datei natürlich nicht, und wenn ich es als multipart/form-data belasse, bekomme ich die Datei, aber ich * bekomme * die POST-ed-Daten nicht . – DashRantic

+0

sollte funktionieren. Dein Problem ist woanders. – Javier

+1

Welche Version von PHP verwenden Sie? Sind Konfigurationsänderungen und spezielle Erweiterungen aktiviert? –

1

Es ist nichts falsch mit Ihrem Code; könnte ein Problem mit der Serverkonfiguration sein.

<form action="" method="post" enctype="multipart/form-data"> 
Name: <input type="text" name="imageName"> 
Image: <input type="file" name="image"> 
<input type="submit" value="submit"> 
</form> 

<?php var_dump($_POST, $_FILES); ?> 

Drehbuch: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
Quelle: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

+0

Links unten ..... – Pacerier

+0

Versuchen Sie, den Code auf einem Testserver auszuführen. Die var_dump-Ausgabe würde zeigen, dass sowohl $ _POST als auch $ _FILES mit der Formulareingabe und Informationen zum Dateiupload gefüllt sind und sich nicht gegenseitig ausschließen. – Shanshui

0

[2010-02-13 10.57 UTC] sudeshkmr bei yahoo dot com

stand ich das gleiche Problem und nichts funktionierte. Ich habe auf Apache 2.2, PHP 5.3 auf Windows Vista getestet. Ich habe auch auf Ubuntu (Karmic) mit Apache 2.2 und PHP 5.3 getestet. Ich habe auch mit nGinX 0.8 und PHP 5.3 getestet.

Dann habe ich einen Workaround gefunden. Der Parameter action = "" sollte nicht die Skriptseite selbst sein, auf der Sie das Datei-Upload-Formular haben. Zum Beispiel haben Sie eine Seite index.php mit dem Upload-Formular.

Die action = „upload.php“ < -------- Diese Seite der Datei-Upload-Formular Seite anders zu sein hat als, und es funktioniert auf allen Konfigurationen von PHP!

Nicht für den Aktionsparameter verwenden.

8

Überprüfen Sie Ihr Postlimit. Ich wurde verrückt und versuchte herauszufinden, was das verursacht hat. Eine schnelle Überprüfung des Apache-Fehlerprotokolls zeigte, dass die Länge des Post-Contents das Limit überschritten hatte. Nach dem Erhöhen des Limits sind die Post-Daten verfügbar.

+1

Die meistbeantwortete Antwort löst das Problem, aber das kann Sie besonders beißen, wenn Sie große Dateien hochladen. Wenn ich mich nicht irre, ist die Länge die Summe aller Dateien (siehe http://stackoverflow.com/questions/10453735/trying-to-upload-video-file-in-php-but-its-tool-large). Wenn Sie sich damit abfinden, verhält sich das $ _FILES ['was auch immer'] wie eine ungültige Variable. –

1

ich hatte das gleiche Problem wie am Anfang gezeigt. Versuchen Sie es, indem Sie eine Dateigröße von weniger als 1 MB laden. Wenn Sie die Datei hochladen konnten, ist das Problem, dass die Werte upload_max_filesize und post_max_size diese Werte erhöhen, und versuchen Sie es erneut. Das war die Lösung für mein Problem.

+0

Wahrscheinlich ist dies die richtige Antwort. – MarkSkayff