IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

La foire aux solutions

Parsing XML - QuizMaker

Noter ce billet
par , 24/03/2015 à 18h13 (742 Affichages)
Salut !

Lorsque vous utilisez QuizMaker vous avez la possibilité d'envoyer les résultats du Quiz à une URL donnée. Cette article va vous montrer une des possibilités de récupérer les résultats d'un Quiz via une page php.

Rendez vous dans QuizMaker et cliquez sur "Properties".
Nom : image1.png
Affichages : 641
Taille : 29,8 Ko

Ensuite sélectionnez l'onglet "Result" et choisissez "Send quiz result to server".
Cette zone de texte doit contenir l'URL de votre page php qui va s'occuper de récupérer les résultats. Par exemple http://localhost/getresults.php

Nom : image2.png
Affichages : 126
Taille : 60,0 Ko

Pensez bien à saisir l'URL pour les onglets "if user passes" et "if user fails".


Vous avez différentes variables vous permettant de récupérer des données spécifiques :

Nom : image4.PNG
Affichages : 133
Taille : 37,8 Ko

Ensuite rendez vous sur votre fichier "getresults.php".
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$quiz_title = $_POST['qt']; //Ici on récupère le titre du Quiz
$quiz_details = $_POST['dr']; //Ici on récupère les résultats sous format xml
 
$filename = "xml/test_results.xml"; // On crée un fichier test_results.xml où on va stocker l'ensemble des résultats en format xml
 
$f = fopen($filename, "w"); 
 
fwrite($f,$quiz_details); // On écrit à l'intérieur de se fichier et on insère le contenu de $quiz_details
 if ($f){
      fclose($f);
 }
 
$flux = simplexml_load_file($filename); // On charge le fichier
 
foreach($flux->summary->variables->variable as $variable) // On récupère les données demandées au démarrage du Quiz (Vous avez bien entendu la possibilité de selectionner plus d'attributs dans QuizMaker dans le rubrique Properties -> Main -> Customize)
{
	if($variable['name']=='USER_NAME')
	{
		$user_name=$variable['value']; // On récupère le nom 
		echo $user_name.'<br/>';
	}
	if($variable['name']=='USER_EMAIL')
	{
		$email=$variable['value']; // On récupère l'email
		echo $email.'<br/>';
	}
 
} 
 
// Pour récupérer le score 
 
$user_score = $flux->summary['percent'];
echo "user score is: ".$user_score."<br>";
 
// Pour récupérer le passing score
 
$passing_score = $flux->quizSettings -> passingPercent;
 
// Pour récupérer le timing
 
$timing = $flux->summary['time'];

Voici un exemple de code permettant de récupérer le résultat de certaines questions en particulier la réponse de l'utilisateur ainsi que la réponse attendue. Les réponses sont ensuite stockées en base.

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 foreach ($flux->questions->$question_type_label as $questions_list){
                $question=$questions_list-> direction;
                $status=$questions_list['status'];
                $question_id=$questions_list['id']; // id encodé
                $question = addslashes($question);
                $sql = "SELECT id FROM quiz_questions WHERE question_id ='$question_id' and quiz_liste_id='$survey_id'"; // Changement dans le select pour éviter de sélectionne un id qui s’incrémente à chaque fois
 
 // on compte le nombre de résultats 
                $q = $bdd->query($sql);
                $rows = $q->fetchAll();
                $res = count($rows);
 
                if($res!=0)  // La question existe déjà en base on ne va pas donc la recréer
                {
                   //temp
                    echo "Question already exist<br>";
 
                    $stmt = $bdd->query($sql);
                    $sql_result = $stmt->fetch(PDO::FETCH_ASSOC);
                    $question_id = $sql_result['id'];
 
                    $sql = "UPDATE quiz_questions SET question_direction='$question' WHERE question_id='$question_id'"; // Changement effectué
                    $bdd->exec($sql);
 
                }
 
                else
                {
                $sql = "INSERT INTO quiz_questions (id,question_id,question_type_id,quiz_liste_id,question_direction)"
                        . " VALUES"
                        . "('','$question_id','$question_type_id','$survey_id','$question')"; 
                $bdd->exec($sql);
 
                // on récupère l'id du quiz qui vient d'être généré 
                $question_id = $bdd->lastInsertId();
                //temp
                echo "New question with ID ".$question_id." added<br>";
                }
 
               if ($question_type_label=="essayQuestion") // On teste ensuite sous chaque if les différents types de questions
               {
               $user_answer=$questions_list-> userAnswer;
               $user_answer = addslashes($user_answer);
               $sql = "INSERT INTO survey_results (id_results,question_id,survey_id, user_id,survey_date,question_status,timing_id,user_answer)"
               . "VALUES"
               . "('','$question_id','$survey_id','$user_id','$curdate','$status','$timing_id','$user_answer')"; 
                $bdd->exec($sql);
               }
               else
               {
			if($question_type_label=="yesNoQuestion")
			{
				$user_answer=$questions_list-> answers[@userAnswerIndex];
				if($user_answer == 0)
				{
					$user_answer = "Yes";
				}
				else
				{
					$user_answer = "No";
				}
				$user_answer = addslashes($user_answer);
				$sql = "INSERT INTO survey_results (id_results,question_id,survey_id, user_id,survey_date,question_status,timing_id,user_answer)"
					   . "VALUES"
					   . "('','$question_id','$survey_id','$user_id','$curdate','$status','$timing_id','$user_answer')"; 
						$bdd->exec($sql);
			} else
			{
				if($question_type_label=="pickOneQuestion")
 
				{
					$user_answer=$questions_list-> answers[@userAnswerIndex];
					//echo "user_answer : " . $user_answer;
					$quiz_answer=$questions_list-> answers-> answer[(int)$user_answer];
					//$quiz_answer=$questions_list-> answers-> answer["1"];
					/*echo "quiz_answer : " . $quiz_answer;
 
					$test=$questions_list-> answers;
					print_r($test);
					echo"<br/>";*/
					//$user_answer=$quiz_answer[$user_answer];
					//$user_answer = addslashes($user_answer);
					$sql = "INSERT INTO survey_results (id_results,question_id,survey_id, user_id,survey_date,question_status,timing_id,user_answer)"
						   . "VALUES"
						   . "('','$question_id','$survey_id','$user_id','$curdate','$status','$timing_id','$quiz_answer')"; 
							$bdd->exec($sql);
				}

En espérant pouvoir aider certains.

Cordialement,

Envoyer le billet « Parsing XML - QuizMaker » dans le blog Viadeo Envoyer le billet « Parsing XML - QuizMaker » dans le blog Twitter Envoyer le billet « Parsing XML - QuizMaker » dans le blog Google Envoyer le billet « Parsing XML - QuizMaker » dans le blog Facebook Envoyer le billet « Parsing XML - QuizMaker » dans le blog Digg Envoyer le billet « Parsing XML - QuizMaker » dans le blog Delicious Envoyer le billet « Parsing XML - QuizMaker » dans le blog MySpace Envoyer le billet « Parsing XML - QuizMaker » dans le blog Yahoo

Mis à jour 24/04/2016 à 21h54 par LittleWhite (Coloration code)

Catégories
PHP , Développement Web

Commentaires