Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 12h43   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 0
Points : 0
Par défaut Modification d'un sript de quizz

Bonjour,

Je suis débutante en PHP, et j'ai trouvé sur le web un script pour réaliser un quiz multijoueur en simultané.
J'aimerai le modifier pour y ajouter une base de donnée, afin de pouvoir afficher les joueurs et les résultats de chaque joueur en fin de quiz sous forme de bargarph.

Voici le code des fichiers php:

1/ quizz.php

Code :
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
88
89
90
91
92
93
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<?
 include("questions.php");
?>
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="content-language" content="fr" />
<? print"<title>$titre</title>"; ?>
<link type="text/css" rel="stylesheet" href="quizz.css" />
</head>
<body>
<?
if (isset($entete)) {
	print"<div class=\"entete\">";
	include ("$entete");
	print"</div>";
}
?>
<div class="quizz">
<div class="titre">
	<? print "\t".$titre."\n"; ?>
</div>
<?
extract ($_POST);
if (!isset($result)) {
	print "<form action=\"$PHP_SELF\" method=\"post\">";
	for ($i=0; $i<count($quizz); $i++) {
		$nom="_".$i;
		print "\n<div class=\"question\">\n";
		print "\t".$quizz[$i][0]."\n";
		print "</div>\n<div class=\"propositions\">\n";
     		for ($j=1; $j<count($quizz[$i])-2; $j++) {
			$quest=$quizz[$i][$j];
	  		print "\t<input type=\"radio\" name=\"$nom\" value=\"$j\" />$quest<br />\n";
     		}
		print "</div>";
     		print "<br />";
	}
	print "<input type=\"hidden\" name=\"result\" value=\"voir\" />\n";
	print "<input type=\"submit\" class=\"bouton\" value=\"Valider\" /><br />\n</form>"; 
}
else {
	print "<div class=\"resultats\">R&eacute;sultats du quizz</div>";
	$points=0;
	for($i=0; $i<count($quizz); $i++) {
		$nom="_".$i;
		print "\n<div class=\"question\">\n";
		print "\t".$quizz[$i][0]."\n</div>\n";
		$numero_bonne=$quizz[$i][count($quizz[$i])-2]; /* avant-dernière valeur du tableau */
        	$bonne=$quizz[$i][$numero_bonne]; /* Bonne réponse */
		print "<div class=\"verif\">";
		if ($$nom==$numero_bonne) {
			print "Votre r&eacute;ponse <b><i>".$bonne."</i></b> est exacte";
			$points++;
		}
		else {
			print "La bonne r&eacute;ponse est <b>$bonne</b> mais vous ";
			if ($$nom=="") {
				print"n'avez rien r&eacute;pondu";
			}
			else {
				print"avez r&eacute;pondu <b>".$quizz[$i][$$nom]."</b>";
			}
		}
		print "</div>";
		$commentaire=$quizz[$i][count($quizz[$i])-1];
		if ($commentaire!=NULL) print "\n<div class=\"commentaire\">$commentaire</div>";
	//print"<br /><br />\n";
	$nom++;
	}
	if($points==count($quizz)) {
		print"<div class=\"felicitations\">F&eacute;licitations vous avez tout juste</div>\n";
	}
	else {
	  print "<div class=\"points\">Vous avez marqué $points point";
		  if ($points>1) print "s";
	  print " sur ".count($quizz)."</div>\n";
	}
}
?>
 
</div>
<?
if (isset($pied)) {
	print"<div class=\"pied\">";
	include ("$pied");
	print"</div>";
}
?>
</body>
</html>
et en 2

question.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$titre="Démo PHP-Quizz";
$entete="entete.html"; /* entête du quizz */
$pied="pied.html"; /* pied du quizz */
$quizz= array(
 array("Quelle est l'année de naissance de Victor Hugo ?",
	"1824","1831","1802","1805","3","Il est né le 26 février 1802 à Besançon"),
 array("Le peintre Chagall était d'origine russe ?",
	"vrai","faux","1","Il est né le 7 juillet 1887 à Vitebsk (Russie)"),
 array("Lequel de ces chanteurs a été accompagné par les Wailers",
 	"Bob Marley","Frank Sinatra","Robert Smith","1","Robert Smith est le chanteur de The Cure"),
 array("Le saleron est:",
	"une personne qui a commis des vols et des crimes","un mélange de plâtre et de fibres végétales","la partie creuse d'une salière","3","")
);
?>
Merci de votre aide
artandsports est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 13h19   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Pour ce qui est du fichier réponse, je ferais comme ceci:

En base de données:
  • Une table "questions" avec id de question, texte de question, et un champs "reponses" du type 1,2,3;2 (;2 signifiant la bonne réponse)
  • Une table réponses avec id réponse, texte réponse.

Fichier questions.php, l'algo serait du genre:
- Récupération des questions et mis dans un array.
- Et ensuite, c'est un traitement comme avant ^^


____________
Détails:
pour récupérer les réponses avec "1,2,3;2"
il te suffit d'utiliser:
Code :
list($liste_reponse, $juste) = explode(';', $donnes);
tu auras donc "1,2,3" et "2".

C'est assez précis? Je n'ai pas trop de temps pour le développer mais sinon, ça aurait été avec plaisir. courage
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 15h00   #3
Invité de passage
 
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 0
Points : 0
merci de ta reponse , je vais essayer de ce que j'arrive à faire ;-)
artandsports est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 15h03   #4
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Je tiens à préciser que ceci est fait rapidement, y a sûrement pas mal d'optimisation à apporter et de logique aussi. Mais ça fonctionne. Comme dit en MP, il n'y a pas de systeme d'utilisateur avec point, mais uniquement la gestion des questions/réponses.

La db:
Code SQL :
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
 
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 25 Mars 2011 à 13:58
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.4
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Base de données: `quizz`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `questions`
--
 
CREATE TABLE IF NOT EXISTS `questions` (
  `id_question` int(11) NOT NULL AUTO_INCREMENT,
  `texte_question` text NOT NULL,
  `choix_question` varchar(10) NOT NULL,
  PRIMARY KEY (`id_question`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
--
-- Contenu de la table `questions`
--
 
INSERT INTO `questions` (`id_question`, `texte_question`, `choix_question`) VALUES
(1, 'Quel est le meilleur forum traitant de la programmation?', '1,2,3;2'),
(2, 'Que Signifie AFUP?', '4,5,6;4');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `reponses`
--
 
CREATE TABLE IF NOT EXISTS `reponses` (
  `id_reponse` int(11) NOT NULL AUTO_INCREMENT,
  `texte_reponse` text NOT NULL,
  PRIMARY KEY (`id_reponse`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
 
--
-- Contenu de la table `reponses`
--
 
INSERT INTO `reponses` (`id_reponse`, `texte_reponse`) VALUES
(1, 'lesite.com'),
(2, 'developpez.com'),
(3, 'lautresite.com'),
(4, 'Association Française des Utilisateurs de PHP'),
(5, 'Ahem, je sais pas.'),
(6, 'Aide fonction utilisateur prolongé');

Questions.php:
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
 
  $questions = array();
  $query = mysql_query('SELECT * FROM questions ORDER BY id_question');
  while($question = mysql_fetch_assoc($query)){
    list($liste_choix, $question['reponse_juste']) = explode(';', $question['choix_question']);//on sépare les choix de la réponse juste
    $choix = explode(',', $liste_choix);//on met dans un tableaux les différent choix
    unset($question['choix_question']);//on supprime la variable car l'a exploté, plus besoin.
    $question['choix_reponse'] = array();//on va mettre dedans nos réponses qui seront chacune un tableau.
    foreach($choix as $unChoix){//pour chaque choix
      $requete_reponses = mysql_query('SELECT * FROM reponses WHERE id_reponse = '.$unChoix);//on récupère le choix de réponse
      $reponse = mysql_fetch_assoc($requete_reponses);// on met dans un tableau
      array_push($question['choix_reponse'], $reponse);//on met le choix de réponse dans le tableau de choix des réponses
    }
    array_push($questions, $question);//on met la réponse dans le tableau de réponses.
  }
  //cette page génère donc la variable "questions" que nous utiliserons pour afficher le questionnaire.
?>

Index.php:
Code php :
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
 
<?php
  session_start();//va nous permettre de connaitre le nombre de question dans le formulaire.
  mysql_connect('localhost','root','');
  mysql_select_db('quizz');
 
  function pre($tab){
    echo '<pre>';
      print_r($tab);
    echo '</pre>';
  }
 
  if(filter_has_var(INPUT_POST, 'goForm')){//si le bouton formulaire est cliqué (donc formulaire validé). - pareil ques isset()
    $output = '';//texte à afficher à la fin des testes.
    for($i = 1; $i <= $_SESSION['nombre_question']-1; $i++){//on fait une boucle qui va jusqu'au nombre de question
      if(filter_has_var(INPUT_POST, 'reponse_question'.$i)){//si la personne a répondu
        $query = mysql_query('SELECT * FROM questions WHERE id_question = '.$i) or die (mysql_error());
        $question = mysql_fetch_assoc($query);
        list($not_used, $reponse_juste) = explode(';', $question['choix_question']);
        $output .= 'A la question "'.$question['texte_question'].'" vous avez répondu ';
        if($_POST['reponse_question'.$i] != $reponse_juste){
          $query = mysql_query('SELECT texte_reponse FROM reponses WHERE id_reponse = '.$reponse_juste) or die (mysql_error());
          $reponse = mysql_fetch_assoc($query);
          $output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
        }else{
          $output .= 'juste. Bravo!';
        }
        $output .= '<br /><br />';
      }else{
        $output .= 'Vous n\'avez pas répondu à la question "'.$question['texte_question'].'"<br />';
      }
    }//fin for
  }else{//si formulaire pas envoyé, on récupère les questions pour les afficher.
  }
    require_once 'questions.php';
?>
<!DOCTYPE html>
 
<html lang="fr">
<head>
  <meta charset="ISO-8859-1">
 
  <title>Quizz artsandsport!</title>
 
</head>
<body>
  <?php if(isset($output)){echo'<p style="text-align:center;">'.$output.'<br /><br /><a href="./index.php" title="Retour">Retour</a></p>';}else{ ?>
  <form action="./index.php" method="post">
  <?php
    $i = 1;//on initialise à 1. Ce compteur va permettre d'assigner un numéro à chaque question pour les différencier.
    foreach($questions as $question){//pour que question dans le tableau "$questions"
      echo '<fieldset>';//pour faire beau
        echo '<legend>'.$question['texte_question'].'</legend>';//Le texte de la question.
        echo '<p style="padding-left:30px;">',"\r\n";
        foreach($question['choix_reponse'] as $unchoix){
          echo '<input type="radio" name="reponse_question'.$i.'" value="'.$unchoix['id_reponse'].'" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
        }
        echo '</p>';
      echo '</fieldset>';
      $i++;//on incrémente un à $i car on va passer à la question suivante.
    }
    $_SESSION['nombre_question'] = $i;//connaitre le nombre de question dans le formulaire après la validation.
  ?>
      <br /><input type="submit" value="Valider" name="goForm" />
  </form>
  <?php } ?>
</body>
</html>

Cordialement, guillaume
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 09h35   #5
Invité de passage
 
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 0
Points : 0
Par défaut merci

Merci, j'avais pas eu de mail, m'indiquant une réponse , merci beaucoup
artandsports est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h52.


 
 
 
 
Partenaires

Hébergement Web