15. august 2004 - 17:13Der 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)
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 :)
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!
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.
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.