controle op formulier?
$_POST['vraag1]; // stel nu dat antwoord2 juist is
Code (php)
Gewijzigd op 14/06/2012 19:16:15 door Andy V
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
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;
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)
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
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>';
?>
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>';
?>
WHERE 1 werkt hetzelfde als geen WHERE clause
Waarom de vragen en antwoorden niet ophalen in één query?
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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/>';
}
?>
$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
De enquete werkt nu helemaal goed en ik heb er weer wat van geleerd :)