web-dev-qa-db-fra.com

Analyse de données de formulaire en plusieurs parties

J'essaie de mettre en place un formulaire HTML POST-ed qui a deux champs - un téléchargement de fichier et un champ de texte. Étant donné que le formulaire a un type multipart/form-data pour le téléchargement de fichier, je ne peux pas accéder au champ de texte via la variable PHP $ _POST. Alors, comment puis-je obtenir le texte champ sous la forme avec PHP?

Comme demandé, voici un code, essentiellement tiré directement d'Andrew:

<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>";
?>

C'est tout le fichier de test. Si je supprime le enctype, je peux obtenir les données POST-ed, mais pas le fichier bien sûr. Avec le enctype comme multipart/form-data, je peux obtenir le fichier, mais rien des données POST-ed.

Voici la sortie avec le enctype:

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

Sans pour autant:

testing

NULL

Même entrée exacte les deux fois.

22
DashRantic

Les téléchargements de fichiers passent par $_FILES . Tout le reste passe par $_POST (en supposant bien sûr que votre formulaire HTML ait son attribut method défini sur "post").

26
Sampson

Vérifiez votre limite de publication. Je devenais fou en essayant de comprendre ce qui causait ça. Une vérification rapide du journal des erreurs Apache a montré que la longueur du contenu de la publication dépassait la limite. Après avoir augmenté la limite, les données de publication sont disponibles.

9
shane

$_POST devrait très bien fonctionner pour le champ de texte. Vous devrez utiliser $_FILES pour le fichier réel. Étant donné le code HTML suivant:

<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>

Vous pouvez accéder aux champs de la manière suivante:

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

Il n'y a rien de mal avec votre code; pourrait être un problème avec la configuration du serveur.

<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); ?> 

Script: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
Source: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

1
Shanshui

J'ai eu le même problème que celui montré au début. Essayez-le en chargeant une taille de fichier inférieure à 1 Mo. Si vous avez pu télécharger le fichier, votre problème est que les valeurs upload_max_filesize et post_max_size augmentent ces valeurs et réessayez. C'était la solution à mon problème.

1
Carlos Vázquez

[2010-02-13 10:57 UTC] sudeshkmr à yahoo dot com

J'ai fait face au même problème et rien n'a fonctionné. J'ai testé sur Apache 2.2, PHP 5.3 sur Windows Vista. J'ai également testé sur Ubuntu (Karmic) avec Apache 2.2 et PHP 5.3. J'ai également testé avec nGinX 0.8 et PHP 5.3.

Ensuite, j'ai trouvé une solution de contournement. Le paramètre action = "" ne doit pas être la page de script elle-même sur laquelle vous avez un formulaire de téléchargement de fichier. Par exemple, vous avez une page index.php avec le formulaire de téléchargement.

L'action = "upload.php" <-------- Cette page doit être différente de la page du formulaire de téléchargement de fichier, et elle fonctionne sur toutes les configurations de PHP!

Ne pas utiliser pour le paramètre d'action.

0
Greg Willson