recuperer le tableau d'un formulaire checkbox

7 réponses
Avatar
Lulu
Bonjour,

J'ai un formulaire permettant de sélectionner différents éléments :

<ul>
<li><input type="checkbox" name="elements[]" value="H">Hydrogène</li>
<li><input type="checkbox" name="elements[]" value="He">Hélium</li>
<li><input type="checkbox" name="elements[]" value="Li">Lithium</li>
<li><input type="checkbox" name="elements[]" value="Na">Sodium</li>
<li><input type="checkbox" name="elements[]" value="Mg">Magnésium</li>
<li><input type="checkbox" name="elements[]" value="Ar">Argon</li>
<li><input type="checkbox" name="elements[]" value="Ca">Calcium</li>
<li><input type="checkbox" name="elements[]" value="Ti">Titane</li>
<li><input type="checkbox" name="elements[]" value="Mn">Manganèse</li>
<li><input type="checkbox" name="elements[]" value="Fe">Fer</li>
<li><input type="checkbox" name="elements[]" value="Hg">Hydrargyrum</li>
</ul>

Et j'imaginais naïvement récupérer chacun des éléments dans le tablau
elements[], or le code

$nb_elements = sizeof( $elements );
echo "nombre d'éléments choisis : ".$nb_elements."<br />\n";

m'affiche un "0" et

for ( $i = 0 ; $i < 11 ; $i++) {
echo $i." -->".$elements[$i]."///";
}

affiche chaque variable $elements[$i] comme vide...

Par contre, mais ça ne me plaît pas car je ne comprends pas comment ça
marche et je ne sais pas l'exploiter, le code

foreach( $_POST['elements'] as $val ) {
echo $val,'<br />';
}

m'affiche bien les values sélectionnées par l'utilisateur.

J'ai l'impression (fausse sans doute) que les tableaux sont inutilement
compliqués en PHP puisque je croyais que elements[] serait une simple
liste accessible, comme en Python, par un index variant de 0 à sizeof-1

Bref, j'ai besoin d'un peu d'aide.

Merci


PS : la difficulté vient peut-être du fait que le script qui traite le
formulaire n'est pas un autre script que celui qui l'affiche : tout se
passe dans un seul script dont je gère le rechargement à coup de test
sur isset.

7 réponses

Avatar
Olivier Miakinen
Bonjour,
Le 13/02/2020 00:08, Lulu a écrit :
[...] j'imaginais naïvement récupérer chacun des éléments dans le tablau
elements[]
[...]
Par contre, mais ça ne me plaît pas car je ne comprends pas comment ça
marche et je ne sais pas l'exploiter, le code
foreach( $_POST['elements'] as $val ) {
echo $val,'
';
}
m'affiche bien les values sélectionnées par l'utilisateur.

À ce que je crois, ça a été supprimé pour des raisons de sécurité en PHP 5.4.0.
<https://www.php.net/manual/fr/language.variables.external.php>.
--
Olivier Miakinen
Avatar
Didier
Le 13/02/2020 à 00:08, Lulu a écrit :
Bonjour,
J'ai un formulaire permettant de sélectionner différents éléments :
<ul>
<li><input type="checkbox" name="elements[]" value="H">Hydrogène</li>
<li><input type="checkbox" name="elements[]" value="He">Hélium</li>
<li><input type="checkbox" name="elements[]" value="Li">Lithium</li>
<li><input type="checkbox" name="elements[]" value="Na">Sodium</li>
<li><input type="checkbox" name="elements[]" value="Mg">Magnésium</li>
<li><input type="checkbox" name="elements[]" value="Ar">Argon</li>
<li><input type="checkbox" name="elements[]" value="Ca">Calcium</li>
<li><input type="checkbox" name="elements[]" value="Ti">Titane</li>
<li><input type="checkbox" name="elements[]" value="Mn">Manganèse</li>
<li><input type="checkbox" name="elements[]" value="Fe">Fer</li>
<li><input type="checkbox" name="elements[]" value="Hg">Hydrargyrum</li>
</ul>
Et j'imaginais naïvement récupérer chacun des éléments dans le tablau
elements[], or le code
$nb_elements = sizeof( $elements );
echo "nombre d'éléments choisis : ".$nb_elements."
n";
m'affiche un "0" et
for ( $i = 0 ; $i < 11 ; $i++) {
echo $i." -->".$elements[$i]."///";
}
affiche chaque variable $elements[$i] comme vide...
Par contre, mais ça ne me plaît pas car je ne comprends pas comment ça
marche et je ne sais pas l'exploiter, le code
foreach( $_POST['elements'] as $val ) {
echo $val,'
';
}
m'affiche bien les values sélectionnées par l'utilisateur.
J'ai l'impression (fausse sans doute) que les tableaux sont inutilement
compliqués en PHP puisque je croyais que elements[] serait une simple
liste accessible, comme en Python, par un index variant de 0 à sizeof-1
Bref, j'ai besoin d'un peu d'aide.
Merci
PS : la difficulté vient peut-être du fait que le script qui traite le
formulaire n'est pas un autre script que celui qui l'affiche : tout se
passe dans un seul script dont je gère le rechargement à coup de test
sur isset.

Je ne suis pas spécialiste, bien loin de ça, mais ton formulaire déclare
une méthode dans sa balise <form ...>; d'après la 2ème partie de ton
message, c'est la méthode POST.
C'est donc dans le tableau $_POST que tu récupères le résultat de ton
formulaire, ce qui explique le bon fonctionnement de la 2ème solution.
Dans la première solution, tu parcours un tableau $elements qui n'est
pas initialisé, ce n'est pas $_POST[elements].
Si tu parcours le tableau $_POST[elements][$i] avec la variable $i, ça
donne quoi ?
Didier.
Avatar
Eric Demeester
Bonjour,
Olivier Miakinen (Thu, 13 Feb 2020 00:22:44 +0100 - fr.comp.lang.php) :
À ce que je crois, ça a été supprimé pour des raisons de sécurité en PHP 5.4.0.
<https://www.php.net/manual/fr/language.variables.external.php>.

Ça doit fonctionner si les variables sont envoyées en POST, et en
donnant un id identique à toutes les cases à cocher.
Le formulaire :
<form action="monscript.php" method="POST">
<input type="checkbox" name="element[]" id="element" value="Hydro">
<input type="checkbox" name="element[]" id="element" value="Hélium">
<input type="checkbox" name="element[]" id="element" value="Lithium">
<input type="checkbox" name="element[]" id="element" value="Sodium">
...
<input type="submit" value="submit">
</form>
monscript.php :
<?php
$liste_elements = $_POST[element];
foreach ($liste_elements as $element)
{
echo 'Élément : ' . $element . '
';
}
?>
Seuls les éléments correspondant aux cases cochées seront affichés.
Pour plus de précisions (en anglais) :
https://stackoverflow.com/questions/18421988/getting-checkbox-values-on-submit
Avatar
Eric Demeester
Eric Demeester (Thu, 13 Feb 2020 09:26:38 +0100 - fr.comp.lang.php) :
Pour plus de précisions (en anglais) :
https://stackoverflow.com/questions/18421988/getting-checkbox-values-on-submit

J'avais oublié de préciser que l'exemple ci-dessus est basé sur une
transmission des champs par la méthode $_GET, mais il est valable
également en $_POST [*], qui est d'ailleurs la méthode conseillés pour
transmettre les champs d'un formulaire, puisque dans ce cas les
variables ne sont pas transmises en clair dans l'URL.
Avatar
Lulu
Le 13-02-2020, Didier a écrit :
Le 13/02/2020 à 00:08, Lulu a écrit :
Bonjour,
J'ai un formulaire permettant de sélectionner différents éléments :
<ul>
<li><input type="checkbox" name="elements[]" value="H">Hydrogène</li>
<li><input type="checkbox" name="elements[]" value="He">Hélium</li>
<li><input type="checkbox" name="elements[]" value="Li">Lithium</li>
<li><input type="checkbox" name="elements[]" value="Na">Sodium</li>
<li><input type="checkbox" name="elements[]" value="Mg">Magnésium</li>
<li><input type="checkbox" name="elements[]" value="Ar">Argon</li>
<li><input type="checkbox" name="elements[]" value="Ca">Calcium</li>
<li><input type="checkbox" name="elements[]" value="Ti">Titane</li>
<li><input type="checkbox" name="elements[]" value="Mn">Manganèse</li>
<li><input type="checkbox" name="elements[]" value="Fe">Fer</li>
<li><input type="checkbox" name="elements[]" value="Hg">Hydrargyrum</li>
</ul>
Et j'imaginais naïvement récupérer chacun des éléments dans le tablau
elements[], or le code
$nb_elements = sizeof( $elements );
echo "nombre d'éléments choisis : ".$nb_elements."
n";
m'affiche un "0" et
for ( $i = 0 ; $i < 11 ; $i++) {
echo $i." -->".$elements[$i]."///";
}
affiche chaque variable $elements[$i] comme vide...
Par contre, mais ça ne me plaît pas car je ne comprends pas comment ça
marche et je ne sais pas l'exploiter, le code
foreach( $_POST['elements'] as $val ) {
echo $val,'
';
}
m'affiche bien les values sélectionnées par l'utilisateur.
J'ai l'impression (fausse sans doute) que les tableaux sont inutilement
compliqués en PHP puisque je croyais que elements[] serait une simple
liste accessible, comme en Python, par un index variant de 0 à sizeof-1
Bref, j'ai besoin d'un peu d'aide.
Merci
PS : la difficulté vient peut-être du fait que le script qui traite le
formulaire n'est pas un autre script que celui qui l'affiche : tout se
passe dans un seul script dont je gère le rechargement à coup de test
sur isset.

Je ne suis pas spécialiste, bien loin de ça, mais ton formulaire déclare
une méthode dans sa balise <form ...>; d'après la 2ème partie de ton
message, c'est la méthode POST.
C'est donc dans le tableau $_POST que tu récupères le résultat de ton
formulaire, ce qui explique le bon fonctionnement de la 2ème solution.
Dans la première solution, tu parcours un tableau $elements qui n'est
pas initialisé, ce n'est pas $_POST[elements].
Si tu parcours le tableau $_POST[elements][$i] avec la variable $i, ça
donne quoi ?

Effectivement,
for ( $i = 0 ; $i < 11 ; $i++) {
echo $i." -->".$_POST[elements][$i]."///";
}
m'affiche bien les éléments du tableau.
Je m'en suis sorti en testant la valeur de $val dans ma boucle foreach(
$_POST['elements'] as $val )
Pas vraiment satisfaisant car ça marche pour une dizaine d'éléments dans
la liste, mais je garde ta méthode si jamais j'avais plusieurs centaines
d'éléments dans ma liste.
HS : dommage que free n'accepte pas l'exécution de code python, j'aurais
pu montrer ici le résultat de mon script PHP qui appelle un script
python.
Merci à tous.
Avatar
Lulu
Le 13-02-2020, Eric Demeester a écrit :
Eric Demeester (Thu, 13 Feb 2020 09:26:38 +0100 - fr.comp.lang.php) :
Pour plus de précisions (en anglais) :
https://stackoverflow.com/questions/18421988/getting-checkbox-values-on-submit

J'avais oublié de préciser que l'exemple ci-dessus est basé sur une
transmission des champs par la méthode $_GET, mais il est valable
également en $_POST [*], qui est d'ailleurs la méthode conseillés
pour transmettre les champs d'un formulaire, puisque dans ce cas les
variables ne sont pas transmises en clair dans l'URL.

0K.
Merci à toi pour les précisions.
Avatar
Lulu
Le 12-02-2020, Olivier Miakinen <om+ a écrit :
Le 13/02/2020 00:08, Lulu a écrit :
[...] j'imaginais naïvement récupérer chacun des éléments dans le tablau
elements[]
[...]
Par contre, mais ça ne me plaît pas car je ne comprends pas comment
ça marche et je ne sais pas l'exploiter, le code
foreach( $_POST['elements'] as $val ) {
echo $val,'
';
}
m'affiche bien les values sélectionnées par l'utilisateur.

À ce que je crois, ça a été supprimé pour des raisons de sécurité en
PHP 5.4.0.
<https://www.php.net/manual/fr/language.variables.external.php>.

Arf...
Alors comme ça on ne peut plus passer 12 ans sans pondre du PHP sans que
tout tombe à l'eau ;-)
Merci pour l'info.