Formulaire en php : tableau non créé

Fermé
Iserb - 28 févr. 2010 à 14:49
 Iserb - 28 févr. 2010 à 18:05
Bonjour,

je bloque sur un problème. J'ai un formulaire, je cherche à traiter les données qui en proviennent. Comme ce formulaire doit être facilement et rapidement adaptable en cas de besoin, le mieux est de créer des fonctions qui seront réutilisables.

Une de ces fonction est chargée de vérifier si des checkbox ont été cochées. Elle doit tout stocker dans un tableau. Si une checkbox est cochée, la variable correspondante prend la valeur définie dans le formulaire, sinon elle prend la valeur vide (""). La valeur vide doit servir plus tard à effectuer d'autres tests.

Mon problème est le suivant : à la fin de l'exécution de ma fonction, le tableau n'est pas créé.

Mon code HTML :

<p>

Vous souhaitez :

<input type="checkbox" name="objetForm[1]" value="demandeInfosForm" id="demandeInfosForm" />
<label for="demandeInfosForm">demander des informations</label>

<input type="checkbox" name="objetForm[2]" value="reservationForm" id="reservationForm" />
<label for="reservationForm">effectuer une r&eacute;servation</label>

</p>


Ma fonction php :

function recupererCheckboxRenseignee($nomTableau, $nombreDeChoix) 
{
  global $$nomTableau;  //définition en global du tableau
  $$nomTableau=array(); //qui contiendra les données

  for($i=1;$i<($nombreDeChoix+1);$i++)
  {
    $$nomTableau[$i]="";  //Création de tous les éléments du tableau, 
                                      //on leur attribue la valeur ""
  }

  for($i=1;$i<($nombreDeChoix+1);$i++)
  {
    if(isset($_POST[$nomTableau][$i]))  
                         //Pour chaque élément si une valeur a été entrée
                         //on l'assigne à l'élément correspondant du tableau
    {
      $$nomTableau[$i]=htmlspecialchars($_POST[$nomTableau][$i]);  
                         //Correction de la faille XSS si jamais
                         //quelqu'un s'amuse à faire des expériences avec le script
    }
  }
}

recupererCheckboxRenseignee('objetForm', 2);  //On lance la fonction


Donc là en principe je devrais avoir un tableau $objetForm à deux éléments, tel que :

$objetForm[1]="" ou $objetForm[1]="demandeInfosForm" 

et
$objetForm[2]="" ou $objetForm[2]="reservationForm"


Ce n'est pas le cas, print_r($objetForm) retourne seulement :

Array()

Si quelqu'un voit d'où ça vient... Merci beaucoup.
A voir également:

3 réponses

artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146
28 févr. 2010 à 16:00
la variable $_POST est :
pour ton premier tableau : $_POST["objetform[$i]"]
0
Bien vu, j'ai repositionné correctement les crochets, merci beaucoup :
$_POST[$nomTableau[$i]]

Le problème n'est pourtant pas résolu. print_r($objetForm) rend toujours
Array ( )

Tandis que print_r ($_POST[$nomTableau]) rend, si on a coché les deux cases,
Array ( [1] => demandeInfosForm [2] => reservationForm ) 


Or en principe d'après ce que j'ai codé on a à chaque fois
$$nomTableau[$i]=$_POST[$nomTableau[$i]]

C'est à dire
$objetForm[$i]=$_POST[$nomTableau[$i]]
0
artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146
28 févr. 2010 à 17:38
essaie de mettre des guillemets à l'interrieur de $_POST
de plus objetform n'est pas un tableau.

pour que ça soit plus clair, tu as appelé tes cases "objetform[1]" et "objetform[2]"
pour accéder à leur valeur ($_POST), il faut donc que tu aies la syntaxe entière, donc 'objetform['.$i.']'
donc, pour être clair, mets :
$_POST[$nomTableau.'['.$i.']']
et là ça devrait aller.
0
Justement si, objetform est un tableau, les infos venant des checkbox sont considérées comme des tableaux par php. En faisant print_r() pour afficher le résultat de la méthode post tu en as immédiatement la preuve, ça s'affiche comme un tableau.

Mais le problème n'est en fait pas situé au niveau des guillemets pour le $_POST[], j'ai fait tout une série de test avec des echo et le plus parlant est celui-ci :

echo "\$".$nomTableau."[".$i."]"."=".$$nomTableau[$i];


pour la variable $nomTableau j'ai bien objetForm, encore heureux puisque c'est un paramètre de la fonction.
Pour la variable $$nomTableau[$i], si je coche les deux cases, j'ai

$$nomTableau[1]=demandeInfosForm
$$nomTableau[2]=reservationForm (testé en faisant echo)


Donc normalement j'ai bien un tableau. En tout cas, les valeurs $$nomTableau[1] et $$nomTableau[2] sont bien définies. Mais print_r() ne l'affiche pas. Ou est-ce que peut-être qu'on n'a pas la possibilité de travailler avec des variables de variables pour les tableaux?
0