Petit QCM en PHP

Eléphant du PHP | 139 Messages

14 avr. 2005, 17:01

Voila, je cherchais le moyen de résoudre le problème de Moker ici :
http://www.phpfrance.com/forums/voir_su ... ponse1.php

Appeler plusieurs fois le même formulaire sans perdre les données des premières réponses.

Alors, je me suis dit pourquoi pas faire un petit Questionnaire à choix multiple en une page pour vérifier que ça fonctionne !!!

C’est ce que j’ai fait !!

Voici le code :
<?php
$question[0]="Quel âge avez-vous ?|Moins de 18 ans|Plus de 18 ans";
$question[1]="Comment trouvez-vous le site/forum de PHPFrance ?|Pas mal|Bien|Génial|Extraordinaire";
$question[2]="Votre niveau en PHP est ?|Débutant|Initié|Expert";
if (isset($_POST['nb'])) { $nb=$_POST['nb']; }else{ $nb=0; }
if (isset($_POST['reponse'])) { $reponse=$_POST['reponse'].$_POST['rep']."," ; }else{ $reponse=""; }
if ($nb < count($question))
{
 ?>
 <form name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
 <?php 
 $laqueston=explode("|",$question[$nb]);
 echo $laqueston[0]."<br><br>"; 
 for ($nbr_rep=1; $nbr_rep < count($laqueston); $nbr_rep++)
 {
 	?>
 	<input type="radio" name="rep" value="<?php echo $nbr_rep; ?>" <?php if ($nbr_rep==1) echo "checked"; ?>><?php echo $laqueston[$nbr_rep]."<br>"; 
  }
  ?>
 <br>
 <input type="hidden" name="reponse" value="<?php echo $reponse; ?>">
 <input type="hidden" name="nb" value="<?php echo $nb+1; ?>"> 
 <input type="submit" name="envoyer" value="Envoyer"><br> 
 </form>
<?php
}else{
$rep=explode(",", $reponse);
 echo "Terminer<br><br>";
 for ($i=0; $i <= count($reponse)+1; $i++)
 {
 	$laqueston=explode("|",$question[$i]);
 	echo "A la question : <font color=\"FF0000\">".$laqueston[0]."</font> Vous avez répondu <font color=\"00FF00\">".$laqueston[$rep[$i]]."</font><br>";
 }
}

?>
Je me suis dit que ça pouvait toujours servir à l’un ou l’autre.

Exemple d’utilisation : dans formulaire d’inscription, un sondage, un quiz,…. A vous de voir.
(Moi j’affiche les résultats, mais rien ne vous empêche de les stocker dans une base de données par exemple ou un fichier).

Mammouth du PHP | 859 Messages

14 avr. 2005, 17:06

Bien joué ;)

MI7
Eléphanteau du PHP | 11 Messages

14 sept. 2019, 00:56

Je remonte un vieux thread de 2005 je suis tombé dessus via google, puis quand j'ai testé le code a la toute fin j'avais une erreur de tableau donc j'ai fais une correction: $reponse[0] : fonctionne A1 :)

j'ai fais quel que modification.

tout fois auriez vous une idée pour la ligne 58 j'ai écrit echo " A la question " :
j'aimerais que sa soit écrit question 1 ensuite 2 ensuite 3. j'ai tenter de créer une variable dans la boucle for ligne 54 et j'ai fais un test : $x = 1; puis $x +=1; de cette façon a tout les fois que la boucle fait un tour ma variable monte de +1 mais cela n'a pas fonctionné.
<?php
$question[0]="John F. Kennedy à été |Un ami personnel de Fidel Castro|Le leader de la révolution américaine|Assassiné en 1963 par Jack Ruby|Assassiné à Dallas en 1963";
$question[1]="Quel président américain fut assassiné en 1865?|Abraham Lincoln|George Washington|Richard Nixon|Andrew Johnson";
$question[2]="Il s'est lui-même fait nommer président à vie d’Haïti. C'est son fils Jean-Claude qui lui a succédé en 1971?|P.E. Trudeau|Richard Hatfield|François Duvalier|Ernesto « Che » Guevara";

$reponseq[0]="Assassiné à Dallas en 1963";
$reponseq[1]="Abraham Lincoln";
$reponseq[2]="François Duvalier";

$note = 0;
if (isset($_POST['nb'])) 
{ 
    $nb=$_POST['nb']; 
}
else
{ 
    $nb=0; 
}

if (isset($_POST['reponse'])) 
{ 
    $reponse[0]=$_POST['reponse'].$_POST['rep']."," ; 
}
else
{ 
    $reponse[0]=""; 
}

if ($nb < count($question))
{
 ?>
 <form name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
 <?php 
 $laqueston=explode("|",$question[$nb]);
 echo $laqueston[0]."<br><br>"; 
 for ($nbr_rep=1; $nbr_rep < count($laqueston); $nbr_rep++)
{
 	?>
 	<input type="radio" name="rep" value="<?php echo $nbr_rep; ?>" <?php if ($nbr_rep==1) echo "checked"; ?>><?php echo $laqueston[$nbr_rep]."<br>"; 
}
 ?>
 <br>
 <input type="hidden" name="reponse" value="<?php echo $reponse[0]; ?>">
 <input type="hidden" name="nb" value="<?php echo $nb+1; ?>"> 
 <input type="submit" name="envoyer" value="Envoyer"><br> 
 </form>
<?php
}
else
{
$rep=explode(",", $reponse[0]);
 echo "Terminer<br><br>";
	
	for ($i=0; $i <= count($reponse)+1; $i++)
	{   
		
		$laqueston=explode("|",$question[$i]);
		echo "A la question " . $note . ": <font color=\"FF0000\"> " . $laqueston[0] . "</font><br> Vous avez répondu  " . $laqueston[$rep[$i]] . "<br> Reponse :"  . $reponseq[$i] . "<br><br>";	
	}
}
?>

Petit nouveau ! | 1 Messages

12 nov. 2019, 16:35

Je remonte un vieux thread de 2005 je suis tombé dessus via google, puis quand j'ai testé le code a la toute fin j'avais une erreur de tableau donc j'ai fais une correction: $reponse[0] : fonctionne A1 :)

j'ai fais quel que modification.

tout fois auriez vous une idée pour la ligne 58 j'ai écrit echo " A la question " :
j'aimerais que sa soit écrit question 1 ensuite 2 ensuite 3. j'ai tenter de créer une variable dans la boucle for ligne 54 et j'ai fais un test : $x = 1; puis $x +=1; de cette façon a tout les fois que la boucle fait un tour ma variable monte de +1 mais cela n'a pas fonctionné.
<?php
$question[0]="John F. Kennedy à été |Un ami personnel de Fidel Castro|Le leader de la révolution américaine|Assassiné en 1963 par Jack Ruby|Assassiné à Dallas en 1963";
$question[1]="Quel président américain fut assassiné en 1865?|Abraham Lincoln|George Washington|Richard Nixon|Andrew Johnson";
$question[2]="Il s'est lui-même fait nommer président à vie d’Haïti. C'est son fils Jean-Claude qui lui a succédé en 1971?|P.E. Trudeau|Richard Hatfield|François Duvalier|Ernesto « Che » Guevara";

$reponseq[0]="Assassiné à Dallas en 1963";
$reponseq[1]="Abraham Lincoln";
$reponseq[2]="François Duvalier";

$note = 0;
if (isset($_POST['nb'])) 
{ 
    $nb=$_POST['nb']; 
}
else
{ 
    $nb=0; 
}

if (isset($_POST['reponse'])) 
{ 
    $reponse[0]=$_POST['reponse'].$_POST['rep']."," ; 
}
else
{ 
    $reponse[0]=""; 
}

if ($nb < count($question))
{
 ?>
 <form name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
 <?php 
 $laqueston=explode("|",$question[$nb]);
 echo $laqueston[0]."<br><br>"; 
 for ($nbr_rep=1; $nbr_rep < count($laqueston); $nbr_rep++)
{
 	?>
 	<input type="radio" name="rep" value="<?php echo $nbr_rep; ?>" <?php if ($nbr_rep==1) echo "checked"; ?>><?php echo $laqueston[$nbr_rep]."<br>"; 
}
 ?>
 <br>
 <input type="hidden" name="reponse" value="<?php echo $reponse[0]; ?>">
 <input type="hidden" name="nb" value="<?php echo $nb+1; ?>"> 
 <input type="submit" name="envoyer" value="Envoyer"><br> 
 </form>
<?php
}
else
{
$rep=explode(",", $reponse[0]);
 echo "Terminer<br><br>";
	
	for ($i=0; $i <= count($reponse)+1; $i++)
	{   
		
		$laqueston=explode("|",$question[$i]);
		echo "A la question " . $note . ": <font color=\"FF0000\"> " . $laqueston[0] . "</font><br> Vous avez répondu  " . $laqueston[$rep[$i]] . "<br> Reponse :"  . $reponseq[$i] . "<br><br>";	
	}
}
?>
Bonjour, j'essai de reprendre ce code pour un mini projet néanmoins je rencontre quelque problème par rapport a l'affichage.
Voici la question et les réponses que j'ai rajouté:
$question[3]="Comment commence-t-on un fichier PHP ? |Par <!php |Par DOCTYPE HTML |Par <?php  |Par echo()";
et la bonne réponse
$reponseq[3]="Par <?php";
Mon problème est que ma question et mes possibles réponses s'affichent mal.
La première réponse est coupé par la 3eme et la 2eme est coupé par la 4eme.
Aussi la réponses choisi et la bonne réponses ne s'affichent pas sur la page des résultats.

Je n'ai que 4 jours, je sais que c'est peut être dur mais si quelqu'un peut m'aider ce serait incroyable.
Merci d'avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8455 Messages

12 nov. 2019, 19:42

Le problème est probablement que tu utilises les balises PHP dans ton texte, or pour éviter que ce soit compris réellement comme du code PHP il faut les encoder..
Je te recommande d'utiliser la fonction htmlentities() qui sert justement à celà
https://php.net/htmlentities
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 1630 Messages

13 nov. 2019, 09:18

essaie ceci
<input type="radio" name="rep" value="<?php echo $nbr_rep; ?>" <?php if ($nbr_rep==1) echo "checked"; ?>><pre><?php echo $laqueston[$nbr_rep]."</pre><br>";

ou ceci
$question[3]="Comment commence-t-on un fichier PHP ? |<pre>Par <!php</pre> |<pre>Par DOCTYPE HTML</pre> |<pre>Par <?php</pre> |<pre>Par echo()</pre>";
$reponseq[3]="<pre>Par <?php</pre>";


en faite tes réponse comprenant des caractère d'HTML comme < par exemple elle sont mal comprise

tu peux aussi les remplacer par leur équivalent html &lt;
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie