2010-07-13 8 views
5

Je pense qu'il y a une erreur dans mon code ou que mon code PHP ou Apache n'est pas correctement configuré.Aucune donnée POST renvoyée lorsque le type d'entrée masqué est présent

Quand je soumets un formulaire avec un champ caché en elle, je ne reçois pas de données dans mon tableau $ _POST ...

Quand je commente le champ caché dans mon code, les données POST est retourné correctement ...

HTML FORMULAIRE

<form action='/utils/login.php ' method='POST'> 
<table> 
    <tr> 
     <td colspan='2'> 
      Login 
     </td> 
    </tr> 
    <tr> 
     <td> 
      Username 
     </td> 
     <td> 
      <input type='text' name='userid' value='' size='12' /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      Password 
     </td> 
     <td> 
      <input type='password' name='password' size='12' /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input type='hidden' name='formtype' value='login' /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input type='submit' value='Submit' /> 
     </td> 
    </tr> 
</table></form> 

Voici le code qui est en train de traiter en PHP ...

foreach ($_POST as $var => $value) { 
    echo "$var = $value<br>"; 
} 

J'utilise PHP 5 et Apache 2.2 sur mon serveur.

Des idées?

EDIT ...

Je l'ai réduit à cette ...

$command = $_POST['formtype']; 

Quand j'ai enlevé le signe @ de mon $ _POST, je reçois l'erreur suivante ...

Avis: Undefined variable: FormType dans C: \ webroot \ utils \ login.php sur la ligne 17

Si je commente sur cette ligne, les données POST est passé dans le programme sans problème.

+6

Avez-vous fermez votre ''

? Je ne vois pas l'étiquette de fermeture. – BoltClock

+2

Vous n'avez pas besoin d'une autre cellule pour la fonction cachée ... – thomasfedb

+0

Oui. Ma page contenait la balise de fermeture. J'avais oublié de le coller dans la publication SO. Ce n'est pas le problème avec le formulaire. –

Répondre

2

Je suggère de changer le code que vous utilisez pour afficher le contenu de $_POST à un seul appel:

print_r($_POST); 

Chaque fois que vous affichez le contenu d'un tableau, ce qui est mieux qu'une boucle w/echo, car il montrera chaque valeur à chaque niveau du tableau.

De même, comme mentionné dans un commentaire, assurez-vous de fermer le formulaire dans le code HTML.

+0

Merci. Je ne pense pas que ce soit la raison pour laquelle la page ne renvoie aucune donnée. N'oubliez pas que lorsque je commente entièrement l'élément , les données de retour POST sont renvoyées comme prévu. –

+0

Pourquoi cette réponse a-t-elle obtenu 3 votes ?! – mok

2

Vous n'avez jamais fermé votre balise <form>.

Et je vois maintenant que quelqu'un m'a battu d'un mile dans les commentaires. Pourtant, c'est la bonne réponse.

+0

Je peux voir que l'étiquette de formulaire a été fermée. Y a-t-il un problème? Je reçois le même problème alors lisez votre réponse. – Jnanaranjan

2

Avez-vous essayé de sortir l'entrée cachée de la table et de la placer juste après l'étiquette de formulaire d'ouverture?

Vous pouvez également utiliser:

var_dump($_POST); 

... pour afficher les variables de poste.

En outre, si des entrées sont créées dynamiquement ou pourraient être absents des variables POST ... vous pouvez utiliser:

variable = 'default'; 
if(isset($_Post['variable'])) $variable = $_POST['variable']; 

... à des variables définies de façon dynamique qui pourrait être là ou non.

+0

Mettre les entrées cachées directement après l'étiquette de formulaire a fixé un problème similaire que j'avais ... merci! –

0

S'il vous plaît essayer avec:

<form action="..." method="post" enctype="application/x-www-form-urlencoded"> 
1

J'ai changé ma forme pour travailler avec Brindille. Le formulaire modifié n'envoyait pas la valeur d'entrée cachée avec le message. Si quelqu'un a le même problème, je l'ai résolu en procédant comme suit.

La ligne originale était:

<input hidden name='foo[{{ loop.index }}][id]' value='{{id}}' /> 

Je l'ai vendue en faisant type = 'caché':

<input type='hidden' name='foo[{{ loop.index }}][id]' value='{{id}}' />