Récupération de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupération de données

par jobi1722 » 21 mars 2007, 13:31

Salut,

Il faut que tu test si ta variable $valeur est un tableau
foreach ($_POST as $sousTablo)  
{ 
    foreach ($sousTablo as $sousnum=>$valeur)  
   {
       if(is_array($valeur)){
          echo $sousnum.' a plusieurs valeurs : <br />';
          foreach($valeur as $ValueTableau){
               echo '--- SOUS TABLEAU --'.$ValueTableau.'<br />';
           }
       }
       else{
          echo ''.$sousnum.' : '.$valeur.'<br />'; 
       } 
   }  
}  
Essaye ça :roll:

par angebleu17 » 21 mars 2007, 11:54

J'arrive a afficher les données du tableau avec ce code :
<?
foreach ($_POST as $sousTablo) 
{ 
   foreach ($sousTablo as $sousnum=>$valeur) 
   { 
   echo ''.$sousnum.' : '.$valeur.'<br />'; 
   } 
} 
?>
par contre il me met cette erreur : Warning: Invalid argument supplied for foreach() in /var/www/..... on line 30

Ca m'affiche :

Code : Tout sélectionner

2 : Array 4 : t 3 : 10 87 : 215 95 : tt 96 : ttt id_sondage
c'est bon sauf qu'a la premiére ligne c'est un deuxième tableau, et je ne vois pas comment faire pour l'afficher !!

par jobi1722 » 07 mars 2007, 18:49

Pense à mettre résolu si ton problème est résolu :P

par angebleu17 » 07 mars 2007, 18:45

ok merci pour ta réponse.. je devrais m'en sortir avec tes indications !

merci pour ton aide ! :wink:
bye

par jobi1722 » 07 mars 2007, 18:42

C'est relativement compliqué de vérifier car en fonction du type de champs tu ne fera pas les même vérifications...

Si tu as dèjà quelquechose qui fait les bonnes vérifications inspire-t-en en faisant des boucles en javascript sur la liste des champs de chaque type...

Par exemple (il y a peut-être mieux)

Code : Tout sélectionner

##Dans ton switch php echo '<script language="javascript"> MonTabdeChampCheckbox[MonTabdeChampCheckbox.length] = 'id_du_champ'; </script>
Attention à bien déclarer tes variables en javascript :

En haut de ton script (hors de la boucle php)

Code : Tout sélectionner

<script language="javascript"> MonTabdeChampCheckbox = new Array(); </script>
Puis dans ta fonction de verification tu fais quelquechose comme

Code : Tout sélectionner

for(var i in MonTabdeChampCheckbox){ var MaChackbox = document.getElementById(MonTabdeChampCheckbox[i]); if(!MaCheckBox.checked){ alert ('Il faut sélectionner la checkbox'); } }
Maintenant à toi de faire évoluer le code pour qu'il n'y ait qu'un seul message et que ton script javascript vérifie qu'au moins une des cases est coché !!!!

Bon courage !!!!!

par angebleu17 » 07 mars 2007, 18:18

j'ai trouvé mon erreur.. j'ai déplacé ma requete d'insertion et ça marche !

J'ai une toute dernière question, je ne sais pas si tu pourras me répondre.

J'ai une fonction en javascript qui permet de vérifier si les zone de texte, bouton radio..etc sont rempli ou cocher avant de valider l'envoi du formulaire.

Mais, je ne sais pas trop comment faire car mes champs ont des noms différents (name="question['.$id_question.']['.$id_reponse.']").

En tout cas, merci beaucoup pour ton aide :wink:

par angebleu17 » 07 mars 2007, 17:08

oui j'ai bien compris, mais pour l'enregistrement des données, il n'enregistre qu'une réponse... par exemple si j'ai coché 6 et 8, il me l'affiche bien mais dans ma table il ne met que la 8.

Donc je ne sais pas comment faire pour enregistrer les 2 !
<? 
foreach ($_POST['question'] as $CleQuestion=>$Reponse)  
{  
   // on Vérifie que c'est bien un tableau avant de faire un foreach   
   if(is_array($Reponse)) 
   {  
      echo 'Question n°'.$CleQuestion.' - Plusieurs réponses : <br />';  
      foreach ($Reponse as $sousnum=>$valeur)  
      {  
         echo 'Réponse n° '.$sousnum.' : '.$valeur.'<br />';  
      } 
    $sql = "INSERT INTO vote(id_sondage, id_question, id_reponse, texte_libre)VALUES('$id_sondage','$CleQuestion','$sousnum','$valeur')"; 
    $req = mysql_query($sql);         
   } 
       else 
       {  
        echo 'Question n°'.$CleQuestion.' -> Réponse '.$Reponse.'<br />'; 
        $sql2 = "INSERT INTO vote(id_sondage, id_question, id_reponse)VALUES('$id_sondage','$CleQuestion','$Reponse')"; 
        $req2 = mysql_query($sql2);            
       }  
}  
?< 

par jobi1722 » 07 mars 2007, 16:50

La réponse de ta checkbox c'est ton numéro 6 et 8 !!!

par angebleu17 » 07 mars 2007, 16:32

ok mais comment faire pour qu'il enregistre toutes les réponses de la checkbox ?

par jobi1722 » 07 mars 2007, 16:28

il met la valeur de ta checkbox, si tu met l'id de ta réponse c'est normal qu'il affiche la meme chose.

Sinon dis-toi que les cases non cochés n'apparaissent pas dans ton $_POST, donc si elle existe c'est que la case a été cochée !!

par angebleu17 » 07 mars 2007, 16:25

si je met le value, il me met deux fois la meme chose :

Code : Tout sélectionner

Question n°2 - Plusieurs réponses : Réponse n° 6 : 6 Réponse n° 8 : 8
et il enregistre q'une réponse dans la table !

par jobi1722 » 07 mars 2007, 16:23

C'est surement que tes checkbox n'ont pas de value

par angebleu17 » 07 mars 2007, 16:10

ton code est plus simple que le mien..et ça donne le meme résultat.

si j'enléve "value="'.$id_reponse.'" pour mes case a cocher, il me met :

Code : Tout sélectionner

Question "2" - Plusieurs réponses Réponse n° 6 : on Réponse n° 8 : on
donc c'est bon.. mais il n'y a pas un moyen d'avoir juste le numéro de la réponse cocher et pas le "on", car aprés je vais mettre les réponses dans ma base, et il va enregistré le on. Par contre pour les zones de textes c'est bon car je pourrais enregistré id question, id rep et le texte !

j'ai rajouter mes requete dans le code :
<?
foreach ($_POST['question'] as $CleQuestion=>$Reponse) 
{ 
   // on Vérifie que c'est bien un tableau avant de faire un foreach  
   if(is_array($Reponse))
   { 
      echo 'Question n°'.$CleQuestion.' - Plusieurs réponses : <br />'; 
      foreach ($Reponse as $sousnum=>$valeur) 
      { 
         echo 'Réponse n° '.$sousnum.' : '.$valeur.'<br />'; 
      }
	$sql = "INSERT INTO vote(id_sondage, id_question, id_reponse, texte_libre)VALUES('$id_sondage','$CleQuestion','$sousnum','$valeur')";
	$req = mysql_query($sql);  	  
   }
	   else
	   { 
	    echo 'Question n°'.$CleQuestion.' -> Réponse '.$Reponse.'<br />';
		$sql2 = "INSERT INTO vote(id_sondage, id_question, id_reponse)VALUES('$id_sondage','$CleQuestion','$Reponse')";
		$req2 = mysql_query($sql2); 		  
	   } 
} 
?<
voici la structure de ma table :

Create table vote (id_vote int(5) not null auto_increment,
id_sondage int(5) references sondage (id_sondage),
id_question int(5) references question (id_question),
id_reponse int(5) references reponse (id_reponse),
id_client int (5) not null,
texte_libre varchar (260),
primary key (id_vote, id_reponse, id_sondage, id_question));

Id client pr le moment, je m'en occupe pas. Donc en fait quand il y a plusieurs réponses j'affiche le texte dans texte_libre

Mais pour les cases a cochers qui correspond a la question 2, dans mon essai j'avais cocher 2 cases, et il en a enregistré qu'une dans ma table et il a enregistré "on" dans texte_libre !

comment faire pour q'il enregistre toutes les données et ne pas mettre de "on" ?!

par jobi1722 » 07 mars 2007, 16:05

oups t'a répondu plus vite que moi :op

Surement que la valeur de ta checkbox est l'id de la réponse...

par jobi1722 » 07 mars 2007, 16:00

Tente de faire ça plutôt:

Code : Tout sélectionner

foreach ($_POST['question'] as $CleQuestion=>$Reponse) {
Mon code du début devrait marcher