Score à un questionnaire ?

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
Tiboo
Messages : 1
Enregistré le : 06 juin 2017, 14:40

Score à un questionnaire ?

Message par Tiboo » 06 juin 2017, 14:44

Bonjour, je souhaite faire un quiz dans lequel l'utilisateur doit choisir un évènement en fonction de la date qui s'affiche. J'ai crée ce code qui permet à l'utilisateur de sélectionner ses réponses sur un nombre de questions définit. Le problème étant que je n'arrive pas avoir un score correct à la fin du questionnaire, j'ai trouver un système pour y arriver mais je n'arrive pas à l'intégrer:
La fonction qui incrémente le score doit recevoir comme arguments la bonne réponse et la proposition faite par l'utilisateur.
Il faut donc, pour chaque réponse, stocker la bonne réponse.
En pseudo code, ça donne :
-tirer un couple question/réponse
-stocker la bonne réponse
-ajouter d'autres propositions et mélanger
-demander à l'utilisateur de répondre
-comparer la réponse à la valeur stockée et éventuellement incrémenter le score
Il faut répéter cet opération pour toute les questions posées.

Code : Tout sélectionner

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">

    <title> project History Guess'R</title>
</head>

<body>

<h1>TEST 2 </h1>
<h2 id="avancement"></h2>
<p id="demo"></p> 
<div id="rep"> 
    <!--<p id="bonnerep"></p>
    <p id="prop2"></p>
    <p id="prop1"></p>
    -->
</div> 
<script>
   
    var bonneRep = "";

    function autre(r,l) { 
        var  p1 = Math.floor( l*Math.random() )
        while(p1 == r) {
            p1 = Math.floor(l*Math.random() )
        }
        var p2 = Math.floor(l*Math.random() )
        while(p2 == r || p2 == p1) {
            p2 = Math.floor(l*Math.random() )
        }
        return [p1,p2]
    } ;
    function shuffle(texte) { 
        var j, x, i;
        for (i = texte.length; i; i--) {
            j = Math.floor(Math.random() * i);
            x = texte[i - 1];
            texte[i - 1] = texte[j];
            texte[j] = x;
            bonneRep = texte[j];
        }
        return texte
    }
    var nbQuestion = 0;
    var clik = function() {
        var form = document.getElementById("form");
        form.innerHTML ="";
        if(nbQuestion == 5){
            score();
            return false; 
        }
        nbQuestion++;

        var avancement = document.getElementById('avancement').innerHTML = "Question " + nbQuestion + "/5"; 
        var d = ["1945","1946","1947","1948","1949","1950","1955","1957","1958","1959","1961","1962","1966","1967","1968","1969","1973","1974","1975","1976","1979","1980","1981","1986","1987","1988","1989","1991","1992","1993","1995","2001","2002","2003","2007","2008","2011"]
        var l = d.length ;
        var e = ["Création de l’ONU", "Démission de DeGaulle et naissance de la IVème République", "Doctrine Truman et plan Marschall", "Naissance de l’Etat d’Israel et première guerre israélo-arabe", "Proclamation de la République Populaire de Chine", "Début de la Guerre de Corée", "Conférence de Bandung", "Mise en place de la Communauté Economique Européenne", "DeGaulle président du Conseil et naissance de la Vème République", "Grand Bon en Avant et Grande Famine en Chine", "Putsch des généraux en Alger", "Crise de Cuba", "Début de la Révolution Culturelle en Chine", "Guerre des Six Jours", "Mouvements, grèves et manifestations en France", "Georges Pompidou président", "Guerre du Kippour et premier choc pétrolier", "Valéry Giscard d’Estaing président", "Début de la Guerre Civile au Liban", "Mort de Mao", "Révolution Islamique en Iran", "Début de la Guerre Iran/Irak", "François Mitterand président", "Première cohabitation en France avec Jacques Chirac comme Premier Ministre", "Première Intifada", "François Mitterand réélu Président de la République", "Chute du Mur de Berlin", "Début de la Guerre du Golfe", "Référendum sur le traité de Maastricht", "Accords de Washington entre israéliens et palestiniens", "Jacques Chirac élu Président de la République", "Attentats du World Trade Center", "Jacques Chirac réélu Président de la République", "Intervention américaine en Irak", "Nicolas Sarkozy élu Président de la République", "Barack Obama élu Président des Etats-Unis", "Mort d’Oussama Ben-Laden"]
        var r = Math.floor( l*Math.random() ) ;
        var p1p2 = autre(r,l) ;
        var p1 = p1p2[0] ;
        var p2 = p1p2[1] ;
        var repint = shuffle([ e[r], e[p1], e[p2] ]) ;

        var texte ="";

        for (var i = 0; i < repint.length ; i++) {

            texte += "<label>" + repint[i] + "</label><input onclick='onClickPerso(this.value)' name='nom' value='"+repint[i]+"' type='radio' /><br>"; 
        }
        document.getElementById("rep").innerHTML = texte ; 
        document.getElementById("demo").innerHTML = d[r] ; 
    } ;
    
    var scoreTotal = 0; 

    var valider = function (val)
    {
        if(bonneRep == val){
            scoreTotal++; 
        }
        return scoreTotal
    };

    var onClickPerso = function (val) { 
        valider(val);
        clik();
    };

    var score = function () {
        var chpScore = document.getElementById("score");
        chpScore.innerHTML = scoreTotal + "/" + nbQuestion; 

        var questionnaire = document.getElementById('rep');
        questionnaire.innerHTML = ""; 

        var v = document.getElementById('demo');
        v.innerHTML = ""; 
    };
</script>

<form   method="post" action="" name="f">

    <fieldset><legend>Générateur de dates aléatoire</legend>

        <div id="result" style="background-color:#fcfcfc;">Résultat: <i id="score"></i> </div>
        <div id="form" class="centrer"><input type="button" value="Commencer le QCM" onclick="clik()"></div>
    </fieldset>
</form>
</body>
</html>

Avatar du membre
Frosty
Messages : 123
Enregistré le : 20 juil. 2017, 13:23
Localisation : Grenoble

Re: Score à un questionnaire ?

Message par Frosty » 20 juil. 2017, 17:36

Bonjour,

Là tel quel, quelqu'un qui sait faire "afficher le code source" aura directement accès à toutes les bonnes réponses...
Ne vaudrait-il pas mieux pour ce cas particulier de coder la vérification des réponses côté serveur (PHP, Node.js...) ?

Si ce n'est pas gênant et que tu souhaites tout faire côté client en JS, où est-ce que ça coinçe exactement ?
je n'arrive pas avoir un score correct à la fin du questionnaire
Peux tu préciser ? peut-être avec un exemple ?

Pour info j'ai créé un petit jsfiddle qui permet de se remettre en situation facilement.

Enfin peut être que depuis le temps tu as résolu le problème tout seul, dans ce cas n'hésites pas à partager ici la façon dont tu l'as résolu

Répondre