Tester $_POST si le nom passé est un tableau
Posté : 23 févr. 2010, 16:03
Bonjour,
J'ai une classe qui me permet de créer/gérer des formulaires. Lorsque je crée un champ, je dois vérifier sa valeur : ou bien c'est une valeur par défaut (formulaire pas encore envoyé), ou bien elle est récupérée depuis $_POST (formulaire posté).
J'ai une syntaxe du genre $mon_form->input('champ_titre','Sans titre') pour me générer une balise <input name="champ_titre" value="Sans titre"/>. Si le formulaire a été posté, la valeur devient alors $_POST['champ_titre'].
Dans la méthode form->input, j'ai un test de ce genre :
Et là, je bloque : comment gérer le test si le nom a une syntaxe de tableau ? Pour mettre un champ dans une boucle (traitement de plusieurs éléments similaires) en lui passant un nom du genre 'champ_titre[0]' ?
J'obtiens alors bien un tableau $_POST de cette forme :
$_POST['champ_titre'][0]='titre du machin 1'
$_POST['champ_titre'][1]='titre du machin 2'
[...]
Or, ma méthode input va alors chercher à tester $_POST['champ_titre[0]'] au lieu de $_POST['champ_titre'][0] et ne marchera pas.
Comment me dépatouiller de ça, pour "transformer" ma chaîne de la forme 'champ_titre[0]' en tableau à clés multiples 'champ_titre', '0', etc. ?
Bien sûr, je cherche un moyen qui soit adapté à n'importe quel cas, sans supposer qu'il y aura au maximum une profondeur de tableau, par exemple ; c'est-à-dire qui marche si je passe 'champ_titre[0]' mais aussi si je passe 'champ_titre[0][nom][type_de_dromadaire]'.
J'ai une classe qui me permet de créer/gérer des formulaires. Lorsque je crée un champ, je dois vérifier sa valeur : ou bien c'est une valeur par défaut (formulaire pas encore envoyé), ou bien elle est récupérée depuis $_POST (formulaire posté).
J'ai une syntaxe du genre $mon_form->input('champ_titre','Sans titre') pour me générer une balise <input name="champ_titre" value="Sans titre"/>. Si le formulaire a été posté, la valeur devient alors $_POST['champ_titre'].
Dans la méthode form->input, j'ai un test de ce genre :
Code : Tout sélectionner
function input($name,$default_value){
if(isset($_POST[$name])) $value=$_POST[$name];
else $value=$default_value;
echo '<input name="'.$name.'" value="'.$value.'"/>'
}J'obtiens alors bien un tableau $_POST de cette forme :
$_POST['champ_titre'][0]='titre du machin 1'
$_POST['champ_titre'][1]='titre du machin 2'
[...]
Or, ma méthode input va alors chercher à tester $_POST['champ_titre[0]'] au lieu de $_POST['champ_titre'][0] et ne marchera pas.
Comment me dépatouiller de ça, pour "transformer" ma chaîne de la forme 'champ_titre[0]' en tableau à clés multiples 'champ_titre', '0', etc. ?
Bien sûr, je cherche un moyen qui soit adapté à n'importe quel cas, sans supposer qu'il y aura au maximum une profondeur de tableau, par exemple ; c'est-à-dire qui marche si je passe 'champ_titre[0]' mais aussi si je passe 'champ_titre[0][nom][type_de_dromadaire]'.