SQL syntax error
Ik zit met een foutje in mijn SQL-syntax en weet niet waar precies de fout zit. Als iemand de fout vindt zou dat heel fijn zijn.
Ik heb de volgende code:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
switch($_POST[$dag["1"]])
{
case "1": //Aanmelden eerstkomende dag (verwijder record uit database)
$sql1='IF EXISTS (SELECT naam, datum FROM afmelden WHERE naam= "'.$user->data['username'].'" AND datum = "'.$dag["1"].'")
BEGIN
DELETE FROM afmelden WHERE naam = "'.$user->data['username'].'"
AND datum = "'.$dag["1"].'"
END';
$res = mysql_query($sql1,$link) or die(mysql_error());
$d1check = "1";
break;
case "0": //afmelden eerstkomende dag (voeg afmelding toe aan database)
$sql1 = 'IF NOT EXISTS (SELECT naam, datum, ip FROM afmelden WHERE naam= "'.$user->data['username'].'" AND datum = "'.$dag["1"].'")
BEGIN
INSERT INTO afmelden (naam ,datum ,ip) VALUES ("'.$user->data['username'].'","'.$dag["2"].'","'.$ipaddr.'")
END';
$res = mysql_query($sql1,$link) or die(mysql_error());
$d1check = "0";
break;
}
?>
switch($_POST[$dag["1"]])
{
case "1": //Aanmelden eerstkomende dag (verwijder record uit database)
$sql1='IF EXISTS (SELECT naam, datum FROM afmelden WHERE naam= "'.$user->data['username'].'" AND datum = "'.$dag["1"].'")
BEGIN
DELETE FROM afmelden WHERE naam = "'.$user->data['username'].'"
AND datum = "'.$dag["1"].'"
END';
$res = mysql_query($sql1,$link) or die(mysql_error());
$d1check = "1";
break;
case "0": //afmelden eerstkomende dag (voeg afmelding toe aan database)
$sql1 = 'IF NOT EXISTS (SELECT naam, datum, ip FROM afmelden WHERE naam= "'.$user->data['username'].'" AND datum = "'.$dag["1"].'")
BEGIN
INSERT INTO afmelden (naam ,datum ,ip) VALUES ("'.$user->data['username'].'","'.$dag["2"].'","'.$ipaddr.'")
END';
$res = mysql_query($sql1,$link) or die(mysql_error());
$d1check = "0";
break;
}
?>
En de volgende SQL errors
Quote:
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 'IF EXISTS (SELECT naam, datum FROM afmelden WHERE naam= "Robin" AND datum = "125' at line 1
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 'IF NOT EXISTS (SELECT naam, datum, ip FROM afmelden WHERE naam= "Robin" AND datu' at line 1
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 'IF NOT EXISTS (SELECT naam, datum, ip FROM afmelden WHERE naam= "Robin" AND datu' at line 1
Alvast bedankt,
Robin
Gewijzigd op 01/01/1970 01:00:00 door Robin
http://dev.mysql.com/doc/refman/5.0/en/if-statement.html
Daar zie je dat de structuur sowieso werkt met IF ... THEN ... END IF
Daarnaast vraag ik me af of dit mag. Je hebt geen IF-queries. Deze zijn eigenlijk altijd opgenomen binnen een functie o.i.d.
Wellicht moet je het anders doen:
DELETE FROM afmelden WHERE (naam={naam}) AND (datum={datum})
En dan gewoon afwachten hoeveel rijen hier uit komen met mysql_affected_rows?
Overigens: in SQL gebruik je single-quotes om alle waarden heen. Geen double-quotes. Dat het in MySQL werkt, ligt meer aan MySQL dan aan SQL zelf, want het is tegen de standaarden.
Misschien moet je even hier kijken: Daar zie je dat de structuur sowieso werkt met IF ... THEN ... END IF
Daarnaast vraag ik me af of dit mag. Je hebt geen IF-queries. Deze zijn eigenlijk altijd opgenomen binnen een functie o.i.d.
Wellicht moet je het anders doen:
DELETE FROM afmelden WHERE (naam={naam}) AND (datum={datum})
En dan gewoon afwachten hoeveel rijen hier uit komen met mysql_affected_rows?
Overigens: in SQL gebruik je single-quotes om alle waarden heen. Geen double-quotes. Dat het in MySQL werkt, ligt meer aan MySQL dan aan SQL zelf, want het is tegen de standaarden.
Ik zou niet naar afmeldingen kijken, maar naar aanmeldingen. Daarbij heb je zo te zien gebruikers, en kan je die dus koppelen met enkelt een koppeltabel aan de hand van de userid en niet de naam.
Quote:
In dat geval moet je eerst vragen naar wat voor situatie het is. Stel dat het gaat om bijeenkomsten waar eigenlijk altijd iedereen komt, dan is het logischer om je afmeldingen te noteren dan je aanmeldingen.Ik zou niet naar afmeldingen kijken, maar naar aanmeldingen.
En ik heb ook het idee dat het hier echt gaat om `afmeldingen`. Dus er wordt van uit gegaan dat iedereen komt, maar degenen die zich afmelden komen bij de afmeldingen te staan. Maar wellicht kan de TS daar nog wat meer duidelijkheid over bieden.
In elk geval zijn we het eens dat die IF-structuur hier niet helemaal op zijn plek is :)
Het is inderdaad een script dat elke dinsdag en donderdag bijhoudt wie er NIET komt. Het is namelijk zo dat het de bedoeling is dat verder iedereen komt en de mensen die echt niet kunnen moeten zich afmelden.
Ik heb een script gemaakt met radio-buttons, dus per dag kun je je bijvoorbeeld tot 5 uur 's middags afmelden, die dagen worden automatisch ververst.
Het ziet er zo uit:
------
Dinsdag 6 oktober
[button - standaard aangekruisd] Aanmelden
[button] afmelden
Donderdag 8 oktober
[button - standaard aangekruisd] Aanmelden
[button] afmelden
etc.
[submit]
-----------
Als je 'afmelden aankruist, maakt ie een record aan dat je je afmeldt, als je je nog niet hebt afgemeld (vandaar if not exists)
Als je je aanmeldt, moet ie je afmelding weer deleten (if exists, delete record)
Ik had het eerst gecheckt met een query of die bestaat en dan met
mysql_num_rows() gekeken of die records terug geeft, en dan vervolgens deleten of invoeren. Alleen ik kreeg naar mijn idee veel queries op 1 pagina en vond dat het wel minder kon.
Groet,
Robin
Gewijzigd op 01/01/1970 01:00:00 door Robin