Frontcontroller quiz systeem
Hier heb ik een systeem voor uitgedacht als volgt:
Heb je soms last van een ochtendhumeur?
Elke ochtend, ik vind het irritant van mezelf (+1 Ayahuasca)
Soms, meestal na een lange nacht (+1 Mescaline)
Nooit, ik ben het zonnetje in huis ’s ochtends (+1 Opium)
Jouw perfecte eerste date?
Een boswandeling met een leuke picknick (+1 Cannabis)
Een gezellige wandeling op het strand (+1 Hasjiesj)
Opera of concert en lekker dansen (+1 Paddo)
Wat zou je het liefst willen zijn?
Een vampier (+1 Salvia)
Een mummie (+1 Passion flower)
Een zombie (+1 Peyote)
*/ Filtert de 3 antwoorden die horen bij de uitkomsten met 1 punt op basis van de vorige vragen. /*
Kies een extreme sport
Volcano Boarding (+1 Peyote)
Limbo skating (+1 Mescaline)
Train surfing (+1 Opium )
Crocodile bungee (+1 Ayahuasca)
Cliff diving (+1 Paddo)
Rope running (+1 Salvia)
Hangliding (+1 Cannabis)
Free running: Parkour (+1 Hasjiesj)
Bungee jumping (+1 Passion flower)
*/ Er blijft 1 match over met 2 punten /*
Nu is mijn vraag hoe ik dit het best in mijn Controller kan steken, hier staat al een deel online van wat het wordt:
Als ik nu na elke vraag het antwoord opsla in een session, in een array en dan na de laatste vraag 1 select query maak met de waarden uit die array want logisch gezien is elke stap dan een aparte functie, dan een functie maken bv stap 1, en dan als er gepost is... dan.. session = en dan het antwoord pushen.
maar ik heb momenteel geen idee hoe ik dit kan maken, hieronder vindt je nog mijn database structuur.
Alvast bedankt, als dit geen beginnende PHP meer is, sorry voor het foute topic ^^
De controller is het middelpunt. Nadat de 'route' uit de URL is uitgelezen wordt bepaald welke controller en welke functie er binnen de controller wordt aangeroepen. die functie noemen we ook wel een Method of Action.
Nu moeten er in het algemeen twee dingen gebeuren:
1. Data verzamelen die we nodig hebben (om de pagina te kunnen renderen)
2. de pagina renderen.
Voor stap 1 kun je het beste kiezen om vanuit de controller een Model aan te roepen. Een model is een class die communiceert met de database. Je queries komen dus in de model te staan.
Voor stap twee roep je een speciale functie aan van de controller OF een andere class die een pagina genereert.
(Hiervoor zou je ook Twig of Blade kunnen integreren.)
Voor een formulier in stappen zou ik IEDER formulier door één en dezelfde controller afhandelen. dus of de pagina nu in de GET of in de POST methode wordt aangeroepen: één en dezelfde controller. Als het ingevulde goedgekeurd is (na validatie) dan doe je een redirect naar het volgende formulier. Dit heeft namelijk als voordeel dat je dan bij formulier 2 of hoger de eerste keer in de GET methode op deze pagina belandt. Alle variabelen uit FORMULIER 1 die je voor FORMULIER 2 nodig hebt moet je inderdaad in de SESSIE opslaan tenzij de gebruikers zijn ingelogd. Als de gebruikers zijn ingelogd kun je het ook in SESSIE opslaan maar je kunt er ook voor kiezen om het in de database op te slaan. Je hebt dan immers een uniek USER_ID dat de gegevens van verschillende gebruikers uit elkaar houdt.
Toevoeging op 28/03/2015 15:05:24:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
class MyController
{
public stap1Action()
{
// trek data uit de database
$model = new QuizModel();
$questions = $model->getQuizQuestions(1);
// maak een <form>
$form = new quizForm($questions);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$form->getPost();
if($form->validate())
{
// zet wat gegevens in de sessie
$this->session->set('blabla', $form->getData())
// redirect naar stap 2.
$this->redirect('stap2');
exit;
}
}
// data verzamelen voor pagina
$data = array(
'form' => $form,
'questions' => $questions
);
$this->render('stap1.html', $data);
}
public stap2Action()
{
// trek data uit de database
$model = new QuizModel();
$questions = $model->getQuizQuestions(2);
// maak een <form>
$form = new quizForm($questions);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$form->getPost();
if($form->validate())
{
// Doe iets met de data (bijv een email sturen)
// .....
// redirect naar bedank pagina.
$this->redirect('thankyou');
exit;
}
}
// data verzamelen voor pagina
$data = array(
'form' => $form,
'questions' => $questions
);
$this->render('stap2.html', $data);
}
public thankyouAction()
{
$this->render('thankyou.html');
}
}
class MyController
{
public stap1Action()
{
// trek data uit de database
$model = new QuizModel();
$questions = $model->getQuizQuestions(1);
// maak een <form>
$form = new quizForm($questions);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$form->getPost();
if($form->validate())
{
// zet wat gegevens in de sessie
$this->session->set('blabla', $form->getData())
// redirect naar stap 2.
$this->redirect('stap2');
exit;
}
}
// data verzamelen voor pagina
$data = array(
'form' => $form,
'questions' => $questions
);
$this->render('stap1.html', $data);
}
public stap2Action()
{
// trek data uit de database
$model = new QuizModel();
$questions = $model->getQuizQuestions(2);
// maak een <form>
$form = new quizForm($questions);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$form->getPost();
if($form->validate())
{
// Doe iets met de data (bijv een email sturen)
// .....
// redirect naar bedank pagina.
$this->redirect('thankyou');
exit;
}
}
// data verzamelen voor pagina
$data = array(
'form' => $form,
'questions' => $questions
);
$this->render('stap2.html', $data);
}
public thankyouAction()
{
$this->render('thankyou.html');
}
}