recuperer le tableau d'un formulaire checkbox

Le
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 />";

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.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #26538087
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.
--
Olivier Miakinen
Didier
Le #26538097
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 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.
Eric Demeester
Le #26538096
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.

Ça doit fonctionner si les variables sont envoyées en POST, et en
donnant un id identique à toutes les cases à cocher.
Le formulaire :
<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
Eric Demeester
Le #26538099
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.
Lulu
Le #26538158
Le 13-02-2020, 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 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.
Lulu
Le #26538157
Le 13-02-2020, 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.

0K.
Merci à toi pour les précisions.
Lulu
Le #26538156
Le 12-02-2020, Olivier Miakinen
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.

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.
Publicité
Poster une réponse
Anonyme