cerhu > comp.lang.* > comp.lang.php

Lulu (13/02/2020, 01h08)
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.
Olivier Miakinen (13/02/2020, 01h22)
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,'<br />';
> }
> 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>.
Didier (13/02/2020, 10h24)
Le 13/02/2020 à 00:08, Lulu a écrit :
[..]
> 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.
Eric Demeester (13/02/2020, 10h26)
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 . '<br />';
}
?>

Seuls les éléments correspondant aux cases cochées seront affichés.

Pour plus de précisions (en anglais) :

[..]
Eric Demeester (13/02/2020, 10h40)
Eric Demeester (Thu, 13 Feb 2020 09:26:38 +0100 - fr.comp.lang.php) :

> Pour plus de précisions (en anglais) :
> [..]


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 (13/02/2020, 23h37)
Le 13-02-2020, Didier <nospam> a écrit :
> Le 13/02/2020 à 00:08, Lulu a écrit :
> 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.
Lulu (13/02/2020, 23h40)
Le 13-02-2020, Eric Demeester <neuneu> a écrit :
> Eric Demeester (Thu, 13 Feb 2020 09:26:38 +0100 - fr.comp.lang.php) :


>> Pour plus de précisions (en anglais) :
>> [..]

> 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 (13/02/2020, 23h41)
Le 12-02-2020, Olivier Miakinen <om+news> a écrit :
> Le 13/02/2020 00:08, Lulu a écrit :


> À 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.
Discussions similaires
? recuperer ds 1 tableau avec for..next checkbox indicées

Checkbox - tableau et disabled

Recuperer Checkbox

récupérer des valeurs checkbox


Fuseau horaire GMT +2. Il est actuellement 06h47. | Privacy Policy