• User

    metti queste due variabili prima del ciclo while e non all'interno

    [PHP]$domA = $_GET['domandaA'];
    $domB = $_GET['domandaB'];[/PHP]


  • User Attivo

    Grazie per l'aiuto ldgweb,

    ho spostato le variabili prima del ciclo, ma ottengo i risultati sempre duplicati 😞


  • User

    Intanto: cosa intendi con "i dati vengono duplicati"?

    • Intendi dire che vengono duplicati nel database? Se sì dovresti pubblicare il codice dove inserisci le risposte nel database.

    E poi spiegami una cosa: Ci sono due domande con la stessa risposta esatta??

    Dovresti essere più preciso in modo che chi può ti possa aiutare.


  • User Attivo

    Forse mi sono spiegato male, in realtà non sono risultati duplicati, il problema è che mi stampa a video sia i risultati esatti che quelli errati, risposto il codice con una modifica per essere più chiaro

    [PHP]
    <?php

    mysql_select_db($database_conn, $conn);
    $rs_quiz = mysql_query("SELECT * FROM quiz") or die(mysql_error());
    $domA = $_GET['domandaA'];
    $domB = $_GET['domandaB'];

    while ($row_rs_quiz = mysql_fetch_array($rs_quiz))
    {
    $risultato = $row_rs_quiz['risultato'];

    $domanda = $row_rs_quiz['domanda'];

    if($domA == $risultato)
    { echo
    ("Domanda 1) <br />".$domanda."<br />risposta esatta è : <font style="color:#0C6">".$risultato."</font> - la tua risposta è: ". "<font style="color:#0C6"/>".$domA ."</font><br />");
    }
    else
    { echo ("La tua risposta è sbagliata) <br /> ".$domanda."<br />risposta esatta è : <font style="color:#0C6">".$risultato."</font> - la tua risposta è: ". "<font style="color:#f00"/>".$domA ."</font>");
    }
    echo ("<br />");
    }

    {

    if($domB == $risultato)
    { echo 
    ("Domanda 2) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domB ."</font>");
    	}
    
    else 
    { echo ("La tua risposta è sbagliata) <br /> ".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#f00\"/>".$domB ."</font>");}
    echo ("<br />");	
    	}
    ?>
    

    [/PHP]

    Se nel test rispondo alle due domande esattamente mi stampa questo:

    Domanda 1)
    Quali sono le dimensioni esatte della carta A4?
    risposta esatta è : 297x210mm - la tua risposta è: 297x210mm

    La tua risposta è sbagliata //questa non dovrebbe uscire
    Qual e' il software per l'impaginazione?
    risposta esatta è : indesign - la tua risposta è: 297x210mm

    Domanda 2)
    Qual e' il software per l'impaginazione?
    risposta esatta è : indesign - la tua risposta è: indesign


  • User Attivo

    Ho fatto una prova ad eliminare gli else :

    [PHP]
    while ($row_rs_quiz = mysql_fetch_array($rs_quiz))
    {

    $risultato = $row_rs_quiz['risultato'];
    $domanda = $row_rs_quiz['domanda'];

    if($domA == $risultato)
    { 
     echo ("Domanda 1) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domA ."</font><br /><br />");	
    }
    
      
    if($domB == $risultato)
    {
      echo ("Domanda 2) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domB ."</font><br /><br />");
    }
    

    }
    [/PHP]

    Se rispondo esattamente alle due domande i risultati sono giusti, invece se rispondo con le risposte sbagliate non mi stampa nulla, dunque sembra funzionante...
    il problema sta negli else :mmm:


  • User

    Prova a mettere un contatore. Se rispondi solo una volta alle due domande dovresti avere 1. Nel caso proposto da te dovrebbe venir fuori 1. Ma è impossibile essendo entrato sia nella IF, sia nella ELSE.
    Prova a vedere cosa caccia fuori 🙂

    [questo messaggio l'avevo scritto prima di leggere il tuo ultimo post; mi stavo chiedendo proprio quello infatti.]


  • User Attivo

    Potresti farmi un esempio?

    Comunque ho reinserito gli else, ma se le 2 domande le rispondo esattamente
    ottengo

    Domanda 1)
    Quali sono le dimensioni esatte della carta A4?
    risposta esatta è : 297x210mm - la tua risposta è: 297x210mm

    errore domanda2
    errore domanda1

    Domanda 2)
    Qual e' il software per l'impaginazione?
    risposta esatta è : indesign - la tua risposta è: indesign

    invece se rispondo mettendo le risposte sbagliate ottengo:

    errore domanda1
    errore domanda2
    errore domanda1
    errore domanda2

    [PHP]
    if($domA == $risultato)
    {
    echo ("Domanda 1) <br />".$domanda."<br />risposta esatta è : <font style="color:#0C6">".$risultato."</font> - la tua risposta è: ". "<font style="color:#0C6"/>".$domA ."</font><br /><br />");
    }
    else {echo ("errore domanda1<br/>");}

    if($domB == $risultato)
    {
      echo ("Domanda 2) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domB ."</font><br /><br />");
    }
     	 else {echo ("errore domanda2<br/>");}
    

    }
    [/PHP]


  • User

    Un contatore?? è solo una variabile che conta quante volte viene ripetuto il ciclo. Metti un:
    [PHP]$contatore=0;[/PHP]
    prima del while. E dentro al while (prima delle if).
    [PHP]$contatore+=1;[/PHP]
    Fai Copia-Incolla.


  • User Attivo

    Ho provato così

    [PHP]
    <?php
    mysql_select_db($database_conn, $conn);
    $rs_quiz = mysql_query("SELECT * FROM quiz") or die(mysql_error());
    $domA = $_GET['domandaA'];
    $domB = $_GET['domandaB'];
    $contatore=0;

    while ($row_rs_quiz = mysql_fetch_array($rs_quiz))
    {

    $risultato = $row_rs_quiz['risultato'];
    $domanda = $row_rs_quiz['domanda'];

    $contatore+=1;  
    echo $contatore;
    
    if($domA == $risultato)
    { 
     echo ("Domanda 1) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domA ."</font><br /><br />");	
    }
    
    
    if($domB == $risultato)
    {
      echo ("Domanda 2) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">".$risultato."</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domB ."</font><br /><br />");
    }
    

    }

    ?>[/PHP]
    

    Ho tolto gli else e inserito il contatore, mi stampa 12 se metto le 2 risposte sbagliate


  • User

    A parte che lo dovresti stampare fuori dal ciclo.
    Poi, ora che ci penso, la query dovrebbe prendere solo le tuple (righe) della tabella in cui ci sono le risposte di quel dato utente. Così le prende tutte.
    Ora dovresti provare a inserire la query direttamente nel database. In quanto dovrebbe venirti fuori solo una tupla e invece te ne vengono fuori 2, come puoi vedere dal contatore oppure anche facendo in questo modo:
    [PHP]$numero_righe=mysql_num_rows($rs_quiz);
    echo "numero_righe= ".$numero_righe;[/PHP]


  • User Attivo

    Ho spostato l'echo del contatore fuori dal ciclo while e mi stampa 2
    anche con quest'ultimo esempio è lo stesso.

    A quanto pare allora il problema è nella query giusto?


  • User

    Sisi..se effettui un login prima di rispondere alle domande salva l'id dell'utente che ha risposto. E quando vai a controllare i risultati (cambiando la query) prendi solo le risposte di quell'utente.


  • User Attivo

    Non ho capito cosa intendi per login :mmm:

    La risposte esatte sono quelle inserite nel campo "risultato"

    Ti posto uno screenshot del database

    gd83.altervista.org/test.jpg

    questa è la stringa che invio dal form

    risultato.php?domandaA=297x210mm&domandaB=indesign&invia=Invia

    Oltre a domandaA e domandaB devo inviare anche l'id tramite stringa?


  • User

    l'id dell'utente ovvio. Altrimenti sul tuo sito se ci sono più persone che rispondono come fai a capire quali sono le risposte sue?? Gli uscirebbero tutte le risposte di tutti gli utenti.


  • User Attivo

    Non capisco però perché ci vuole l'id dell'utente, anche se ci sono più persone che rispondono dovrebbe funzionare lo stessp credo,

    anche perché così funziona perfettamente:

    [PHP]
    while ($row_rs_quiz = mysql_fetch_array($rs_quiz))
    {

    $risultato = $row_rs_quiz['risultato'];
    $domanda = $row_rs_quiz['domanda'];
    }

    if($domA == "297x210mm")
    { 
     echo ("Domanda 1) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">297x210mm</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domA ."</font><br /><br />");	
    }
     else { echo ("errore domanda 1");}
    
    
    if($domB == "indesign")
    {
      echo ("Domanda 2) <br />".$domanda."<br />risposta esatta è : <font style=\"color:#0C6\">indesign</font> - la tua risposta è: ". "<font style=\"color:#0C6\"/>".$domB ."</font><br /><br />");
    }
    else {echo ("errore domanda 2");
    

    }
    ?>

    [/PHP]

    solo che il risultato esatto lo vorrei prendere dal campo "risultato" del database:

    faccio un esempio:

    se inserisco una nuova domanda ed inserisco nel database questa nuova domanda:

    campo domanda: dove gioca Lavezzi?
    campo risposta1: inter
    campo risposta2: juventus
    campo risposta3: napoli
    campo risultato: napoli <-- qui ho settato il risultato esatto