Comment retourner une valeur dans un while ?

Résolu
tgos93 Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
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.


A voir également:

6 réponses

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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 2102 Date d'inscription   Statut Membre Dernière intervention   261
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Ca fonctionne comme je le souhaite, encore merci pour tout. :D
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
si ça fonctionne mets en résolu
0