Frontcontroller quiz systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Rens Smit

Rens Smit

28/03/2015 13:17:39
Quote Anchor link
Ik ben sinds 7-8 weken bezig met php en dan vooral met het frontcontroller systeem. Het doel van de site is voor de gebruiker zijn ideale match te genereren door minimum 4 criteria (filters/vragen) op te geven. Deze ideale match wordt uitgelezen uit de database.

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.

Afbeelding

Alvast bedankt, als dit geen beginnende PHP meer is, sorry voor het foute topic ^^
 
PHP hulp

PHP hulp

20/04/2024 15:46:23
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/03/2015 14:31:14
Quote Anchor link
Precies voor iedere pagina een controller. Je schrijft dat je werkt met een frontcontroller systeem. Dit is nog een erg breed begrip maar ik zou naast je Controller dan ook de View en het Model willen benoemen.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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');                
    }

}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.