- Home
- Categorie
- Coding e Sistemistica
- PHP
- Test/quiz in php
-
Grazie per l'aiuto ldgweb,
ho spostato le variabili prima del ciclo, ma ottengo i risultati sempre duplicati
-
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.
-
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]
<?phpmysql_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 è: 297x210mmLa tua risposta è sbagliata //questa non dovrebbe uscire
Qual e' il software per l'impaginazione?
risposta esatta è : indesign - la tua risposta è: 297x210mmDomanda 2)
Qual e' il software per l'impaginazione?
risposta esatta è : indesign - la tua risposta è: indesign
-
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
-
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.]
-
Potresti farmi un esempio?
Comunque ho reinserito gli else, ma se le 2 domande le rispondo esattamente
ottengoDomanda 1)
Quali sono le dimensioni esatte della carta A4?
risposta esatta è : 297x210mm - la tua risposta è: 297x210mmerrore domanda2
errore domanda1Domanda 2)
Qual e' il software per l'impaginazione?
risposta esatta è : indesign - la tua risposta è: indesigninvece 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]
-
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.
-
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
-
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]
-
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?
-
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.
-
Non ho capito cosa intendi per login
La risposte esatte sono quelle inserite nel campo "risultato"
Ti posto uno screenshot del database
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?
-
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.
-
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