2009-05-12 7 views
8

J'ai configuré cette page de test sur mon serveur. S'il vous plaît dites-moi pourquoi le tableau $_POST ne contient rien même lorsque je soumets le formulaire. J'ai essayé ceci dans trois navigateurs différents et rien ne se produit. J'ai écrit du code PHP pendant des années et cela ne s'est jamais produit avant cela. Quel est le problème avec ce code?

Répondre

51

Vos éléments d'entrée n'ont pas d'attributs de nom. Devrait être:

<input type="text" id="login_email" name="login_email" /> 

Si un élément d'entrée ne possède pas d'attribut de nom, il n'est pas envoyé dans le cadre des données POST.

9

Eh bien, vous n'avez pas d'action pour l'étiquette de formulaire? Il devrait être le nom du script:

<form method="post" action="scriptname.php"> 

... et vous configurez pas non plus les noms pour chaque entrée de forme - le navigateur ne présente pas l'ID comme nom d'élément.

+0

En fait, je pense qu'il est valide de laisser le nom de l'action. Si vous le faites, le navigateur affiche/accède à la page en cours. –

+6

La plupart des navigateurs présentent ce comportement, mais selon les spécifications officielles, l'attribut action est obligatoire - http://www.w3.org/TR/html401/interact/forms.html. – BrynJ

+0

Merci pour la clarification. Je suis d'accord que c'est une mauvaise idée d'exprimer ce genre d'ambiguïté lorsque la spécification ne définit pas un comportement par défaut. –

2

Il n'y a pas d'attribut de nom pour les éléments d'entrée.

4
<form method="POST" action="<?php echo $PHP_SELF; ?> 

<p><label>Email: </label> 
<input type="text" name="login_email" /> 
</p> 

<p><label>Password: </label> 
<input type="password" name="login_password" /> 
</p> 

<p><label>Remember Me?: </label> 
<input type="checkbox" name="login_remember" /> 
</p> 

<p> 
<input type="submit" value="Login" /> 
</p> 

</form> 
+0

Cela fonctionnera ... vous avez oublié le nom et les parties d'action. – MichaelICE

0

Tous vos éléments d'entrée nécessitent un attribut de nom.

1

Je vous suggère d'écrire quelque chose comme les fonctions suivantes basées sur les helpers de Zend_View.

formText($name, $value = null, array $attribs = null) 
formPassword($name, $value = null, array $attribs = null) 
formLabel($id, $text, array $attribs = null) 
formHidden($name, $value = null, array $attribs = null) 
formSubmit($name = null, $text = null, array $attribs = null) 
formSelect($name, $selected, array $attribs = null, array $options = null) 
formCheckbox($name, $default, array $attribs = null, array $options = null) 

Ensuite, vous n'oublierez plus jamais quelque chose comme ça.

<form method="POST" action="<?php echo $PHP_SELF; ?> 

<p> 
<?php 
echo formLabel('login_email', 'Email'), ':', 
    formText('login_email'); 
?> 
</p> 

<p> 
<?php 
echo formLabel('login_password', 'Password'), ':', 
    formPassword('login_password'); 
?> 
</p> 

<p> 
<?php 
echo formCheckbox('login_remember'), ' ', 
    formLabel('login_remember', 'Remember me'); 
?> 
</p> 

<p> 
<?php 
echo formSubmit(null, 'Login'); 
?> 
</p> 
</form> 

Astuce:

  • Si id non défini attribs, id est le même que le nom, à l'exception des étiquettes où id est utilisé dans le for = attribut "id $" et formHidden ne devrait pas avoir un identifiant par défaut non plus. FormCheckCheck écrit un formHidden du même nom avant lui-même avec la valeur négative, de sorte que vous obtenez une valeur de retour si la case n'est pas cochée. Les options formCheckbox sont un tableau dont les valeurs sont cochées ou non cochées.
  • Utilisez un filtre avec FILTER_VALIDATE_BOOLEAN pour lire la valeur de retour d'une case à cocher pour vérifier si elle a été marquée ou non.
0

Vous avez oublié les attributs de nom pour que votre script fonctionne. Vous pouvez également inclure la balise "for" dans vos étiquettes pour correspondre aux attributs de noms de vos entrées. Ce n'est pas une exigence, mais peut aider à CSS formattage de votre formulaire:

<p> 
<label for="login_email">Email: </label> 
<input type="text" name="login_email" id="login_email" /> 
</p> 

tout Contribue match et garder votre code plus lisible et rationaliser si vous devez y revenir 6 mois plus tard. L'attribut d'action si vous n'allez remplir un j'inclure ce que votre action:

<form method="POST" action="<?php echo $PHP_SELF; ?> 

Cela fera en sorte que votre page est bonne dans la mesure où les exigences du formulaire ainsi que faire que votre script doit exécuter . On dirait une simple vue. J'espère que cela t'aides.

Questions connexes