controle op formulier?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Andy V

Andy V

14/06/2012 19:05:29
Quote Anchor link
om te controleren op antwoorden kan je bijvoorbeeld zo:

$_POST['vraag1]; // stel nu dat antwoord2 juist is
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
<?php

switch ($vraag1) {

   case
"antwoord1":
         //hieronder zet je phpcode, queries of een echo wathever

         echo "Fout";
         //einde phpcode.
         break; //vergeet de break; niet. Herhaal voor elk antwoord.

   case "antwoord2":
         echo "Juist";
         break;
   case
"antwoord3":
         echo "Fout";
         break;
}

?>
Gewijzigd op 14/06/2012 19:16:15 door Andy V
 
PHP hulp

PHP hulp

27/12/2024 22:49:16
 
- SanThe -

- SanThe -

14/06/2012 19:26:21
Quote Anchor link
Ik ben even aan het rommelen geweest.
Het resultaat staat op http://www.test.santhe.nl/inge_v.php
PM mij even als het je wat lijkt.
 
- SanThe -

- SanThe -

16/06/2012 15:58:24
Quote Anchor link
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
-- Tabel structuur voor tabel `vragen`

CREATE TABLE `vragen` (
  `id` int(11) NOT NULL auto_increment,
  `vraag` varchar(250) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=InnoDB AUTO_INCREMENT=1 ;


-- Tabel structuur voor tabel `antwoorden`

CREATE TABLE `antwoorden` (
  `id` int(11) NOT NULL auto_increment,
  `vraag_id` int(11) NOT NULL default '0',
  `antwoord` varchar(250) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `vraag_id` (`vraag_id`)
) TYPE=InnoDB AUTO_INCREMENT=1 ;

-- Beperkingen voor tabel `antwoorden`
 
ALTER TABLE `antwoorden`
  ADD CONSTRAINT `antwoorden_ibfk_1` FOREIGN KEY (`vraag_id`) REFERENCES `vragen` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;


-- Tabel structuur voor tabel `resultaten`

CREATE TABLE `resultaten` (
  `id` int(11) NOT NULL auto_increment,
  `vraag_id` int(11) NOT NULL default '0',
  `antwoord_id` int(11) NOT NULL default '0',
  `user_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `vraag_id` (`vraag_id`),
  KEY `antwoord_id` (`antwoord_id`),
  KEY `user_id` (`user_id`)
) TYPE=InnoDB AUTO_INCREMENT=1 ;

-- Beperkingen voor tabel `resultaten`

ALTER TABLE `resultaten`
  ADD CONSTRAINT `resultaten_ibfk_2` FOREIGN KEY (`antwoord_id`) REFERENCES `antwoorden` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `resultaten_ibfk_1` FOREIGN KEY (`vraag_id`) REFERENCES `vragen` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;


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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// Databasegegevens
define('HOST', 'localhost');
define('USER', '');
define('PASS', '');
define('DB', 'inge_v');

// LET OP:
// Er zit nog géén nette foutafhandeling in dit script

// Database verbinding

mysql_connect(HOST, USER, PASS);
mysql_select_db(DB);

// Dit is de veldnaam van de radio input
define('RADIONAME', 'Vraag');

// Kijken of er gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // Aantal vragen in de database tellen
    $result = mysql_query(    "    SELECT    COUNT(id) as aantal
                                FROM    vragen
                                WHERE    1
                            "
);
    $row = mysql_fetch_assoc($result);
    // Zijn er evenveel vragen als geposte antwoorden
    if($row['aantal'] == count($_POST))
    {

        // Alle vragen zijn ingevuld
        ############################################
        // Hier  wordt  een  fake  user _id  gemaakt
        // Je kunt hier dus een echte user  koppelen
        // aan de gegeven antwoorden als je dat wilt

        $user_id = rand(10, 1000);
        ############################################
        foreach($_POST as $vraag => $antwoord)
        {

            // Pak alleen het getal uit de input
            $vraag = strval(substr($vraag, strlen(RADIONAME)));
            // De antwoorden in de database zetten
            $result = mysql_query(    "    INSERT INTO resultaten
                                        (    vraag_id,
                                            antwoord_id,
                                            user_id
                                        )
                                        VALUES
                                        (    '"
.(int)$vraag."',
                                            '"
.(int)$antwoord."',
                                            '"
.(int)$user_id."'
                                        )
                                    "
);
        }

        // Klaar en een lelijke exit() omdat dit slechts een testscript is
        exit('Bedankt voor het invullen');
    }

    else
    {
        // Er is gepost maar niet volledig
        echo 'U heeft niet alle vragen beantwoord.<br/><br/>';
    }
}


// Alle vragen uit de database ophalen
$vragen = mysql_query(    "    SELECT    id, vraag
                            FROM    vragen
                            WHERE    1
                            ORDER BY id
                        "
);
// Start van het formulier
echo '<form action="" method="post">';
while($vraag = mysql_fetch_assoc($vragen))
{

    echo 'Vraag '.$vraag['id'].': '.$vraag['vraag'].'?<br/>';
    // Alle bij de vraag behorende antwoorden ophalen
    $antwoorden = mysql_query(    "    SELECT    id, antwoord
                                    FROM    antwoorden
                                    WHERE    vraag_id = '"
.$vraag['id']."'
                                    ORDER BY id
                                "
);
    while($antwoord = mysql_fetch_assoc($antwoorden))
    {

        // Indien er al een radio is aangeklikt dan geven we die weer dezelfde status
        $selected = (isset($_POST[RADIONAME.$vraag['id']]) and $_POST[RADIONAME.$vraag['id']] == $antwoord['id']) ? ' checked ' : '';
        echo '<input type="radio" value="'.$antwoord['id'].'" name="'.RADIONAME.$vraag['id'].'" '.$selected.'/> '.$antwoord['antwoord'].'<br/>';
    }

    echo '<br/>';
}

// Submitknop zonder name=".."
// Anders werkt bovenstaande count($_POST) niet correct

echo '<input type="submit" value="Verstuur"/>';
// Einde formulier
echo '</form>';
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/06/2012 18:24:40
Quote Anchor link
Nice job SanThe, een paar kleine opmerkingen:
WHERE 1 werkt hetzelfde als geen WHERE clause
Waarom de vragen en antwoorden niet ophalen in één query?
 
- SanThe -

- SanThe -

16/06/2012 18:29:03
Quote Anchor link
Ger van Steenderen op 16/06/2012 18:24:40:
WHERE 1 werkt hetzelfde als geen WHERE clause


Ik vind WHERE 1 overzichtelijker voor mijzelf.

Ger van Steenderen op 16/06/2012 18:24:40:
Waarom de vragen en antwoorden niet ophalen in één query?


Ik ben niet zo'n held met dat soort dingen. Ik zou in dit geval niet eens weten hoe dat zou moeten.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/06/2012 18:57:08
Quote Anchor link
Quite simple:
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
<?php
$enquete
= mysql_query(
    "SELECT v.id vid, v.vraag,
        a.id aid, a.antwoord
    FROM vragen v
    JOIN antwoorden a ON v.id = a.id"
);
$pointer = 0;
while ($row = mysql_fetch_assoc($enquete)) {
    if ($pointer != $row['vid']) {
    //start een nieuwe vraag
        echo '<br/>Vraag: ' . $row['vid'] . ': '. $row['vraag']. '?<br/>';
        $pointer = $row['vid'];
    }

    $selected = (isset($_POST[RADIONAME.$row['vid']]) and $_POST[RADIONAME.$row['vid']] == $row['aid']) ? ' checked ' : '';
        echo '<input type="radio" value="'.$row['aid'].'" name="'.RADIONAME.$row['vid'].'" '.$selected.'/> '.$row['antwoord'].'<br/>';
}

?>
Gewijzigd op 16/06/2012 19:02:31 door Ger van Steenderen
 
Inge V

Inge V

18/06/2012 09:32:47
Quote Anchor link
SanThe, heel erg bedankt voor je hulp^^
De enquete werkt nu helemaal goed en ik heb er weer wat van geleerd :)
 

Pagina: « vorige 1 2



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.