Récupération de données

Eléphant du PHP | 259 Messages

06 mars 2007, 15:57

Bonjour,

En fait j'ai 3 tables : sondage (id sondage, titre...etc), question (id question, id sondage, titre..etc) et la tbale réponse (id rep, id question, id sondage, intitule (qui correspond a la réponse)).

Donc j'affiche un sondage, avec les question et réponses correspondantes :
Q1 :
rep1
rep2
rep3
Q2 :
rep 1
rep 2
..etc

Pour récupérer les données je n'ai pas de problème, mais à la fin du sondage une fois que j'ai répondu et que je clique sur le bouton valider, j'aimerais récupéré les réponses, seuleument le nom de mes champs (bouton radio, zone texte..) ont tous le même nom et parfois il peut y en avoir plusieurs !

je vous met un bout de mon code ou j'affiche les question et réponses :

<?
$sql = "SELECT * FROM question where id_sondage ='$id_sondage' ORDER BY position ASC";
$req = mysql_query($sql); 

$total = mysql_num_rows($req);

if ($total == 0)
	{
	echo'<u><p><h1>Il n\'y a aucune question</p></u></h1>';
	}

	else if ($total > 0)
		{
				
		while($valeur = mysql_fetch_array($req))
			{   
			$titre_question =  addslashes($valeur['titre_question']);
			$id_question = $valeur['id_question'];
			$methode = $valeur['methode'];

			echo'<h1>'.$titre_question.'</h1>';
												
					//Requête pour récupérer les données des réponses
					$requete2 = "SELECT * FROM reponse WHERE id_sondage = '$id_sondage' AND id_question = '$id_question'  ORDER BY position";	
					$resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2);
					$total = mysql_num_rows($resultat2);
					if ($total) 
						{
							while($val= mysql_fetch_array($resultat2)) 
							{
							$id_reponse = $val['id_reponse'];
							$intitule = $val['intitule'];
							?>
							<html>
							<body>
							<div align ="center">
							<form action="envoyer_questionnaire.php" method="post" name="questionnaire">		
							<TABLE border="0"> 
							
							<?			
							switch ($methode) 
								{
								case 'texte':
										echo'<input type="text" name="text" size="40"/>';
								echo'<p></p>';
								break;
								
								//textarea
								case 'textarea':
								echo'<TEXTAREA name="textarea" rows=4 cols=40></TEXTAREA>';
								echo'<p></p>';
								break;
									
								//Liste déroulante
								case 'deroulante':
								echo'<select name="liste">';
								$requete2 = "SELECT * FROM reponse WHERE id_sondage = '$id_sondage' AND id_question = '$id_question' ORDER BY position";	
								$resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2);
								$total = mysql_num_rows($resultat2);
								if ($total) 
								{
									while($val= mysql_fetch_array($resultat2)) 
										{
										$intitule = $val['intitule'];
										$id_reponse = $val['id_reponse'];
										$id_questions = $val['id_question'];

										// recupére l'id de la réponse mais affiche l'intitulé
										echo '<option value="'.$id_reponse.'">'.$intitule.'';	
										}
									}
								echo'</select>';
								break;
			
								//Bouton radio
								case 'radio':
								echo'<CENTER><TABLE BORDER="0" WIDTH=13% >
								<TR><TD align="left"><input type="radio" name="radio">'.$intitule.'</td></tr>    
								</TABLE></CENTER>';
	
								break;

								case 'checkbox':
								echo'<CENTER><TABLE BORDER="0" WIDTH=13% >
								<TR><TD WIDTH=8% align="left"><input type="checkbox" name="checkbox">'.$intitule.'</td></tr>    
								</TABLE></CENTER>';
								break;
								
								}//fin switch
							}//fin while			
						}
			}
		}//fin else if (dc pour afficher)
donc je ne sais pas trop comment faire.. j'espére que quelqu'un pourra m'aider!

Eléphant du PHP | 82 Messages

06 mars 2007, 16:08

Bonjour,

Tu ne pourra pas récupérer les infos si tu met toujours le même nom :D .

Il te faudra donc nommer tes éléments différement. Tu pourras utiliser les id de tes réponses / questions pour différencier tes champs.

Sachant que tu as le droit de faire

Code : Tout sélectionner

<input type="text" name="REPONSE[1]" value ="toto"> <input type="text" name="REPONSE[2]" value ="toto2"> <input type="text" name="REPONSE[3]" value ="toto3">
(où 1,2 et 3 sont les id de tes réponses)
Lorsque tu récupera les valeurs postés, elles seront dans un tableau !!!

Fais un
<?
print_r($_POST);
?>
Qui te permettra de visualiser l'ensemble des valeurs qui ont été postées.

Sinon plus simplement tu peux faire :

Code : Tout sélectionner

<input type="text" name="REPONSE1" value ="toto"> <input type="text" name="REPONSE2" value ="toto2"> <input type="text" name="REPONSE3" value ="toto3">
Ca te donnera une piste sur la marche à suivre pour récupérer toutes les valeurs de ton formulaire.

Bon courage :)

Eléphant du PHP | 259 Messages

06 mars 2007, 17:21

Merci pour ta réponse.

Donc pour mes champs, j'ai mis comme nom leur id :
<?
echo'<table border="0" width=30%><td align="left"><ul><input type="text" name="'.$id_reponse.'" size="45"/></td></ul></table>';
?>
J'ai fait pareil avec les autres champs (case a coher, bouton radio...ets)

Mais je n'arrive pas a récupérer les valeurs car leur nom c'est leur id, donc je ne peux les récupérer avec POST, car $_POST['id_reponse'] ne correspond a rien.

Par contre quand je fait ça (6 correspond a un id de réponse) il m'affiche :
id reponse choisi : on
(cela veut dire que j'ai cocher l'id 6)
<?		
if(isset($_POST['6']))      	$id_rep0=$_POST['6'];
				else      $id_rep3="";
				
				echo 'id reponse choisi : ';
				echo $id_rep3;
j'ai essayé de faire un petit truc mais mais ça ne marche pas trop. Je récupére l'id des questions et ensuites les id reponses des questions, donc ça me les affiche bien mais quand je veux afficher id_rep2 ça ne met rien :
<?
	$SQL = "SELECT * FROM question WHERE id_sondage = '$id_sondage' ORDER BY position";
	$resultat = mysql_query($SQL);
		
	while($val=mysql_fetch_array($resultat)) 
		{
		$titre_question = $val["titre_question"];
		$id_question = $val["id_question"];
		echo '<p></p>';
		echo $id_question;

			$SQL2 = "SELECT * FROM reponse WHERE id_question = '$id_question' ORDER BY position";
			$resultat2 = mysql_query($SQL2);
				
			while($val2=mysql_fetch_array($resultat2)) 
				{
				$id_rep = $val2["id_reponse"];
				echo 'id reponse: ';
				echo $id_rep;
				
								
				if(isset($_POST['id_rep']))      	$id_rep2=$_POST['id_rep'];
				else      $id_rep2="";
				
				echo 'id reponse choisi : ';
				echo $id_rep2;
				
				}
				
		}
<?


je ne sais pas trop si je suis sur la bonne voix...

je suis un peu perdu... je ne vois pas comment récupérer mes champs en mettant dans name leur id !

Eléphant du PHP | 259 Messages

06 mars 2007, 17:48

De plus, pour les boutons radio je ne peux pas mettre id_reponse pour leur nom, car on ne peut en cocher qu'un donc ils doivent avoir le même nom...

Je suis pommée.. :(

Eléphant du PHP | 82 Messages

06 mars 2007, 19:30

Re,
Donc pour mes champs, j'ai mis comme nom leur id :
Je ne le te conseille pas, met leur un nom avec des lettres afin de t'y retrouver.
Mais je n'arrive pas a récupérer les valeurs car leur nom c'est leur id, donc je ne peux les récupérer avec POST, car $_POST['id_reponse'] ne correspond a rien.
C'est normal que tu n'est plus 'id_reponse' puiqu'il n'est plus dans ton formulaire.


if(isset($_POST['id_rep'])) $id_rep2=$_POST['id_rep'];
else $id_rep2="";
Attention, à mon avis $_POST['id_rep'] n'existe pas... vérifie la structure du post en ajoutant au début de tout ton code :

Code : Tout sélectionner

print_r($_POST);
Tu devrais voir en affichant la source, tout ce qui est récupéré de ton formulaire. Regarde bien quels sont les valeurs qui sont définies et leur logique. Ca t'aidera beacoup.


De plus, pour les boutons radio je ne peux pas mettre id_reponse pour leur nom, car on ne peut en cocher qu'un donc ils doivent avoir le même nom...
Ce n'est pas forcément vrai :) Tu peux faire :

Code : Tout sélectionner

<input type='radio' name='question_num_2' value='1'> 1 <input type='radio' name='question_num_2' value='2'> 2 <input type='radio' name='question_num_2' value='3'> 3 <input type='radio' name='question_num_2' value='4'> 4
Et tu recuperas qu'elle a été la valeur de ton radio 'question_num_2'


Je suis pommée..
Meuh non :D

Du courage tu y est presque !!!!

Eléphant du PHP | 259 Messages

07 mars 2007, 10:01

Salut !

En fait, je ne pense pas que je peux faire ça :

Code : Tout sélectionner

<input type='radio' name='question_num_2' value='1'> 1 <input type='radio' name='question_num_2' value='2'> 2 <input type='radio' name='question_num_2' value='3'> 3 <input type='radio' name='question_num_2' value='4'> 4
Car je ne dois rien mettre en "dur". J'ai une boucle qui affiche les réponses, et si j'ai plusieurs questions où il y a comme réponse des bouton radio, ça fait que mes boutons radio auront le même nom pour des question différentes...donc ça ne va pas !

Peut être que je devrais modifier mon switch.. je ne sais pas trop !

Mais pour leur nom, en effet je ne vais pas mettre leur id, il faut que je trouve autre chose ,je ne peux rien mettre en dur, toutes les données sont par rapport à la base !

J'espére que j'y verrais plus clair aujourd'hui... :?

PS : je te met le lien d'un autre post : http://www.phpfrance.com/forums/viewtop ... highlight=
peut-être que c'est mieux expliqué..

Invité
Invité n'ayant pas de compte PHPfrance

07 mars 2007, 11:12

Salut,

Il n'est pas question de mettre des choses en "dur". (perso je suis totalement contre hihi)

Je me suis permis de modifier ton code, ça donnerais :

Code : Tout sélectionner

<? $sql = "SELECT * FROM question where id_sondage ='$id_sondage' ORDER BY position ASC"; $req = mysql_query($sql); $total = mysql_num_rows($req); if ($total == 0) { echo'<u><p><h1>Il n\'y a aucune question</p></u></h1>'; } else if ($total > 0) { while($valeur = mysql_fetch_array($req)) { $titre_question = addslashes($valeur['titre_question']); $id_question = $valeur['id_question']; $methode = $valeur['methode']; echo'<h1>'.$titre_question.'</h1>'; //Requête pour récupérer les données des réponses $requete2 = "SELECT * FROM reponse WHERE id_sondage = '$id_sondage' AND id_question = '$id_question' ORDER BY position"; $resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2); $total = mysql_num_rows($resultat2); if ($total) { while($val= mysql_fetch_array($resultat2)) { $id_reponse = $val['id_reponse']; $intitule = $val['intitule']; ?> <html> <body> <div align ="center"> <form action="envoyer_questionnaire.php" method="post" name="questionnaire"> <TABLE border="0"> <? switch ($methode) { case 'texte': echo'<input type="text" name="question['.$id_question.']" size="40"/>'; echo'<p></p>'; break; //textarea case 'textarea': echo'<TEXTAREA name="question['.$id_question.']" rows=4 cols=40></TEXTAREA>'; echo'<p></p>'; break; //Liste déroulante case 'deroulante': echo'<select name="liste">'; $requete2 = "SELECT * FROM reponse WHERE id_sondage = '$id_sondage' AND id_question = '$id_question' ORDER BY position"; $resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2); $total = mysql_num_rows($resultat2); if ($total) { while($val= mysql_fetch_array($resultat2)) { $intitule = $val['intitule']; $id_reponse = $val['id_reponse']; $id_questions = $val['id_question']; // recupére l'id de la réponse mais affiche l'intitulé echo '<option value="'.$id_reponse.'">'.$intitule.''; } } echo'</select>'; break; //Bouton radio case 'radio': echo'<CENTER><TABLE BORDER="0" WIDTH=13% > <TR><TD align="left"><input type="radio" name="question['.$id_question.']" value="'.$id_reponse.'">'.$intitule.'</td></tr> </TABLE></CENTER>'; break; case 'checkbox': echo'<CENTER><TABLE BORDER="0" WIDTH=13% > <TR><TD WIDTH=8% align="left"><input type="question['.$id_question.']['.$id_reponse.']" name="checkbox">'.$intitule.'</td></tr> </TABLE></CENTER>'; break; }//fin switch }//fin while } } }//fin else if (dc pour afficher) ?>
En théorie tu devrais pouvoir récupérer grâçe à ça toutes les informations qu'ont remplis tes utilisateurs

++

Eléphant du PHP | 82 Messages

07 mars 2007, 11:15

Euh c'est moi l'invité :)

juste à la fin je me suis trompé c'est pas le type mais le name qui a la valeur

Ce n'est pas :

Code : Tout sélectionner

type="question['.$id_question.']['.$id_reponse.']" name="checkbox">'.$intitule.'</td>
C'est :

Code : Tout sélectionner

name="question['.$id_question.']['.$id_reponse.']" type="checkbox">'.$intitule.'</td>

Eléphant du PHP | 259 Messages

07 mars 2007, 11:38

salut !

Merci pour les modifications, j'ai compris ce que tu as fait.. mais par contre, je ne vois pas comment récupérer les valeurs, je dois surement faire une boucle..

Eléphant du PHP | 82 Messages

07 mars 2007, 11:41

C'est exact !

Quand tu récupères les informations de ton formulaire ta variable $_POST sera un tableau multidimensionnel :)

Code : Tout sélectionner

<? ##affiche le contenu posté print_r($_POST); ?>
Tu verra que tes infos sont structurés tu n'a plus qu'à faire la bon traitement en fonction du type de champs de formulaires que tu recontres !

Courage !!

Eléphant du PHP | 259 Messages

07 mars 2007, 11:56

Au fait, pour le nom de ma liste, il faut que je change aussi :
<?
echo'<select name="question['.$id_question.']" >'; 
?>
pour le print_r ça marche trés bien, c'est super, ça m'affiche bien toutes les réponses. Ca fait un tableau pour les case a cocher. Mais je ne comprend pas trop la syntaxe, voici ce que ça me donne :

Code : Tout sélectionner

Array ( [question] => Array ( [2] => Array ( [6] => on [8] => on ) [4] => a [3] => 13 [87] => 216 [95] => b [96] => c ) [id_sondage] => 1 )
tout ce qui est entre [] c'est les id des questions.

Array ( [2] => Array ( [6] => on [8] => on ) correspond au case a cocher
2 c'est l'id de la question, 6 et 8 c'est les réponses que j'ai coché.

mais pourquoi il met : Array ( [question], en fait c'est le tableau comportant toutes les réponses!

Maintenant le problème c'est que je ne m'y connais pas du tout en tableau multidimensionnel :shock:

si tu as des bons tutoriaux sur les tableaux multidimensionnel, ça m'aiderais bien !

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

Eléphant du PHP | 82 Messages

07 mars 2007, 12:32

En cherchant sur ce forum j'ai trouvé ça :


Explication sur les tableaux multidimensionnels

Bon courage :)

Eléphant du PHP | 259 Messages

07 mars 2007, 12:34

ok merci je vais regarder.

Par contre mon tableau s'appel comment ?

Eléphant du PHP | 82 Messages

07 mars 2007, 12:36

Le nom du tableau ?

Si c'est celui qui te donne les infos de ton foormulaires quand tu postes c'est $_POST, mais il fonctionne de la meme facon que tous les tableaux.

Sinon j'ai pas compris la question :roll:

Eléphant du PHP | 259 Messages

07 mars 2007, 12:44

ok merci.

J'ai lu le post que tu m'as montré, je n'ai pas tout bien compri...

Ca a l'air compliqué tout ça... c'est pas gagné.. je pense que je vais bien galérer pour récupérer mes données.. :?

De plus aprés je dois les enregistrer dans une table ..