Maximaal aantal inschrijvingen
Ik heb een vraagje over SQL. Ik werk trouwens in mySQL.
Ik heb een registratie en keuze formulier gemaakt voor keuzeblokken op onze school. Je moet je inschrijven met je leerlingnummer, voornaam, achternaam en daarna moet je je keuze selecteren uit een dropdown menu.
Nu is het zo dat er een maximaal aantal leerlingen per keuzeblok is, zeg 30 leerlingen. Dan zit het blok vol en moet het niet meer mogelijk zijn om dit te kiezen.
Moet ik dan vragen aan mijn DB hoeveel leerlingen er momenteel voor jou keuze hebben gekozen, en als dit er 30 zijn hem/haar de boodschap geven dat dit vol zit?
Bob
Ja, dat is inderdaad de juiste oplossing. Check in je DB of het blok al vol is met 30 aanmeldingen. Zoniet dan sla je op (insert) anders een boodschap.
Dus SELECT en FROM snap ik, maar dan moet ik WHERE keuze= ????????
dat moet dus de keuze zijn die ze net hebben ingevoerd, maar ik weet niet hoe ik die kan ophalen..
SELECT COUNT(*) FROM tabel WHERE keuze=$_POST["formulier_keuze"];
en daaronder een if tak met indien 30 dan boodschap anders opslaan.
Toevoeging op 18/03/2011 12:29:22:
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
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
<?php
require("connect.php");
mysql_select_db("basbob_db", $verbind);
if ($_POST[leerlingnummer] != NULL){
$sql = "INSERT INTO registreren (leerlingnummer, voornaam, achternaam, keuze) VALUES('" . $_POST["leerlingnummer"] . "','" . $_POST["voornaam"] . "','" . $_POST["achternaam"] . "','" . $_POST["keuze"] . "')";
$aantal = mysql_query('SELECT COUNT(*) FROM registreren WHERE keuze=$_POST["keuze"]');
$rowaantal = mysql_fetch_array($aantal) or die(mysql_error());
if (!mysql_query($sql,$verbind))
{
echo "Er is iets misgegaan, probeer het nogmaals. Error: " . mysql_error();
}
elseif ($rowaantal >= 2)
{ echo "Er zitten al 2 mensen in deze keuze, je zal opnieuw moeten kiezen" ;}
else
{
echo "Je bent geregistreerd!";
}
}
echo $rowaantal;
mysql_close($verbind);
?>
require("connect.php");
mysql_select_db("basbob_db", $verbind);
if ($_POST[leerlingnummer] != NULL){
$sql = "INSERT INTO registreren (leerlingnummer, voornaam, achternaam, keuze) VALUES('" . $_POST["leerlingnummer"] . "','" . $_POST["voornaam"] . "','" . $_POST["achternaam"] . "','" . $_POST["keuze"] . "')";
$aantal = mysql_query('SELECT COUNT(*) FROM registreren WHERE keuze=$_POST["keuze"]');
$rowaantal = mysql_fetch_array($aantal) or die(mysql_error());
if (!mysql_query($sql,$verbind))
{
echo "Er is iets misgegaan, probeer het nogmaals. Error: " . mysql_error();
}
elseif ($rowaantal >= 2)
{ echo "Er zitten al 2 mensen in deze keuze, je zal opnieuw moeten kiezen" ;}
else
{
echo "Je bent geregistreerd!";
}
}
echo $rowaantal;
mysql_close($verbind);
?>
Toevoeging op 18/03/2011 12:30:10:
Dat heb ik nu, maar ik weet niet zeker of het klopt. Kun je het even snel nakijken voor mij? Dat zou ik super vinden!
Bedankt alvast, ik kan in ieder geval verder ;)
Gewijzigd op 18/03/2011 12:58:19 door Bob van Haren
Wat doe ik fout?
Je probeert blijkbaar een lege string of zoiets in een query te verwerken.
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
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
<?php
require("connect.php");
mysql_select_db("basbob_db", $verbind);
if ($_POST[voornaam] != NULL){
$insert = "INSERT INTO registreren (nummer, voornaam, achternaam, keuze) VALUES(' . $_POST[nummer] . ',' . $_POST[voornaam] . ',' . $_POST[achternaam] . ',' . $_POST[keuze] . ')";}
$aantal = mysql_query("SELECT COUNT(*) FROM registreren WHERE keuze="$_POST["keuze"]" ");
$row = mysql_fetch_array($aantal) or die(mysql_error());
if (!mysql_query($insert,$verbind))
{
echo "Er is iets misgegaan, probeer het nogmaals. Error: " . mysql_error();
}
elseif ($rowaantal >= 2)
{ echo "Er zitten al 2 mensen in deze keuze, je zal opnieuw moeten kiezen" ;}
else
{
echo "Je bent geregistreerd!";
}
echo $rowaantal;
mysql_close($verbind);
?>
require("connect.php");
mysql_select_db("basbob_db", $verbind);
if ($_POST[voornaam] != NULL){
$insert = "INSERT INTO registreren (nummer, voornaam, achternaam, keuze) VALUES(' . $_POST[nummer] . ',' . $_POST[voornaam] . ',' . $_POST[achternaam] . ',' . $_POST[keuze] . ')";}
$aantal = mysql_query("SELECT COUNT(*) FROM registreren WHERE keuze="$_POST["keuze"]" ");
$row = mysql_fetch_array($aantal) or die(mysql_error());
if (!mysql_query($insert,$verbind))
{
echo "Er is iets misgegaan, probeer het nogmaals. Error: " . mysql_error();
}
elseif ($rowaantal >= 2)
{ echo "Er zitten al 2 mensen in deze keuze, je zal opnieuw moeten kiezen" ;}
else
{
echo "Je bent geregistreerd!";
}
echo $rowaantal;
mysql_close($verbind);
?>
Parse error: syntax error, unexpected T_VARIABLE in /home/basbob/domains/keuzen1.echost.nl/public_html/bas/registreren.php on line 7
Gewijzigd op 21/03/2011 16:13:11 door Wesley PHP
Regels 6 en 7 deugen geheel niet.
Gewijzigd op 21/03/2011 16:12:53 door Wesley PHP
Het zou ook wel fijn zijn als jullie me kunnen wijzen op wat er dan niet klopt (*zucht*)
Code (php)
1
2
3
4
2
3
4
<?php
$insert = "INSERT INTO registreren (nummer, voornaam, achternaam, keuze) VALUES('". $_POST['nummer'] ."','". $_POST['voornaam'] ."','". $_POST['achternaam'] ."','". $_POST['keuze'] ."')"; }
$aantal = mysql_query("SELECT COUNT(id) FROM registreren WHERE keuze='".$_POST['keuze']."' ");
?>
$insert = "INSERT INTO registreren (nummer, voornaam, achternaam, keuze) VALUES('". $_POST['nummer'] ."','". $_POST['voornaam'] ."','". $_POST['achternaam'] ."','". $_POST['keuze'] ."')"; }
$aantal = mysql_query("SELECT COUNT(id) FROM registreren WHERE keuze='".$_POST['keuze']."' ");
?>
- vars buiten quotes
- gebruik een nette foutafhandeling!
Super bedankt voor alle hulp, ik weet nu waar ik op moet letten.
Die foutafhandeling is voor de volgende stap, nu eerst even zorgen dat alles werkt.
Nu kan ik dus controleren of er meer dan een x aantal mensen al die keuze hebben. Nu moet ik ze nog weigeren als er meer dan dat x aantal zijn. Dat ga ik morgen tijdens de les even uitzoeken, en als het niet lukt kan ik jullie nog altijd aanspreken, toch?
Super bedankt!
Bob
foutafhandeling niet uitstellen.
Eerst heb ik geprobeerd om de if $row >= 2 samen door een elseif met de foutafhandeling erin te zetten. Dit lukte me niet.
Nu heb ik het probleem dat hij zegt dat er al 2 mensen in zitten, maar dit is helemaal niet waar. Ook geeft hij de volgende error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #3' at line 1
Resource id #3
Hier volgt nogmaals wat ik tot nu toe heb, het zal wel weer een stomme fout zijn, maar ik moet alles leren toch?
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
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
<?php
require("connect.php");
mysql_select_db("basbob_db", $verbind);
ini_set('display_errors',1);
error_reporting(E_ALL | E_STRICT);
define('DEBUG_MODE',true);
$error = mysql_error();
function showSQLError($aantal,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . mysql_error() . '<br />' . $aantal . '</pre>';
}
else
{
return $text;
}
}
if ($_POST['voornaam'] != NULL)
{
$insert = mysql_query("INSERT INTO registreren (nummer, voornaam, achternaam, keuze) VALUES('" . mysql_real_escape_string($_POST['nummer']) . "','" . mysql_real_escape_string($_POST['voornaam']) . "','" . mysql_real_escape_string($_POST['achternaam']) . "','" . mysql_real_escape_string($_POST['keuze']) . "')");
}
else
{
echo 'Je moet wel alles invullen!';
}
$aantal = mysql_query("SELECT COUNT('nummer') FROM registreren WHERE keuze='" . mysql_real_escape_string($_POST['keuze']) . "' ");
$rowaantal = mysql_fetch_array($aantal) or die(mysql_error());
if ($rowaantal >= 2)
{
echo 'Er zitten al 2 mensen in deze keuze, je zal opnieuw moeten kiezen.';
$weg = mysql_query("DELETE FROM registreren WHERE nummer='".$_POST['nummer']."' ");
}
else
{
echo 'Je bent ingeschreven!';
}
if (($result = mysql_query($aantal)) === false)
{
echo showSQLError($aantal,$error,'Fout met database.');
}
else
{
echo 'De registratie is voltooid';
}
mysql_close($verbind);
?>
require("connect.php");
mysql_select_db("basbob_db", $verbind);
ini_set('display_errors',1);
error_reporting(E_ALL | E_STRICT);
define('DEBUG_MODE',true);
$error = mysql_error();
function showSQLError($aantal,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . mysql_error() . '<br />' . $aantal . '</pre>';
}
else
{
return $text;
}
}
if ($_POST['voornaam'] != NULL)
{
$insert = mysql_query("INSERT INTO registreren (nummer, voornaam, achternaam, keuze) VALUES('" . mysql_real_escape_string($_POST['nummer']) . "','" . mysql_real_escape_string($_POST['voornaam']) . "','" . mysql_real_escape_string($_POST['achternaam']) . "','" . mysql_real_escape_string($_POST['keuze']) . "')");
}
else
{
echo 'Je moet wel alles invullen!';
}
$aantal = mysql_query("SELECT COUNT('nummer') FROM registreren WHERE keuze='" . mysql_real_escape_string($_POST['keuze']) . "' ");
$rowaantal = mysql_fetch_array($aantal) or die(mysql_error());
if ($rowaantal >= 2)
{
echo 'Er zitten al 2 mensen in deze keuze, je zal opnieuw moeten kiezen.';
$weg = mysql_query("DELETE FROM registreren WHERE nummer='".$_POST['nummer']."' ");
}
else
{
echo 'Je bent ingeschreven!';
}
if (($result = mysql_query($aantal)) === false)
{
echo showSQLError($aantal,$error,'Fout met database.');
}
else
{
echo 'De registratie is voltooid';
}
mysql_close($verbind);
?>
$rowaantal is een array() dus wat jij doet kan niet.
if (($result = mysql_query($aantal)) === false)
In $aantal zit al een resultaat van een query dus dit gaat ook niet.
Daar ben ik weer. De site is nu grotendeels af.
http://keuzen1.echost.nl/ckv/index.php
Neem eens een kijkje ;)
Nu gaat er nog iets fout in mijn CSS of HTML code. Ik wil namelijk dit formulier centreren:
<form name="keuze" action="opgeslagenkeuzen.php" onsubmit="return check()" method="post" >
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
for($d=1;$d<6;$d++){
echo "Keuze " . $d . ": ";
$keuze='keuze'.$d;
echo "<select name=".$keuze.">";
$sql="SELECT optie FROM Opties";
$result=mysql_query($sql, $verbind);
while($row=mysql_fetch_array($result)){
echo "<option>" . $row['optie'] . "</option>";
};
echo "</select> <br />";
};
?>
for($d=1;$d<6;$d++){
echo "Keuze " . $d . ": ";
$keuze='keuze'.$d;
echo "<select name=".$keuze.">";
$sql="SELECT optie FROM Opties";
$result=mysql_query($sql, $verbind);
while($row=mysql_fetch_array($result)){
echo "<option>" . $row['optie'] . "</option>";
};
echo "</select> <br />";
};
?>
<input type="submit" value="Opslaan!" />
</form>
Maar het lukt me op geen enkele manier. Hij staat in een div wrapper, in een div content en in de body. Heb al geprobeerd zijn eigen div te maken maar het lukt me niet te centreren.
Help ;)
PHP Jasper op 21/03/2011 22:05:11:
foutafhandeling niet uitstellen.
Verder is dat ook geen relevante code.. toon liever de css
dit kan misschien helpen:
Gewijzigd op 25/05/2011 18:45:14 door Jasper DS
color: #66605f;
font-family: "Calibri", "Helvetica";
background-image: url('achtergrond.gif');
background-repeat: repeat-x;
}
p {
font-size: 14pt
}
#wrapper{
position:relative;
top:-8px;
width:800px;
height:700px;
margin-left:auto;
margin-right:auto;
}
#logo{
position: relative;
top: 0px;
right:45px;
width:790px;
height:200px;
background-image:url('banner.gif');
margin-left:auto;
margin-right:auto;
}
#border{
position: absolute;
left:-45px;
top: 180px;
width: 845px;
height: 20px;
background-color: black;
}
#menu{
position:relative;
height:114px;
width:525px;
top:-35px;
margin-left:auto;
margin-right:auto;
}
#content{
position:absolute;
top:350px;
width:800px;
}
#buttons{
list-style-type:none;
margin:25;
padding:0;
}
#buttons a{
position:relative;
float:left;
text-decoration:none;
margin-right:40px;
margin-left:40px;
display:block;
width:75px;
height:114px;
}
#buttons a:hover{
top:-10px;
}
#buttons a img{
border:none;
}
table{
margin-left:auto;
margin-right:auto;
border-collapse:collapse;
}
table, td, th{
border:1px solid #000;
text-align:center;
background-color:#FFF;
}
th{
font-weight:bold;
background-color:#A9F785;
}
div.blok{
position:relative;
float:left;
margin:0 20px 10px 0;
}
div#knop{
clear:both;
}
h1{
text-align:center;
}
#title{
text-align:center;
}
#keuzes{
text-align:center;
}
h2{
text-align:center;
}
h3{
text-align:center;
}
Gewijzigd op 25/05/2011 18:52:52 door Bob van Haren