• User Attivo

    Tabella per punteggio

    Ciao! Ho fatto una serie di domande con risposte multiple, ora vorrei fare una tabella punteggio per ogni utente.
    Sapete darmi qualche dritta per favore?
    Grazie! :smile5:


  • User Attivo

    Ho fatto questo codice ma mi funziona parzialmente, mi sbaglia i punteggi, dove sbaglio? 😞

    [PHP]<?php

    $frase1=$_POST['R1'];
    $frase2=$_POST['R2'];
    $crisultato = $_POST['R1'] + $_POST['R2'];

    if($frase1 == '0') {
    echo 'Risposta 1 errata! RIPROVA<br>';
    } else {
    $crisultato = '1';
    echo "Risposta 1 esatta!<br>";
    }

    if($frase2 == '0') {
    echo 'Risposta 2 errata! RIPROVA<br>';
    } else {
    $crisultato = $crisultato + 1;
    echo "Risposta 2 esatta!<br>";
    }

    switch($crisultato) {
    case '1':
    echo "Hai totalizzato 1 punto";
    break;
    case '2':
    echo "Hai totalizzato 2 punti";
    break;
    }

    ?> [/PHP]
    Grazie! 🙂


  • User Attivo

    Prova in questo modo:

    [php]
    $frase1=$_POST['R1'];
    $frase2=$_POST['R2'];
    $crisultato = 0;

    if($frase1 == '0') {
    echo "Risposta 1 errata! RIPROVA<br>";
    } else {
    $crisultato++;
    echo "Risposta 1 esatta!<br>";
    }

    if($frase2 == '0') {
    echo "Risposta 2 errata! RIPROVA<br>";
    } else {
    $crisultato++;
    echo "Risposta 2 esatta!<br>";
    }

    $tot = ($crisultato == 1) ? "$crisultato punto" : "$crisultato punti";
    echo "Hai totalizzato $tot";
    [/php]

    Ciao!


  • User Attivo

    Ti ringrazio moltissimo Sups 😉
    Stò cercando di capirlo...ho commentato quello che ho capito e quello che non ho capito...:?

    [PHP]<?php
    $frase1=$_POST['R1']; // variabile prima domanda
    $frase2=$_POST['R2']; // variabile seconda domanda
    $frase3=$_POST['R3']; // variabile terza domanda
    $risultato = 0; // variabile del risultato
    if($frase1 == '0') { // se la variabile della prima domanda è uguale a 0
    echo "Risposta 1 errata! RIPROVA<br>"; // stampa Risposta 1 errata! RIPROVA
    } else { // altrimenti
    $risultato++; // variabile del risultato incrementato di 1 punto
    echo "Risposta 1 esatta!<br>"; // stampa Risposta 1 esatta!
    }
    if($frase2 == '0') {
    echo "Risposta 2 errata! RIPROVA<br>";
    } else {
    $risultato++;
    echo "Risposta 2 esatta!<br>";
    }
    if($frase3 == '0') {
    echo "Risposta 3 errata! RIPROVA<br>";
    } else {
    $risultato++;
    echo "Risposta 3 esatta!<br>";
    }
    $tot = ($risultato == 1) ? "$risultato punto" : "$risultato punti"; // me la puoi leggere/spiegare questa per favore?
    echo "Hai totalizzato $tot";

    ?> [/PHP]

    Grazie!!!:)


  • User Attivo

    Il " ? : " si chiama operatore ternario e funziona iun questo modo:

    espressione ? espressione_v : espressione_f

    Se **espressione **è vera viene eseguita espressione_v, se è falsa viene eseguita espressione_f.

    In questo caso se il risultato è uguale a uno la variabile tot è uguale a "1 punto", se è diversa da uno, come ad esempio 0, 2, 3, ... tot diventa "0 punti", "2 punti", "3 punti", ...

    In altri termini è una semplificazione di questo IF:

    [php]
    if($risultato == 1)
    $tot = "$risultato punto";
    else
    $tot = "$risultato punti";
    [/php]


  • User Attivo

    Grazie Sups, ora me lo vado anche a leggere nel libro che ho comprato...

    Poi magari ti chiedo un'altra cosetta, prima voglio provarci da solo 🙂

    Grassssie!!! 😉


  • User Attivo

    Ciao! Porto sù l'argomento 🙂
    Mi sono accorto che quando non seleziono una risposta il risultato è che mi dà "Hai risposto con successo" :mmm:
    Come fare? :crying:
    Grazie!


  • User Attivo

    Servirebbe una parte del codice html che utilizzi per comporre il form con le domande, forse il problema è in quel punto.


  • User Attivo

    Grazie Sups
    Il codice html è questo

    [HTML]<form action="risultato.php" method="post">
    <p><b>Qual è? </b></p>
    <input type="radio" name="R1" value="0">a</input><br>
    <input type="radio" name="R1" value="1">b</input><br>
    <input type="radio" name="R1" value="0">c</input><br>
    <input type="radio" name="R1" value="0">d</input><br><br>

    <form action="controllo1.php" method="post">
    <p><b>La valutazione deve durare?</b></p>
    <input type="radio" name="R2" value="0">5 secondi</input><br>
    <input type="radio" name="R2" value="1">10 secondi</input><br>
    <input type="radio" name="R2" value="0">30 secondi</input><br>
    <input type="radio" name="R2" value="0">40 secondi</input><br><br>

    <form action="controllo1.php" method="post">
    <p><b>Come mi chiamo?</b></p>
    <input type="radio" name="R3" value="0">Mario</input><br>
    <input type="radio" name="R3" value="1">Fabrizio</input><br>
    <input type="radio" name="R3" value="0">Aldo</input><br>
    <input type="radio" name="R3" value="0">Michele</input><br><br>
    <input type="submit" value="Rispondi" />
    </form>

    [/HTML]
    Grazie!


  • User Attivo

    Ciao,
    quando non rispondi, in questo controllo:
    [php]
    if($frase1 == '0') { // se la variabile della prima domanda è uguale a 0
    echo "Risposta 1 errata! RIPROVA<br>"; // stampa Risposta 1 errata! RIPROVA
    } else { // altrimenti
    $risultato++; // variabile del risultato incrementato di 1 punto
    echo "Risposta 1 esatta!<br>"; // stampa Risposta 1 esatta!
    }
    [/php]
    e allo stesso modo gli altri succssivi, la condizione ($frase1 == '0') è sempre falsa poichè $frase1=""

    Possibile soluzione:
    [php]
    if($frase1 == '1') {
    $risultato++;
    echo "Risposta 1 esatta!<br>";
    } else {
    echo "Risposta 1 errata! RIPROVA<br>";
    }
    [/php]

    Osservando il tutto, quello che mi chiedo è:
    che senso ha un quiz di questo tipo in cui le risposte sono scritte già insieme alle domande?
    A chiunque è sufficiente visualizzare il codice html per sapere quali sono le risposte corrette...

    Alessandro


  • User Attivo

    Avevo già provato ma in quel modo, cioè non selezionandola mi dà risposta errata :gtsad:

    Cavolo non ci avevo mica pensato per la visualizzazione del codice html...ci sono soluzioni?

    Grasssssie!


  • User Attivo

    Se fai i controlli con un IF hai solo due possibili risultati: GIUSTA o ERRATA.
    Se non rispondendo vuoi che venga visualizzato un diverso messaggio, devi aggiungere un controllo.

    Per quanto riguarda il secondo problema, i risultati devono esser noti solo al "server" e non visibili ad altri.

    Possibile soluzione:

    Il form è unico (non tre) e viene inviato a risultato.php(?):

    
    <form action="risultato.php" method="post">
    <p><b>Qual è? </b></p>
    <input type="radio" name="R1" value="0">a</input><br>
    <input type="radio" name="R1" value="1">b</input><br>
    <input type="radio" name="R1" value="2">c</input><br>
    <input type="radio" name="R1" value="3">d</input><br><br>
     
    <p><b>La valutazione deve durare?</b></p>
    <input type="radio" name="R2" value="0">5 secondi</input><br>
    <input type="radio" name="R2" value="1">10 secondi</input><br>
    <input type="radio" name="R2" value="2">30 secondi</input><br>
    <input type="radio" name="R2" value="3">40 secondi</input><br><br>
     
    <p><b>Come mi chiamo?</b></p>
    <input type="radio" name="R3" value="3">Mario</input><br>
    <input type="radio" name="R3" value="2">Fabrizio</input><br>
    <input type="radio" name="R3" value="1">Aldo</input><br>
    <input type="radio" name="R3" value="0">Michele</input><br><br>
    <input type="submit" value="Rispondi" />
    </form>
    
    

    [php]
    $risposta_corretta_domanda1=1;
    $risposta_corretta_domanda2=1;
    $risposta_corretta_domanda3=2;

    $frase1=$_POST['R1']; // variabile prima domanda
    $frase2=$_POST['R2']; // variabile seconda domanda
    $frase3=$_POST['R3']; // variabile terza domanda
    $risultato = 0; // variabile del risultato

    if($frase1 == $risposta_corretta_domanda1) {
    $risultato++;
    echo "Risposta 1 esatta!<br>";
    } else {
    if ($frase1 ="") echo "Risposta 1: NON HAI RISPOSTO<br>";
    else echo "Risposta 1 errata! RIPROVA<br>";
    }

    if($frase2 == $risposta_corretta_domanda2) {
    $risultato++;
    echo "Risposta 2 esatta!<br>";
    } else {
    if ($frase2 ="") echo "Risposta 2: NON HAI RISPOSTO<br>";
    else echo "Risposta 2 errata! RIPROVA<br>";
    }

    if($frase3 == $risposta_corretta_domanda3) {
    $risultato++;
    echo "Risposta 3 esatta!<br>";
    } else {
    if ($frase3 ="") echo "Risposta 3: NON HAI RISPOSTO<br>";
    else echo "Risposta 3 errata! RIPROVA<br>";
    }

    $tot = ($risultato == 1) ? "$risultato punto" : "$risultato punti"; // me la puoi leggere/spiegare questa per favore?
    echo "Hai totalizzato $tot";
    ?>
    [/php]

    Questo codice non è che sia il massimo tecnicamente, anzi... andrebbe pulito un pò.
    Comunque, se non ho sbagliato con qualche copia/incolla, dovrebbe funzionare.

    Alessandro


  • User Attivo

    Ciao alessandro! Ti ringrazio, ho provato ma :bho: mi dà questo errore

    Undefined index: R3 in c:\programmi\easyphp1-8\www\php.php on line 9

    Grazie!


  • User Attivo

    Ciao,

    correggi così:
    [PHP]
    $frase1=isset($_POST['R1'])?$_POST['R1']:"";
    $frase2=isset($_POST['R2'])?$_POST['R2']:"";
    $frase3=isset($_POST['R3'])?$_POST['R3']:"";
    [/PHP]

    Alessandro


  • User Attivo

    Ciao 😢 Nulla neanche con la correzione, cioè con la variabile senza risposta definita :bho:
    [php]<?php
    $risposta_corretta_domanda1=1;
    $risposta_corretta_domanda2=1;
    $risposta_corretta_domanda3=2;

    $frase1=isset($_POST['R1'])?$_POST['R1']:"";
    $frase2=isset($_POST['R2'])?$_POST['R2']:"";
    $frase3=isset($_POST['R3'])?$_POST['R3']:"";
    $risultato = 0;

    if($frase1 == $risposta_corretta_domanda1) {
    $risultato++;
    echo "Risposta 1 esatta!<br>";
    } else {
    if ($frase1 ="") echo "Risposta 1: NON HAI RISPOSTO<br>";
    else echo "Risposta 1 errata! RIPROVA<br>";
    }

    if($frase2 == $risposta_corretta_domanda2) {
    $risultato++;
    echo "Risposta 2 esatta!<br>";
    } else {
    if ($frase2 ="") echo "Risposta 2: NON HAI RISPOSTO<br>";
    else echo "Risposta 2 errata! RIPROVA<br>";
    }

    if($frase3 == $risposta_corretta_domanda3) {
    $risultato++;
    echo "Risposta 3 esatta!<br>";
    } else {
    if ($frase3 ="") echo "Risposta 3: NON HAI RISPOSTO<br>";
    else echo "Risposta 3 errata! RIPROVA<br>";
    }

    $tot = ($risultato == 1) ? "$risultato punto" : "$risultato punti";
    echo "Hai totalizzato $tot";
    ?>
    [/php]

    Grazie!


  • User Attivo

    Errore di battitura mio...
    Correggi tutti i controlli sulla risposta non data mettendo == invece di =
    Es.

    
    if ($frase2 **== **"") echo "Risposta 2: NON HAI RISPOSTO<br>";
    
    

    Alessandro


  • User Attivo

    Grazie Ale, ora funziona, grazie per la pazienza 😉


  • User Attivo

    Prova in questo modo:

    [php]
    if($frase1 == $risposta_corretta_domanda1) {
    $risultato++;
    echo "Risposta 1 esatta!<br>";
    }
    else if($frase1 == "")
    echo "Risposta 1: NON HAI RISPOSTO<br>";
    else
    echo "Risposta 1 errata! RIPROVA<br>";
    //...
    [/php]

    In particolare **if($frase1 == "") **perchè if($frase1 = "") riassegna la variabile a valore vuoto.
    Ciao!


  • User Attivo

    Grazie anche a te Sups 😉 ma era quello che gentilmente mi ha insegnato negli ultimi messaggi Alessandro.
    Grazie!:)


  • User Attivo

    Non avevo letto sopra 😄