Comment retourner une valeur dans un while ?

Résolu/Fermé
tgos93 Messages postés 83 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 9 juillet 2014 - 28 mars 2013 à 18:50
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 29 mars 2013 à 13:06
Bonjour,

Tout est dans le titre. En effet j'ai besoin de retourner un compteur dans un while pour avoir un id qui est différent pour chaque <input> (au nombre de 4) de mon while.

Je vous remercie !
Bonne soirée.


6 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mars 2013 à 22:34
pourquoi vouloir faire un return $cpt sur une boucle while (ce n'est pas une fonction) ?

lorsque tu fais une boucle, à chaque "tour" de la boucle la valeur du compteur "suit"

dans ton cas si tu as les 4 input
- au départ $cpt=0
- au premier passage de la boucle il est incrémenté de 4
- donc en fin de 1ière boucle il est à 4

- au début du deuxième passage de la boucle ce compteur est donc à 4 (la variable $cpt n'a aucune raison de revenir à 0 puisque $cpt=0 est en dehors de la boucle while)
- au 2 ième passage de la boucle il est incrémenté de 4
- donc en fin de 2 ière boucle il est à 8

etc...

les input ce n'est pas comme ça:
<input ......></input>
mais
<input ............ />
pas de balise fermante mais /> à la fin de l'ouvrante

<?php
mysql_connect($hote, $utilisateur, $mPasse);
mysql_select_db("qcm");
$reqsql="SELECT * FROM questionnaire";
$resbase=mysql_query($reqsql) or die ("Echec de $sqlquest");
//un id doit être unique donc le div id="content" doit être en dehors de ta boucle
echo '<div id="content">';

$cpt=0; //init du cpt

while ($quizz=mysql_fetch_assoc($resbase))
{
	$num=$quizz['numquest']; // numéro de question
	$question=$quizz['question']; // question
	$reponse1=$quizz['rep1'];
	$reponse2=$quizz['rep2'];
	$reponse3=$quizz['rep3'];
	$reponse4=$quizz['rep4'];
	$repexact=$quizz['rep']; // reponse exacte

	
	echo '<ul class="choices-border">';
	//Affichage à l'ecran du numero de la question + question
		echo $num.") ".$question."<br />";
		//Affichage du choix des réponses avec les bouton radio
		echo "<li>";
			//mettre des {} sur les if(...) et des values aux bts radio
			if($reponse1!=NULL){
				$cpt++;
				echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt.'" value="'.$reponse1.'" checked="checked" /><label for="radio-'.$cpt.'">'.$reponse1.'</label><br/>';
			}
			if($reponse2!=NULL){
				$cpt++;
				//d'où tu sort $cpt2 etc... ?
				echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt.'" value="'.$reponse2.'"  /><label for="radio-'.$cpt.'">'.$reponse2.'</label><br/>';
			}
			if($reponse3!=NULL){
				$cpt++;
				echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt.'" value="'.$reponse3.'"  /><label for="radio-'.$cpt.'">'.$reponse3.'</label><br/>';
			}
			if($reponse4!=NULL){
				$cpt++;
				echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt.'" value="'.$reponse4.'"  /><label for="radio-'.$cpt.'">'.$reponse4.'</label><br/>';
			}
		echo"</li>";
	echo "</ul>";
	
	

}
echo "</div>"; //en dehors de la boucle while
1
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
28 mars 2013 à 19:31
Salut,
C'est pas très compréhensible ton histoire.
Si c'est pour sortir de la fonction, tu peux utiliser return, même dans la boucle.
Si c'est pour sortir uniquement de la boucle c'est break qu'il faut utiliser, exemple:
val_retour=0;
while true{
  n++;
  if (n==5){
    val_retour=n;
    break;
  }
}




Bonne continuation.

0
tgos93 Messages postés 83 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 9 juillet 2014
28 mars 2013 à 19:51
Merci de ta réponse.

Si tu préfère je suis en train de réaliser un qcm que j'aimerai faire correspondre avec ma bdd, cependant dans mes input j'ai un id (et de ce fait un label) qui doit être différent a chaque fois. Je sais c'est peu commun de vouloir faire ceci mais c'est pour mon style css sur mes boutons radio.

j'avais pensé à ceci :


mysql_connect($hote, $utilisateur, $mPasse);
mysql_select_db("qcm");
$reqsql="SELECT * FROM questionnaire";
$resbase=mysql_query($reqsql) or die ("Echec de $sqlquest");

$cpt=0;
while ($quizz=mysql_fetch_assoc($resbase))
{
$num=$quizz['numquest']; // numéro de question
$question=$quizz['question']; // question
$reponse1=$quizz['rep1'];
$reponse2=$quizz['rep2'];
$reponse3=$quizz['rep3'];
$reponse4=$quizz['rep4'];
$repexact=$quizz['rep']; // reponse exact

echo '<div id="content">
<ul class="choices-border">';
//Affichage à l'ecran du numero de la question + question
echo $num.") ".$question."<br />";
//Affichage du choix des réponses avec les bouton radio
echo "<li>";

if($reponse1!=NULL)
echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt++.'" checked="checked" ><label for="radio-'.$cpt.'">'.$reponse1.'</label></input><br/>';

if($reponse2!=NULL)
echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt++.'" ><label for="radio-'.$cpt2.'">'.$reponse2.'</label></input><br/>';

if($reponse3!=NULL)
echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt++.'" ><label for="radio-'.$cpt3.'">'.$reponse3.'</label></input><br/>';

if($reponse4!=NULL)
echo'<input type="radio" name="rep'.$num.'" id="radio-'.$cpt++.'" ><label for="radio-'.$cpt4.'">'.$reponse4.'</label></input><br/>';

echo"</li>";
echo "</ul>";
echo "</div>";
return $cpt;

}

PS : ma question était : comment récupéré le $cpt ( à la valeur 4 en l'occurrence ici) pour ainsi avoir dans mes input 5,6,7 et 8 pour la boucle suivante. Le cpt serait donc à 8 pour la 3 ème boucle while ... etc

J'avais également une autre idée, celle d'initialiser 4 $cpt au début de la boucle qui vaudraient une valeur aléatoire ( avec la fonction rand) ce qui fonctionnerai mais serait assez dérangeant dans le sens où, par malheur un rand serait équivalent à un autre et ne serait pas correct et science exact de faire ceci.

Merci.
0
tgos93 Messages postés 83 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 9 juillet 2014
28 mars 2013 à 19:54
Cela fonctionne avec les rand je viens de vérifier ! Cependant s'il existe une méthode plus exacte, je suis preneur ;)
Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tgos93 Messages postés 83 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 9 juillet 2014
29 mars 2013 à 10:36
Merci de ta réponse. Le $cpt2 3 et 4 c'était pour la méthode du rand que j'avais oublié d'enlevé, dsl.
J'ai débuté recemment le php et je ne savais pas que le compteur aller être transmit à chaque boucle, je n'avais même pas essayé.
J'essai ta méthode, je vous tiens au courant.

Merci.
0
tgos93 Messages postés 83 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 9 juillet 2014
29 mars 2013 à 10:40
Ca fonctionne comme je le souhaite, encore merci pour tout. :D
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 mars 2013 à 13:06
si ça fonctionne mets en résolu
0