Inrichten van een Quiz

Status
Niet open voor verdere reacties.

vistavision

Gebruiker
Lid geworden
7 mei 2014
Berichten
18
Hallo allemaal,

Ik loop al een hele tijd te stoeien met een probleem en ik hoop echt dat jullie mij verder kunnen helpen. Ik ben een beginner in PHP en MySQL en ik weet niet precies hoe ik het volgende aan moet pakken. Als iemand me kan vertellen hoe ik hetgeen ik wil het beste in kan richten, zou ik daar heel erg mee geholpen zijn. Het gaat om het volgende:

Ik wil graag een test maken waarmee ik bezoekers via een test/quiz een keuze voor een wasmachine wil laten maken. Het formulier bestaat uit radiobuttons, zoals dit:

HTML:
<form action="resultaat.php" method="post">

<h2>De algemene levensduur van de wasmachine moet zijn:</h2>
	<ul class="vraaggroep">
		<li><label for="normaal"><input type="radio" id="normaal" name="vraag1" value="Normaal">Normaal</label></li>
		<li><label for="goed"><input type="radio" id="goed" name="vraag1" value="Goed">Goed</label></li>
		<li><label for="zeergoed"><input type="radio" id="zeergoed" name="vraag1" value="Zeer Goed">Zeer 

Goed</label></li>
	</ul>



<h2>Hoe belangrijk vindt u een energiezuinige wasmachine?</h2>
	<ul class="vraaggroep">
		<li><label for="onbelangrijk"><input type="radio" id="onbelangrijk" name="vraag2" 

value="Onbelangrijk">Onbelangrijk</label></li>
		<li><label for="belangrijk"><input type="radio" id="belangrijk" name="vraag2" 

value="Belangrijk">Belangrijk</label></li>
		<li><label for="zeerbelangrijk"><input type="radio" id="zeerbelangrijk" name="vraag2" value="Zeer 

belangrijk">Zeer belangrijk</label></li>
	</ul>

<input id="verzenden" type="submit" value="Verzenden">
</form>


Nu heb ik een lijst met 300 wasmachines met specificaties die ik aan de hand van deze vragen wil filteren. Aangezien sommige vragen gaan over 2 specificaties, wil ik graag punten geven per keuze, bijvoorbeeld:

energiezuinig normaal | energiezuinig goed | energiezuinig zeer goed |
wasmachine 1 2 punten | 3 punten | 3 punten
wasmachine 2 2 punten | 1 punten | 7 punten
wasmachine 3 3 punten | 5 punten | 0 punten
wasmachine 4 1 punten | 2 punten | 0 punten

Uiteindelijk moet de wasmachine met de meeste punten nummer 1 worden. Hoe kan ik dit het beste inrichten? Moet ik in de database per keuze een kolom aanmaken? En dan vervolgens via php bij ieder antwoord:

PHP:
if ($_POST['vraag1'] == "antwoord1") {
$data = mysql_query("SELECT Col1 FROM test") or die(mysql_error());
}

Plaatsen? Of kan het beter? Anders krijg ik ongeveer 60 if-statements.

Heeft iemand een advies hoe ik dit het beste in kan richten? Alvast ontzettend bedankt voor alle hulp!

Groeten,
Mark
 
Eventjes grof en globaal:

Code:
for ($i=1; $i<60; $i++){
     if ($_POST['vraag'.$i] == "antwoord".$i)  {
          // Voer een actie uit.
     }
}

Een andere optie is om de vraag en het antwoord een class te geven en dan met jquery aan de slag te gaan.
 
Laatst bewerkt:
Beste gast0158,

Super bedankt voor het snelle antwoord! Dit is inderdaad al een stuk beter. Bedoel je dat het dan zoiets moet worden:

PHP:
for ($i=1; $i<60; $i++){
     if ($_POST['vraag'.$i] == "antwoord".$i)  {
          $data = mysql_query("SELECT Col".$i."FROM test") or die(mysql_error());
     }
}

Alleen er zijn 20 vragen en 60 antwoorden totaal (per vraag 3 mogelijkheden) en de MySQL kolommen beginnen vanaf kolom 10 t/m 70, dus kan het dan nog zo verkort opgeschreven worden?

Verder, is dit, zoals ik het nu bedenk, inderdaad de meest slimme oplossing of kan het een stuk beter/efficiënter? En als ik vervolgens alle gekozen kolommen tijdelijk op wil slaan, zodat ik ze bij elkaar op kan tellen en er een totaalscore uitkomt, moet ik dat met een sessie doen?

Alvast bedankt voor het meedenken!! Echt superblij dat jullie me verder kunnen helpen!!

Groeten,
Mark
 
je kunt er uiteraard nog een lusje tegenaan gooien :)

Code:
for ($i=1; $i<60; $i++){
    for($j=1; $j<=3; $j++)   {
        if ($_POST['vraag'.$i] == "antwoord".$i.'_'.$j)  {
             $data = mysql_query("SELECT Col".$i."FROM test") or die(mysql_error());
        }
     }
}

Ik denk dat je zelf ook eventjes logisch mee moet denken aangezien ik niet weet hoe je database in elkaar zit.
Het betekend natuurlijk ook dat je de ID's in de HTML-code op orde moet hebben maar ook die kun je middels een lus inlezen en op de pagina zetten.
 
Hallo gast0158,

Dit ziet er zeker goed uit! Hier ga ik verder mee stoeien! Nog wel even 1 vraagje op voorhand. Via deze weg heb ik straks met:

PHP:
 $data = mysql_query("SELECT Col".$i."FROM test") or die(mysql_error());

Verschillende kolommen geselecteerd. Alleen hoe krijg ik deze opgeteld, dus bijvoorbeeld:

PHP:
 $totaalscore = mysql_query("SELECT (Col2+Col4+Col12)FROM test") or die(mysql_error());
echo $totaalscore;

Want ik heb de optelsom nodig van alle geselecteerde kolommen die met de lus geselecteerd worden? Als ik dit weet, kom ik weer een heel stuk verder!

Alvast super bedankt voor de hulp!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan