4 votes

Gérer plusieurs entrées d'un formulaire en PHP

Je veux savoir comment gérer de multiples entrées d'un formulaire avec des attributs multiples. Ce code génère mes champs :

              Adulte Mineur ';
            }           }
            ?>

une fois soumis -- ou test5.php comme mentionné dans la partie "action",

foreach ($_POST as $key => $value) {
  print "{$key}: {$value}";
}

et la sortie est

0: adulte
1: adulte
2: adulte
3: adulte

Remarquez qu'il y a 0, 1, 2... puis adulte. Il ne mentionne même pas le nom de la personne de l'entrée textuelle. Je peux modifier le formulaire pour :

          Adulte Mineur ';
        }           }
        ?>

En utilisant le même test5.php, j'obtiens

nomutilisateur:
age: adulte

La valeur de l'âge n'est pas affichée et la boucle foreach dans test5.php se termine avant de parcourir complètement un post.

J'espère avoir bien expliqué. Je veux que ma sortie soit :

UnNom Adulte

UnAutreNom Mineur ....

6voto

Michael Berkowski Points 137903

Votre problème est que vous créez deux champs de formulaire avec name='$i', et le deuxième (le bouton radio) écrase le premier. Je vous suggère plutôt d'utiliser une chaîne contenant $i pour construire les attributs de nom :

for ($i = 0; $i <= $_SESSION["peoplecount"]; $i++) {
    echo ' Nom  Adulte Mineur ';
}

Maintenant, votre tableau $_POST ressemblera à ceci :

name-0: somme age-0: Adulte
nom-1: autre age-1: Mineur
...

Une façon encore meilleure de gérer cela est d'utiliser des tableaux comme attributs de nom de formulaire avec [] (Notez que j'ai utilisé des guillemets doubles ici pour éviter toute la concaténation et les guillemets compliqués.)

for ($i = 0; $i <= $_SESSION["peoplecount"]; $i++) {
   echo " Nom  Adulte Mineur ";
}

Dans ce cas, votre tableau $_POST ressemble à :

nom: Array(
 0: somme,
 1: autre
),
age: Array (
 0: adulte,
 1: mineur
)

Pour y accéder, vous pouvez utiliser une boucle foreach comme ceci :

foreach ($_POST['nom'] as $key=>$nom) {
  echo "Nom: $nom  Âge: {$_POST['age'][$key]}";
}

3voto

outis Points 39377

PHP a une capacité spéciale - si vous nommez les entrées en utilisant une syntaxe de tableau, PHP analysera l'entrée en tableaux.

Aussi :

  • ne pas utiliser de balises courtes,
  • ne pas utilisernon-sémantiquement; utilisez plutôt des paragraphes, des listes ou tout ce qui est le plus approprié sémantiquement,
  • donnez toujours des labels à vos entrées,
  • les IDs doivent être uniques

À titre d'exemple d'application des points ci-dessus :

      Nom

      Adulte

      Mineur

Remarquez que vous devez faire attention à utiliser des crochets de tableau vides avec certaines entrées - à savoir, les cases à cocher et les boutons radio - car les entrées non définies ne seront pas soumises, ce qui causera des indices du tableau pour un ensemble d'entrées à ne pas correspondre aux indices d'autres tableaux. Dans l'exemple ci-dessus, définir un bouton radio sélectionné par défaut signifie qu'un seul sera toujours présent. Vous pouvez définir explicitement les indices pour éviter cela :

      Nom

      Adulte

      Mineur

Cette même technique vous permet également de créer des tableaux de mots-clés multidimensionnels.

1voto

Marco Bax Points 221

Essayez ceci :

 Adulte Mineur ';
}           }
?>

Le résultat peut être :

array(13) {
  ["name_0"]=>
  string(5) "Marco"
  ["option_0"]=>
  array(1) {
    [0]=>
    string(5) "mineur"
  }
  ["name_1"]=>
  string(4) "SomeOtherGuy"
  ["option_1"]=>
  array(1) {
    [0]=>
    string(6) "adulte"
  }
  ["name_2"]=>
  string(0) ""
  ["name_3"]=>
  string(0) ""
  ["name_4"]=>
  string(0) ""
  ["name_5"]=>
  string(0) ""
  ["name_6"]=>
  string(0) ""
  ["name_7"]=>
  string(0) ""
  ["name_8"]=>
  string(0) ""
  ["name_9"]=>
  string(0) ""
  ["name_10"]=>
  string(0) ""
}

1voto

nine7ySix Points 486

Essayez de modifier le formulaire pour

            Adulte 
            Mineur
             ';
    }
}
?>

1voto

rap-2-h Points 510

Vous devriez utiliser un tableau :

 // [...]
 echo ' Nom';
 echo 'Adulte';
 echo 'Mineur ';
 // [...]

 for($i = 0, $count = $count($_POST['username']); $i < $count; $i++) {
      echo 'nom: ' . $_POST['username'][$i]. '';
      echo 'âge: ' . $_POST['age'][$i]. '';
 }

Donc $_POST['username'][0] et $_POST['age'][0] sont les valeurs du premier utilisateur, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X