2010-10-30 7 views
0

Quel serait le meilleur moyen d'intercepter plusieurs champs via PHP? À l'heure actuelle, j'ai un fichier login.php qui est assez simple:PHP Formulaire traitant plusieurs champs

<form method="POST" action="auth.php"> 
    Code:<br /> 
    <input type="text" name="code" /> 
<input type="submit" id="submit" value="Submit" /> 
<br /> 
    Pass:<br /> 
    <input type="text" name="pass" /> 
    <input type="submit" id="submit" value="Submit" /> 
    </form> 

Puis dans la auth.php je reçois la valeur via le POST:

 $value = $_POST['code']; 

Le problème c'est que je devrais une quantité assez de champs, et chaque champ aurait un bouton de soumission attribué. Ensuite, j'aurais besoin d'une condition if pour chaque nom de champ disponible, ce que je ne veux pas. Quelle serait la meilleure façon de gérer cela?

Merci

+0

Quel est le problème exactement? Comme bemace souligné, vous n'avez pas besoin de nombreux boutons de soumission, et vraiment, je ne peux pas obtenir quel est le problème ... –

Répondre

0

Il y a plusieurs façons de simplifier ce problème. est ici une approche:

$fields = array('field1','field2','field3','field4','field5'); // Add all your field names to an array 
$data = array(); 
foreach ($fields as $field) { 
    if (isset($_POST[$field])) { 
     $data[$field] = $_POST[$field]; 
     // If you wanted it assigned to a local variable instead, 
     // you could do it like this, although this pattern is 
     // generally frowned upon: 
     ${$field} = $_POST[$field]; 
    } 
} 

Le danger d'assigner comme une variable locale est qu'il peut remplacer une variable qui existe déjà. Il pourrait potentiellement écraser quelque chose de crucial pour le reste de l'application. Cependant, étant donné que les noms de champs sont explicitement définis dans le tableau, vous en gardez au moins le contrôle.

Vous ne voudriez certainement PAS parcourir le tableau $ _POST et assigner chaque clé de tableau à une variable locale - cela vous laisserait très ouvert pour les pirates.

1

Utilisez simplement un seul bouton de soumission. Il n'y a aucune raison d'en avoir plus d'un ici.

Si vous avez plusieurs domaines connexes, vous pouvez utiliser le nommage de tableau:

Primary email: <input type="text" name="email[]" > 
Additional email: <input type="text" name="email[]"> 

et l'accès de PHP en utilisant

$emails = $_REQUEST['email']; 

Cependant, vous ne devriez pas utiliser des tableaux comme celui-ci pour les paramètres sans rapport avec tout parce que vous êtes trop paresseux pour utiliser plusieurs noms de champs. Si vous le faites, vous écrivez juste un code terrible et impossible à maintenir.

+0

Cela ne règle pas vraiment mon problème. J'aurais toujours besoin d'un nom différent pour chaque domaine. Et puis une condition if différente pour chaque champ du fichier auth.php. – phpdude

+0

@phpdude - édité. Cependant, il se peut que vous ayez besoin de vous en emparer et d'utiliser plusieurs noms de champs. –

0

Vous avez un problème avec HTML. En HTML, vous n'avez pas besoin de plus d'un bouton de soumission.

Une soumission ne soumet pas de champ, mais un formulaire complet. Vous n'avez même pas besoin, car la plupart des utilisateurs-utilisateurs soumettra un formulaire si vous appuyez sur Entrée sur un champ de texte.

Quoi qu'il en soit, vos champs auront un attribut nom, unique dans la forme, et doit avoir un id attribut unique dans le document. Lorsqu'elles sont envoyées, toutes les données peuvent être accédées en PHP en tant que tableau. Le superglobal $ _POST dans votre cas, ou $ _GET si cette méthode a été utilisée pour l'envoyer. Là, vous faites votre magie.

Questions connexes