Keuzelijst uit MYSQL-tabel
regel 10: $step heeft hier nog geen waarde gekregen dus kan je ook niet echoen.
regel 29 e.v.: een group by kan je in principe alleen gebruiken als er een aggregate functie in de select wordt gebruikt. Dat gebruik je niet, dus je SQL statement is in principe fout.
regel 74: $lokatie heeft hier volgens mij ook nog geen waarde gekregen, kan je dus ook niet echoen
regel 96: $_POST['lokatie'] eerst testen met isset() alvorens je het aanspreekt. Als het niet bestaat gaat je script onderuit
regel 107: het <form> dat je hier opent wordt nergens gesloten.
regel 131: een '}' in html? php tags eromheen vergeten?
Gewijzigd op 13/03/2012 12:13:18 door Erwin H
Ik had onderstaande code goed.
Iemand kon inloggen en kiezen.
Het enige wat er nog moest gebeuren dat de keuze bevestigd moest worden in een de tabel worden bijgeschreven...
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
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
<?php
session_start();
if(!isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
<table border="4" cellspacing="1" cellpadding="1" width="600" align="center" >
<tr> <td style="text-align: center" >
<?
echo 'Je bent ingelogd met volgende gebruikersnaam: ';
echo $_SESSION['myusername'];
echo "<br><br>";
echo "Per locatie zijn beperkt plaatsen beschikbaar. Hieronder zie je de locatie die nog open staan.";
echo "<br><br>";
?>
</td></tr>
<tr><td style="text-align: center" >
<?
/*************************
* zonder foutafhandeling *
**************************/
$sql = "SELECT
lokatie_id, lokatie_naam
FROM
lokaties
WHERE
lokatie_id
NOT IN
(SELECT
lokatie_id
FROM
members
GROUP BY
lokatie_id
HAVING
COUNT(lokatie_id) >=2)";
//hier connecten met de db
//Gegevens in onderstaand kader mogen aangepast worden
//+---------------------------------------------------------+
//login gegevens |
$host = "localhost";//locatie van de MySQL server |
$username = "***";//gebruikersnaam van de MySQL server |
$password = "***";//wachtwoord van de MySQL server |
$database = "rstscholingnl_";//database die aangesproken moet worden |
//+---------------------------------------------------------+
//connecteren
$lnk = mysql_connect($host,$username,$password) or die(mysql_error()); //connecteren met de server
mysql_select_db($database,$lnk) or die(mysql_error()." [".$database."]"); //selecteren van de database
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo '<select name="lokatie">';
while ($row = mysql_fetch_row($result)) {
echo '<option value="' . $row[0] . '">';
echo $row[1] . '</option>';
}
echo '</select>';
}
else {
echo 'Sorry, er zijn geen lokaties meer beschikbaar';
}
?>
<option value="Choose" selected></option><?php echo $lokatie ?><br><br>
</tr></td>
</table>
session_start();
if(!isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
<table border="4" cellspacing="1" cellpadding="1" width="600" align="center" >
<tr> <td style="text-align: center" >
<?
echo 'Je bent ingelogd met volgende gebruikersnaam: ';
echo $_SESSION['myusername'];
echo "<br><br>";
echo "Per locatie zijn beperkt plaatsen beschikbaar. Hieronder zie je de locatie die nog open staan.";
echo "<br><br>";
?>
</td></tr>
<tr><td style="text-align: center" >
<?
/*************************
* zonder foutafhandeling *
**************************/
$sql = "SELECT
lokatie_id, lokatie_naam
FROM
lokaties
WHERE
lokatie_id
NOT IN
(SELECT
lokatie_id
FROM
members
GROUP BY
lokatie_id
HAVING
COUNT(lokatie_id) >=2)";
//hier connecten met de db
//Gegevens in onderstaand kader mogen aangepast worden
//+---------------------------------------------------------+
//login gegevens |
$host = "localhost";//locatie van de MySQL server |
$username = "***";//gebruikersnaam van de MySQL server |
$password = "***";//wachtwoord van de MySQL server |
$database = "rstscholingnl_";//database die aangesproken moet worden |
//+---------------------------------------------------------+
//connecteren
$lnk = mysql_connect($host,$username,$password) or die(mysql_error()); //connecteren met de server
mysql_select_db($database,$lnk) or die(mysql_error()." [".$database."]"); //selecteren van de database
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo '<select name="lokatie">';
while ($row = mysql_fetch_row($result)) {
echo '<option value="' . $row[0] . '">';
echo $row[1] . '</option>';
}
echo '</select>';
}
else {
echo 'Sorry, er zijn geen lokaties meer beschikbaar';
}
?>
<option value="Choose" selected></option><?php echo $lokatie ?><br><br>
</tr></td>
</table>
Toevoeging op 13/03/2012 15:34:29:
Ik ben flink aan de slag gegaan en heb nu odnerstaande formulier:
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
98
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
98
<center>
<?php
session_start();
if(!isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
<?
echo 'Je bent ingelogd met volgende gebruikersnaam: ';
echo $_SESSION['myusername'];
echo "<br><br>";
echo "Per locatie zijn beperkt plaatsen beschikbaar. Hieronder zie je de locatie die nog open staan.";
echo "<br><br>";
?>
<html>
<body>
<form action="bevestig.php" method="post" ">
Lokatiekeuze:
<?
/*************************
* zonder foutafhandeling *
**************************/
$sql = "SELECT
lokatie_id, lokatie_naam
FROM
lokaties
WHERE
lokatie_id
NOT IN
(SELECT
lokatie_id
FROM
members
GROUP BY
lokatie_id
HAVING
COUNT(lokatie_id) >=2)";
//hier connecten met de db
//Gegevens in onderstaand kader mogen aangepast worden
//+---------------------------------------------------------+
//login gegevens |
$host = "localhost";//locatie van de MySQL server |
$username = "***";//gebruikersnaam van de MySQL server |
$password = "***";//wachtwoord van de MySQL server |
$database = "rstscholingnl_";//database die aangesproken moet worden |
//+---------------------------------------------------------+
//connecteren
$lnk = mysql_connect($host,$username,$password) or die(mysql_error()); //connecteren met de server
mysql_select_db($database,$lnk) or die(mysql_error()." [".$database."]"); //selecteren van de database
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo '<select name="password">';
while ($row = mysql_fetch_row($result)) {
echo '<option value="' . $row[0] . '">';
echo $row[1] . '</option>';
}
echo '</select>';
}
else {
echo 'Sorry, er zijn geen lokaties meer beschikbaar';
}
?>
<option value="lokatie_id" selected></option><?php echo $lokatie_id ?><br><br>
<input type="submit" value="Verzenden"/>
</form>
</body>
</html>
[\code]
[size=xsmall][i]Toevoeging op 13/03/2012 15:37:16:[/i][/size]
de pagina bevestig.php ziet er als volgt uit.
<?php
mysql_connect("localhost", "***", "***");
mysql_select_db("rstscholing_");
$query = mysql_query("INSERT INTO members (username, lokatie_id) VALUES ('{$_SESSION['username']}', '{$_POST['lokatie_id']}')");
print ("Gegevens ingevoerd");
?>
De keuze wordt niet bijgeschreven in de tabel. Weet iemand wat ik niet goed doet?
<?php
session_start();
if(!isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
<?
echo 'Je bent ingelogd met volgende gebruikersnaam: ';
echo $_SESSION['myusername'];
echo "<br><br>";
echo "Per locatie zijn beperkt plaatsen beschikbaar. Hieronder zie je de locatie die nog open staan.";
echo "<br><br>";
?>
<html>
<body>
<form action="bevestig.php" method="post" ">
Lokatiekeuze:
<?
/*************************
* zonder foutafhandeling *
**************************/
$sql = "SELECT
lokatie_id, lokatie_naam
FROM
lokaties
WHERE
lokatie_id
NOT IN
(SELECT
lokatie_id
FROM
members
GROUP BY
lokatie_id
HAVING
COUNT(lokatie_id) >=2)";
//hier connecten met de db
//Gegevens in onderstaand kader mogen aangepast worden
//+---------------------------------------------------------+
//login gegevens |
$host = "localhost";//locatie van de MySQL server |
$username = "***";//gebruikersnaam van de MySQL server |
$password = "***";//wachtwoord van de MySQL server |
$database = "rstscholingnl_";//database die aangesproken moet worden |
//+---------------------------------------------------------+
//connecteren
$lnk = mysql_connect($host,$username,$password) or die(mysql_error()); //connecteren met de server
mysql_select_db($database,$lnk) or die(mysql_error()." [".$database."]"); //selecteren van de database
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo '<select name="password">';
while ($row = mysql_fetch_row($result)) {
echo '<option value="' . $row[0] . '">';
echo $row[1] . '</option>';
}
echo '</select>';
}
else {
echo 'Sorry, er zijn geen lokaties meer beschikbaar';
}
?>
<option value="lokatie_id" selected></option><?php echo $lokatie_id ?><br><br>
<input type="submit" value="Verzenden"/>
</form>
</body>
</html>
[\code]
[size=xsmall][i]Toevoeging op 13/03/2012 15:37:16:[/i][/size]
de pagina bevestig.php ziet er als volgt uit.
<?php
mysql_connect("localhost", "***", "***");
mysql_select_db("rstscholing_");
$query = mysql_query("INSERT INTO members (username, lokatie_id) VALUES ('{$_SESSION['username']}', '{$_POST['lokatie_id']}')");
print ("Gegevens ingevoerd");
?>
De keuze wordt niet bijgeschreven in de tabel. Weet iemand wat ik niet goed doet?
erwin:
een group by kan je in principe alleen gebruiken als er een aggregate functie in de select wordt gebruikt. Dat gebruik je niet, dus je SQL statement is in principe fout
Ik ben dit niet met je eens, er staat een aggregate functie in de HAVING clause, er staat (volgens mij) nergens voorgeschreven dat ie in een SELECT moet.
Daarnaast heb ik in de SELECT één kolom en dat is de kolom waarop gegrouped wordt, dus in dit geval is er niks mis met het gebruik van GROUP BY
Probleem is alleen de gekozen plaats in mysql bij de ingelogde persoon te krijgen.
Ger van Steenderen op 13/03/2012 18:47:44:
Ik ben dit niet met je eens
Begrijp ik. Het is ook een beetje een punt met een mening. Vandaar ook het "in principe" in mijn statement. Het verbaast me op zich ook niet dat John aangeeft dat het wel werkt. Alleen in mijn opinie zou je hier niet een group by moeten gebruiken, maar een distinct in de select. Maar ik ben met je eens dat het een beetje een mening tegen mening is.
Maar dan de vraag waarom het niet goed gaat. Ik zie dat je in je insert een waarde uit $_POST['lokatie_id'] haalt. Alleen als ik in je php/html kijk dan zie ik geen input met als name "lokatie_id", dus is er wel een lokatie_id key in je POST array? Ik zie wel dit, maar dit klopt niet want de option staat niet binnen een select:
<option value="lokatie_id" selected></option>
Ik denk moet dat je even de volgorde van je script veranderen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
session_start();
if(!isset($_SESSION['myusername'])){
header("location:main_login.php");
exit;
}
else {
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
// display first form
}
else {
if (!isset($POST['confirm']) {
// display choice form
// and collect data from first form
// display second form
}
else {
//ecexute query
}
}
}
?>
session_start();
if(!isset($_SESSION['myusername'])){
header("location:main_login.php");
exit;
}
else {
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
// display first form
}
else {
if (!isset($POST['confirm']) {
// display choice form
// and collect data from first form
// display second form
}
else {
//ecexute query
}
}
}
?>
Laatste bericht volg k niet.
Dit moet ik zetten ipv??
Ik had niet gezien dat de je aan apart scipt had voor de bevestiging.
Maar ik zie dat je in INSERT doet op de members tabel, maar daar staan ook een username en een password in, dus ik vraag me af via welke tabel de inlog verloopt. Hbe je daar een aparte tabel voor, dan zijn die kolommen in de members tabel volledig overbodig. En heb je maar één cursus?
@Erwin: ik ben heel nieuwsgierig hoe jij deze query met een SELECT DISTINCT zou oplossen.
Gewijzigd op 14/03/2012 18:14:22 door Ger van Steenderen
Ik laat de mensen nu kiezen uit een dropdown.
Heeft iemand een idee hoe ik ipv een dropdown een lijstje krijg met radiobuttons waaruit men maximaal één keuze kan maken?