array dans quizz

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 : array dans quizz

Re: array dans quizz

par nikss » 14 nov. 2011, 18:07

Mais la valeure elle vient de qcm.php?
la valeure s'est mise dans $idQuiz et elle s'est envoyé à qcmreponse.php
Mais donc si qcmreponse.php a perdu ce qu'il y a dans $idQuiz comment retrouver cette valeure? parce que $_POST['id_quiz'] ca ne marcherai pas nonplus...

Re: array dans quizz

par macgawel » 14 nov. 2011, 17:55

Comment ca "alimenter" ma variable?
Avant de l'utiliser, il faut dire ce qu'elle vaut...

Là, PHP te dit (en gros) que tu utilises une variable $idQuiz qui n'a pas de valeur.
Du coup, PHP traduit $_POST[$idQuiz] en $_POST['']. Et si tu regardes ton var_dump, $_POST[''] n'a pas de valeur #-o

Re: array dans quizz

par nikss » 14 nov. 2011, 17:45

Comment ca "alimenter" ma variable?

Re: array dans quizz

par macgawel » 14 nov. 2011, 17:42

J'ai ca comme erreure: Notice: Undefined variable: idQuiz in C:\wamp\www\php_sandbox\quiz\qcmreponse.php on line 45
et Notice: Undefined index: in C:\wamp\www\php_sandbox\quiz\qcmreponse.php on line 45
Notice: Undefined variable: idQuiz in C:\wamp\www\php_sandbox\quiz\qcmreponse.php on line 45
Note : Variable non définie : idQuiz, dans le fichier C:\wamp\www\php_sandbox\quiz\qcmreponse.php à la ligne 45.

A quel moment es-tu sensé alimenter ta variable $idQuiz ?

Re: array dans quizz

par nikss » 14 nov. 2011, 14:10

Non, ca ne marche toujours pas. J'ai enlevé le "q" dans le "name" de la balise input pour que ca soit moins compliqué justement.
J'ai ca comme erreure: Notice: Undefined variable: idQuiz in C:\wamp\www\php_sandbox\quiz\qcmreponse.php on line 45
et Notice: Undefined index: in C:\wamp\www\php_sandbox\quiz\qcmreponse.php on line 45
à chaque boucle.

Pourtant j'ai changé les $_POST

Quand je fais echo var_dump($_POST); au début de la page ca m'affiche bien tout l'array pourtant...

Code : Tout sélectionner

array 1 => string 'lareponse1' (length=10) 2 => string 'mauvaisereponse1' (length=16) 3 => string 'mauvaisereponse2' (length=16) 4 => string 'lareponse4' (length=10) 5 => string 'mauvaisereponse2' (length=16) 6 => string 'mauvaisereponse1' (length=16) 7 => string 'mauvaisereponse1' (length=16) 8 => string 'lareponse8' (length=10) 9 => string 'mauvaisereponse2' (length=16) 10 => string 'mauvaisereponse2' (length=16)
qcm.php:
		
<?php

$db = array();
$db['host'] = 'localhost'; 
$db['user'] = 'root'; // utilisateur
$db['pass'] = ''; //password
$db['base'] = 'techn2'; //nom de la base de donnee


if($_SERVER['SERVER_NAME'] != 'localhost'){
	$db['host'] = 'xxxx'; 
	$db['user'] = 'xxxx'; // utilisateur
	$db['pass'] = 'xxxxx'; //password
	$db['base'] = 'xxxx'; //nom de la base de donnee
}


function database_connect($db){
	$link = mysql_connect($db['host'],$db['user'],$db['pass']);
	if(!$link) die("erreur de connexion a la base de donnee".mysql_error());
	if(!mysql_select_db($db['base'])) die ("selection de la vase impossible");
	return $link;
}


function database_disconnect($link){
	mysql_close($link);
}
$link = database_connect($db);


$sql = 'SELECT * FROM quiz';
$result = mysql_query($sql);
if(!$result){
	die('erreur dans la requete : ' . mysql_error());
}

$tabReponses = array();
while($row = mysql_fetch_assoc($result, MYSQL_ASSOC))
{
        $tabReponses[] = array ($row['id_quiz'], $row['question'], $row['reponse'], $row['reponse_mauvaise1'],  $row['reponse_mauvaise2']);
}

?> 
<form method="post" action="qcmreponse.php"> 
<?php

if (!empty ($tabReponses) && is_array($tabReponses))
{
        foreach  ($tabReponses as $tabTemp)
        {       
                ?>
                <p>
				
                <?php
                $idQuiz = $tabTemp[0];
                $question = $tabTemp[1];
                $tabReponseAuHazard = array ($tabTemp[2], $tabTemp[3], $tabTemp[4]);
                shuffle ($tabReponseAuHazard);
				
				echo $question;  echo $idQuiz; ?><br /> <?php
				
				
                for ($i=0; $i<count($tabReponseAuHazard); $i++)
                {
                        $value = $tabReponseAuHazard[$i];
                        $texte = $tabReponseAuHazard[$i];
                        ?>
                        <label> 
                                <input type="radio" name="<?php echo $idQuiz; ?>" value="<?php echo $value; ?>" /> <?php echo $texte; ?>
                        </label>
                        <br />
						
						<?php
                }
                ?>
						
						
                        
                </p>
                <?php
                
        }
}
?>
<input type="submit" value="Envoyer" />
</form>

qcmreponse.php:
<?php


$db = array();
$db['host'] = 'localhost'; 
$db['user'] = 'root'; // utilisateur
$db['pass'] = ''; //password
$db['base'] = 'techn2'; //nom de la base de donnee


if($_SERVER['SERVER_NAME'] != 'localhost'){
	$db['host'] = 'xxxx'; 
	$db['user'] = 'xxxx'; // utilisateur
	$db['pass'] = 'xxxxx'; //password
	$db['base'] = 'xxxx'; //nom de la base de donnee
}


function database_connect($db){
	$link = mysql_connect($db['host'],$db['user'],$db['pass']);
	if(!$link) die("erreur de connexion a la base de donnee".mysql_error());
	if(!mysql_select_db($db['base'])) die ("selection de la vase impossible");
	return $link;
}


function database_disconnect($link){
	mysql_close($link);
}
$link = database_connect($db);


$sql = 'SELECT * FROM quiz';
$result = mysql_query($sql);
if(!$result){
	die('erreur dans la requete : ' . mysql_error());
}
while($row = mysql_fetch_assoc($result, MYSQL_ASSOC)) {
        $note_totale = 0; // on initialise la note        




        
        if ( $_POST[$idQuiz] == $_POST[$value] )
        {
            $note_totale = $note_totale + 1;
			echo $_POST[$texte].' '.$_POST[$idQuiz]. ': Réponse juste.<br />'.$row["explication"].' de la réponse.';
        }
		else { 
			echo 'Question 1: Réponse mauvaise. Bonne réponse: <br />'.$row["explication"].' de la réponse.';
		}

		
		
	}
 

 
       
        ?>
<p>
    Ta note : <?php echo $note_totale ; ?><br />
    <?php echo $message ; ?>
</p>
        <?php            

 
   
?>

Re: array dans quizz

par Aureusms » 14 nov. 2011, 00:29

Bonjour,

Dans le code que j'ai fournit les noms des input envoyés par POST commence par p.
Alors que j'ai vu que tu demandes
if ( $_POST['id_quiz'] == $_POST['reponse'] )
De même dans le code que je fournis le champ input possède un nom (name) dynamique (c'est cette ligne là)
<input type="radio" name="<?php echo $idQuiz; ?>" value="<?php echo $value; ?>" /> <?php echo $texte; ?> (enlèves le </input>)

Alors que tu demandes uniquement un champ fixe $_POST['id_quiz']
il faudrait peut être adapté en indiquant le champ dynamique. Commenca d'abord par vérifier ce qui a été posté. Fais un var_dump ($_POST); pour le voir. (à mettre en haut de qcmreponse.php:)

Re: array dans quizz

par Invité » 13 nov. 2011, 11:16

OK parfait ca a marché finalement!

Maintenant j'ai un nouveau problèm dans la page qcmreponse.php où je recois les réponses du qcm.

Voici à nouveau là page qui affiche le QCM, qcm.php:
		
<?php

$db = array();
$db['host'] = 'localhost'; 
$db['user'] = 'root'; // utilisateur
$db['pass'] = ''; //password
$db['base'] = 'techn2'; //nom de la base de donnee


if($_SERVER['SERVER_NAME'] != 'localhost'){
	$db['host'] = 'xxxx'; 
	$db['user'] = 'xxxx'; // utilisateur
	$db['pass'] = 'xxxxx'; //password
	$db['base'] = 'xxxx'; //nom de la base de donnee
}


function database_connect($db){
	$link = mysql_connect($db['host'],$db['user'],$db['pass']);
	if(!$link) die("erreur de connexion a la base de donnee".mysql_error());
	if(!mysql_select_db($db['base'])) die ("selection de la vase impossible");
	return $link;
}


function database_disconnect($link){
	mysql_close($link);
}
$link = database_connect($db);


$sql = 'SELECT * FROM quiz';
$result = mysql_query($sql);
if(!$result){
	die('erreur dans la requete : ' . mysql_error());
}

$tabReponses = array();
while($row = mysql_fetch_assoc($result, MYSQL_ASSOC))
{
        $tabReponses[] = array ($row['id_quiz'], $row['question'], $row['reponse'], $row['reponse_mauvaise1'],  $row['reponse_mauvaise2']);
}

?> 
<form method="post" action="qcmreponse.php"> 
<?php

if (!empty ($tabReponses) && is_array($tabReponses))
{
        foreach  ($tabReponses as $tabTemp)
        {       
                ?>
                <p>
				
                <?php
                $idQuiz = $tabTemp[0];
                $question = $tabTemp[1];
                $tabReponseAuHazard = array ($tabTemp[2], $tabTemp[3], $tabTemp[4]);
                shuffle ($tabReponseAuHazard);
				
				echo $question;  echo $idQuiz; ?><br /> <?php
				
				
                for ($i=0; $i<count($tabReponseAuHazard); $i++)
                {
                        $value = $tabReponseAuHazard[$i];
                        $texte = $tabReponseAuHazard[$i];
                        ?>
                        <label> 
                                <input type="radio" name="<?php echo $idQuiz; ?>" value="<?php echo $value; ?>" /> <?php echo $texte; ?></input>
                        </label>
                        <br />
						
						<?php
                }
                ?>
						
						
                        
                </p>
                <?php
                
        }
}
?>
<input type="submit" value="Envoyer" />
</form>

Voici la page qcmreponse.php:
<?php


$db = array();
$db['host'] = 'localhost'; 
$db['user'] = 'root'; // utilisateur
$db['pass'] = ''; //password
$db['base'] = 'techn2'; //nom de la base de donnee


if($_SERVER['SERVER_NAME'] != 'localhost'){
	$db['host'] = 'xxxx'; 
	$db['user'] = 'xxxx'; // utilisateur
	$db['pass'] = 'xxxxx'; //password
	$db['base'] = 'xxxx'; //nom de la base de donnee
}


function database_connect($db){
	$link = mysql_connect($db['host'],$db['user'],$db['pass']);
	if(!$link) die("erreur de connexion a la base de donnee".mysql_error());
	if(!mysql_select_db($db['base'])) die ("selection de la vase impossible");
	return $link;
}


function database_disconnect($link){
	mysql_close($link);
}
$link = database_connect($db);


$sql = 'SELECT * FROM quiz';
$result = mysql_query($sql);
if(!$result){
	die('erreur dans la requete : ' . mysql_error());
}
while($row = mysql_fetch_assoc($result, MYSQL_ASSOC)) {
        $note_totale = 0; // on initialise la note        




        // if $idQuiz = $value
        if ( $_POST['id_quiz'] == $_POST['reponse'] )
        {
            $note_totale = $note_totale + 1;
			echo $_POST["reponse"].' '.$_POST["id_quiz"]. ': Réponse juste.<br />'.$row["explication"].' de la réponse.';
        }
		else { 
			echo 'Question 1: Réponse mauvaise. Bonne réponse: <br />'.$row["explication"].' de la réponse.';
		}

		
		
	}
 

 
       
        ?>
<p>
    Ta note : <?php echo $note_totale ; ?><br />
    <?php echo $message ; ?>
</p>
        <?php            

 
   
?>

Je n'arrive pas à récuperer les $_POST[] envoyés par le QCM...

Re: array dans quizz

par Aureusms » 13 nov. 2011, 01:49

Pourquoi dans ton cas tu n'utilises pas shuffle() http://www.php.net/manual/fr/function.shuffle.php qui mélange les données d'un tableau ?
Je stockerai tout dans un tableau puis je bouclerai sur ce tableau pour gagner en vitesse.
<?php
//...
$tabReponses = array();
while($row = mysql_fetch_assoc($result, MYSQL_ASSOC))
{
	$tabReponses[] = array ($row['id_quiz'], $row['question'], $row['reponse_mauvaise1'],  $row['reponse_mauvaise2']);
}

?> 
<form method="post" action="qcmreponse.php"> 
<?php

if (!empty ($tabReponses) && is_array($tabReponses))
{
	foreach  ($tabReponses as $tabTemp)
	{	
		?>
		<p>
		<?php
		$idQuiz = $tabTemp[0];
		$tabReponseAuHazard = array ($tabTemp[1], $tabTemp[2], $tabTemp[3]);
		shuffle ($tabReponseAuHazard);
		for ($i=0; $i<count($tabReponseAuHazard); $i++)
		{
			$value = $tabReponseAuHazard[$i];
			$texte = $tabReponseAuHazard[$i];
			?>
			<label>
				<input type="radio" name="q<?php echo $idQuiz; ?>" value="<?php echo $value; ?>" /> <?php echo $texte; ?>
			</label>
			<br />
			<?php
		}
		?>
		</p>
		<?php
		
	}
}
?>
<input type="submit" value="Envoyer" />
</form>

array dans quizz

par Invité » 12 nov. 2011, 22:12

Bonjour,

Je fait un petit quizz en php, mais j'ai des problèmes à afficer les réponses aléatoirement avec le rand().
Voici le script:
		
<?php

$db = array();
$db['host'] = 'localhost'; 
$db['user'] = 'root'; // utilisateur
$db['pass'] = ''; //password
$db['base'] = 'techn2'; //nom de la base de donnee


if($_SERVER['SERVER_NAME'] != 'localhost'){
	$db['host'] = 'xxxx'; 
	$db['user'] = 'xxxx'; // utilisateur
	$db['pass'] = 'xxxxx'; //password
	$db['base'] = 'xxxx'; //nom de la base de donnee
}


function database_connect($db){
	$link = mysql_connect($db['host'],$db['user'],$db['pass']);
	if(!$link) die("erreur de connexion a la base de donnee".mysql_error());
	if(!mysql_select_db($db['base'])) die ("selection de la vase impossible");
	return $link;
}


function database_disconnect($link){
	mysql_close($link);
}
$link = database_connect($db);


$sql = 'SELECT * FROM quiz';
$result = mysql_query($sql);
if(!$result){
	die('erreur dans la requete : ' . mysql_error());
}
?> <form method="post" action="qcmreponse.php"> <?php

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){

	$id_quiz = $row['id_quiz'];
$question = $row['question'];
$reponse = $row['reponse'];
$reponse_mauvaise1 = $row['reponse_mauvaise1'];
$reponse_mauvaise2 = $row['reponse_mauvaise2'];



	 ?>
 

   <p>
       <?php echo $question; ?> <?php echo $id_quiz; ?><br />
	   <?php
	   $reponses = array($reponse, $reponse_mauvaise1, $reponse_mauvaise2);
		$resultat = array_rand($reponses, 3);
		
	   ?>
       <label><input type="radio" name="q<?php echo $id_quiz; ?>" value="<?php echo $reponses[$resultat[0]]; ?>" /> <?php echo $reponses[$resultat[0]]; ?></label><br />
       <label><input type="radio" name="q<?php echo $id_quiz; ?>" value="<?php echo $reponses[$resultat[1]]; ?>" /> <?php echo $reponses[$resultat[1]]; ?></label><br />
       <label><input type="radio" name="q<?php echo $id_quiz; ?>" value="<?php echo $reponses[$resultat[2]]; ?>" /> <?php echo $reponses[$resultat[2]]; ?></label><br />
   </p>

    <?php  
}

?>
   <input type="submit" value="Envoyer" />
</form>
Le problème c'est que
 <label><input type="radio" name="q<?php echo $id_quiz; ?>" value="<?php echo $reponses[$resultat[0]]; ?>" /> <?php echo $reponses[$resultat[0]]; ?></label><br />
       <label><input type="radio" name="q<?php echo $id_quiz; ?>" value="<?php echo $reponses[$resultat[1]]; ?>" /> <?php echo $reponses[$resultat[1]]; ?></label><br />
       <label><input type="radio" name="q<?php echo $id_quiz; ?>" value="<?php echo $reponses[$resultat[2]]; ?>" /> <?php echo $reponses[$resultat[2]]; ?></label><br />
ne s'affiche pas aléatoirement, mais en ordre.

Dans mon sql j'ai :
id_quiz (l'id de chaque question)
question (la question)
reponse (la bonne réponse)
reponse_mauvaise1 (une mauvaise réponse)
reponse_mauvaise2 (une deuxieme mauvaise réponse)
explication (ca c'est ce qui va s'afficher quand je serais dans qcmreponse.php)

Vous voyez une erreure avec l'array?