Avatar billede alexander_j Nybegynder
15. august 2004 - 17:13 Der er 8 kommentarer og
3 løsninger

tjekke svar i quiz

Hej jeg er ved at lave en slags quiz i PHP, hvor brugerne kan svare med fritekst input.

Min tabel består af følgende kolonner: question answer1 answer2 answer3 answer4 answer5
Hvor answer1-5 er forskellige, men alle rigtige, svarmuligheder.

Det var min ide at jeg via mySQL kunne tjekke om svaret var i nærheden af een af de 5 svarmuligheder

Noget i stil med: SELECT * FROM mytabel WHERE MATCH (answer1,answer2,answer3,answer4,answer5) AGAINST ($brugersvar IN BOOLEAN MODE)

Men det virker ikke!

Nogen ideer?
Avatar billede thedeathart Nybegynder
15. august 2004 - 17:17 #1
prøv med WHERE LIKE ('detsomskalligne)
Avatar billede arne_v Ekspert
15. august 2004 - 17:17 #2
Er det ikke bare at teste for alle 5 med OR imellem ?
Avatar billede terrak Nybegynder
15. august 2004 - 17:53 #3
SELECT * FROM `status` WHERE `answer1` OR `answer2` OR `answer3` OR `answer4` OR `answer5` = 'string'

'string' erstatter du med brugerens svar. Husk evt. også mysql_escape_string(), eksempelvis sådan her:

$answerQ = mysql_query("SELECT * FROM `status` WHERE `answer1` OR `answer2` OR `answer3` OR `answer4` OR `answer5` = '".mysql_escape_string($_POST['answer'])."'");

Hvis jeg altså har forstået dit spørgsmål rigtigt :)
Avatar billede alexander_j Nybegynder
15. august 2004 - 20:36 #4
er ikke glad for at bruge '=' da svaret jo så skal være helt eksakt - har derfor prøvet en kombination af jeres to svar:
"SELECT * FROM mintabel WHERE qid = $id AND (answer1 LIKE '%$brugersvar%' OR answer2 LIKE '%$brugersvar%' OR answer3 LIKE '%$brugersvar%' OR answer4 LIKE '%$brugersvar%' OR answer5 LIKE '%$brugersvar%')";
           
Det virker tildels :-D men savner dog at svaret også kan betegnes som rigtigt i lidt specielle tilfælde som fx
Q: Hvad hedder vores statsminister til fornavn?
A: Anders
Men hvis brugeren nu svare 'Han hedder Anders', så betegner ovenstående kode svaret for forkert

Derudover er der det problem at brugeren bare kan skrive 'j' til ja-nej spørgsmål og svaret vil betegnes som rigtigt!
Avatar billede arne_v Ekspert
15. august 2004 - 22:30 #5
Skal testene ikke vendes omvendt ?

... brugersvar LIKE '%answer1%' OR brugersvar LIKE '%answer2%' ...

[kun skitseret skal tilrettes til PHP]
Avatar billede arne_v Ekspert
15. august 2004 - 22:32 #6
Med hensyn til det sidste kan du ikke både blæse og have mel i munden.

Enten vil du matche løst eller du vil matche eksakt.

Du kan evt. løse det specifikke problem ved at sætte en minimums længde på 2 på.
Avatar billede arne_v Ekspert
15. august 2004 - 22:33 #7
og nu vil jeg ligge et svar
Avatar billede terrak Nybegynder
16. august 2004 - 07:14 #8
alexander > Hvad gør du så hvis brugeren kun indtaster "e" for eksempel? Så vil den vel acceptere det som et rigtigt svar, da "e" højest sandsynligt indgår i mindst et af de forskellige, rigtige svarmuligheder.
Avatar billede terrak Nybegynder
16. august 2004 - 07:17 #9
Ja, måske skulle jeg lære at læse først, for så ville jeg finde ud af at du allerede ved det :)

Det er helt udelukket at give brugeren nogle forkerte svarmuligheder at vælge imellem?
Avatar billede arne_v Ekspert
16. august 2004 - 08:51 #10
Du kan godt lave det til multiple choice.

Lidt 10 svar ind i databasen med et rigtig/forkert felt pg give brugeren
den 10 muligheder.
Avatar billede alexander_j Nybegynder
17. august 2004 - 17:37 #11
Jep jeg kender alt til multiple choice, men det var ikke ideen med denne quiz.

Havde håbet jeg kunne lave tjekket direkte i SQL-sætningen, men det var åbenbart ikke muligt - derfor valgte jeg en løsning i PHP:

$tjek = false;
for($i=1;$i<=5;$i=$i+1){
    if(strlen($brugersvar)>=2 AND $raekke2["answer".$i]!="" AND( stristr($raekke2["answer".$i], $brugersvar) OR stristr($brugersvar,$raekke2["answer".$i]) OR $brugersvar==$raekke2["answer".$i] ) ) $tjek = true;
}
if(stristr($brugersvar,"nej") AND stristr($brugersvar,"ja")) $tjek=false;

if($tjek==true){
    //do something
}else{
    //do something else
}

Vi deler pointene!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester