delete en join
Ik wil IDConcert deleten uit de tblConcert; met parameters die ook verwijzen naar 2 andere tabellen: tblArtiest(a)en tblLogin(l).
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
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
<?php
$cola = "-1";
if (isset($_GET['a'])) {
$cola = (get_magic_quotes_gpc()) ? $_GET['a'] : addslashes($_GET['a']);
}
$coll = "-1";
if (isset($_GET['l'])) {
$coll = (get_magic_quotes_gpc()) ? $_GET['l'] : addslashes($_GET['l']);
}
$conc = "-1";
if (isset($_GET['IDConcert'])) {
$conc = (get_magic_quotes_gpc()) ? $_GET['IDConcert'] : addslashes($_GET['IDConcert']);
}
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {
$deleteSQL = sprintf("DELETE c.IDConcert, c.Datum, c.IDArtiest, c.IDPlaats
FROM tblConcert AS c
LEFT JOIN tblArtiest AS a
on a.IDArtiest = c.IDArtiest
LEFT JOIN tblLogin as l
on l.IDLogin = a.IDLogin
WHERE
IDConcert='%s' AND IDArtiest='%s' AND IDLogin='%s'", $conc, $cola, $coll);
mysql_select_db($###### $#####);
$Result1 = mysql_query($deleteSQL, $##### or die(mysql_error());
$deleteGoTo = "prfl.php?msg=8";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}
?>
$cola = "-1";
if (isset($_GET['a'])) {
$cola = (get_magic_quotes_gpc()) ? $_GET['a'] : addslashes($_GET['a']);
}
$coll = "-1";
if (isset($_GET['l'])) {
$coll = (get_magic_quotes_gpc()) ? $_GET['l'] : addslashes($_GET['l']);
}
$conc = "-1";
if (isset($_GET['IDConcert'])) {
$conc = (get_magic_quotes_gpc()) ? $_GET['IDConcert'] : addslashes($_GET['IDConcert']);
}
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {
$deleteSQL = sprintf("DELETE c.IDConcert, c.Datum, c.IDArtiest, c.IDPlaats
FROM tblConcert AS c
LEFT JOIN tblArtiest AS a
on a.IDArtiest = c.IDArtiest
LEFT JOIN tblLogin as l
on l.IDLogin = a.IDLogin
WHERE
IDConcert='%s' AND IDArtiest='%s' AND IDLogin='%s'", $conc, $cola, $coll);
mysql_select_db($###### $#####);
$Result1 = mysql_query($deleteSQL, $##### or die(mysql_error());
$deleteGoTo = "prfl.php?msg=8";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}
?>
Resultaat: DELETE command denied to user '******_******'@'localhost' for table 'IDConcert'
?? IDConcert is slechts de index van de tblConcert; maar ik weet niet waar de fout precies zit. Somebody ?
Gewijzigd op 01/01/1970 01:00:00 door DeZond
Je kan niet specifieke velden deleten. Het is dus 'DELETE FROM table', de veldnamen moet je weg laten.
Ik heb het nu weggelaten; krijg nu volgende melding:
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 'LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tbl' at line 3
echo je huidige query eens, dan weten we waar we het over hebben.
Bijvoorbeeld
Tabllenstructuur
tblConcert: IDConcert, Datum, IDArtiest, IDPlaats
tblArtiest: IDArtiest, IDLogin, ...
tblLogin: IDLogin, ...
Zo is de onderlinge samenhang. Ik wil bij het deleten een extra controle op de IDLogin om te voorkomen dat anderen een "concert" kunnen deleten.
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
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
<?php
$cola = "-1";
if (isset($_GET['a'])) {
$cola = (get_magic_quotes_gpc()) ? $_GET['a'] : addslashes($_GET['a']);
}
$coll = "-1";
if (isset($_GET['l'])) {
$coll = (get_magic_quotes_gpc()) ? $_GET['l'] : addslashes($_GET['l']);
}
$conc = "-1";
if (isset($_GET['IDConcert'])) {
$conc = (get_magic_quotes_gpc()) ? $_GET['IDConcert'] : addslashes($_GET['IDConcert']);
}
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {
$deleteSQL = sprintf("DELETE
FROM tblConcert AS c
LEFT JOIN tblArtiest AS a
on a.IDArtiest = c.IDArtiest
LEFT JOIN tblLogin as l
on l.IDLogin = a.IDLogin
WHERE
IDConcert='%s' AND IDArtiest='%s' AND IDLogin='%s'", $conc, $cola, $coll);
mysql_select_db($###, $######);
$Result1 = mysql_query($deleteSQL, $####) or die(mysql_error());
$deleteGoTo = "prfl.php?msg=8";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}
?>
$cola = "-1";
if (isset($_GET['a'])) {
$cola = (get_magic_quotes_gpc()) ? $_GET['a'] : addslashes($_GET['a']);
}
$coll = "-1";
if (isset($_GET['l'])) {
$coll = (get_magic_quotes_gpc()) ? $_GET['l'] : addslashes($_GET['l']);
}
$conc = "-1";
if (isset($_GET['IDConcert'])) {
$conc = (get_magic_quotes_gpc()) ? $_GET['IDConcert'] : addslashes($_GET['IDConcert']);
}
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {
$deleteSQL = sprintf("DELETE
FROM tblConcert AS c
LEFT JOIN tblArtiest AS a
on a.IDArtiest = c.IDArtiest
LEFT JOIN tblLogin as l
on l.IDLogin = a.IDLogin
WHERE
IDConcert='%s' AND IDArtiest='%s' AND IDLogin='%s'", $conc, $cola, $coll);
mysql_select_db($###, $######);
$Result1 = mysql_query($deleteSQL, $####) or die(mysql_error());
$deleteGoTo = "prfl.php?msg=8";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}
?>
Geeft nog problemen: 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 'LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tbl' at line 3.
Ik weet niet of die JOIN de beste oplossing is.
Ben zelf PHP-beginner!
Gewijzigd op 01/01/1970 01:00:00 door DeZond
Wat levert dit op?
Het levert niets op omdat de pagina in eerste instantie al een foutboodschap geeft:
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 'LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tbl' at line 3
Quote:
Je zou natuurlijk even kunnen echoen voordat de query wordt uitgevoerd... Daarnaast weet je al dat de query mislukt, uitvoeren heeft dus geen enkele zin. Het levert niets op omdat de pagina in eerste instantie al een foutboodschap geeft:
Echo die zooi nu eens even, dat is toch geen rocket science, of wel dan?
* vooraan de pagina; vlak voor de query.
Quote:
vlak voor de query.
regel 1: echo de_query
regel 2: maak de query aan
Vraagje: Wat verwacht jij nu op het scherm?
Mijn antwoord: Niks. Op het moment van echoen is er geen query, er valt dus niks te tonen. Dit heeft niks met PHP te maken, maar alles met logica.
Ps. Begin je scripts met de volgende regels, dan krijg je tenminste een notice wanneer je een variabele echoot zonder dat deze bestaat:
Notice: Undefined variable: deleteSQL in /home/mconcrt/public_html/usr/wscrt.php on line 52
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 'LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tbl' at line 3
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
echo $deleteSQL;
$cola = "-1";
if (isset($_GET['a'])) {
$cola = (get_magic_quotes_gpc()) ? $_GET['a'] : addslashes($_GET['a']);
} enzovoort
?>
ini_set('display_errors', 1);
error_reporting(E_ALL);
echo $deleteSQL;
$cola = "-1";
if (isset($_GET['a'])) {
$cola = (get_magic_quotes_gpc()) ? $_GET['a'] : addslashes($_GET['a']);
} enzovoort
?>
Ik snap ook niet waar jij naar toewil. Wat kan je vergaren uit een echo van een query die faalt; en het meetpunt ervoor plaats. Ik vermoed dat het probleem bij de join ligt...
$deleteSQL = "DELETE
FROM tblConcert AS c
LEFT JOIN tblArtiest AS a
on a.IDArtiest = c.IDArtiest
LEFT JOIN tblLogin as l
on l.IDLogin = a.IDLogin
WHERE
IDConcert='%s' AND IDArtiest='%s' AND IDLogin='%s'", $conc, $cola, $coll;
echo $deleteSQL;
mysql_select_db($database_mscc, $mscc);
$Result1 = mysql_query($deleteSQL, $mscc);// or die(mysql_error());
doe dat eens ipv de corresponderende regels
Maar, hoe denk jij op regel 5 een query te echoen, die jij pas na 'enzovoort' gaat aanmaken? Snap je wel dat een variabele eerst moet bestaan en inhoud nodig heeft voordat je hier wat mee kunt gaan doen? Ik mag toch hopen van wel, anders wordt PHP één grote ramp.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Ik zie nu dat de where functie alles goed binnenkrijgt.
Code (php)
1
2
2
Notice: Undefined variable: deleteSQL in /home/mconcrt/public_html/usr/wscrt.php on line 52
DELETE FROM tblConcert AS c LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tblLogin as l on l.IDLogin = a.IDLogin WHERE IDConcert='29' AND IDArtiest='19' AND IDLogin='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 'LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tbl' at line 3
DELETE FROM tblConcert AS c LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tblLogin as l on l.IDLogin = a.IDLogin WHERE IDConcert='29' AND IDArtiest='19' AND IDLogin='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 'LEFT JOIN tblArtiest AS a on a.IDArtiest = c.IDArtiest LEFT JOIN tbl' at line 3
Gewijzigd op 01/01/1970 01:00:00 door DeZond
pgFrank; m'n excuses. Ik heb het nu beet ! Merci voor uw geduld met deze php-beginner die nu soms al kleine rampen veroorzaakt.
Code (php)
1
2
3
4
2
3
4
<?
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {
$deleteSQL = sprintf("DELETE FROM tblConcert, tblArtiest, tblLogin WHERE tblArtiest.IDArtiest = tblConcert.IDArtiest AND tblLogin.IDLogin = tblArtiest.IDLogin AND IDConcert=%s AND IDArtiest=%s AND IDLogin=%s", $conc, $cola, $coll);
?>
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {
$deleteSQL = sprintf("DELETE FROM tblConcert, tblArtiest, tblLogin WHERE tblArtiest.IDArtiest = tblConcert.IDArtiest AND tblLogin.IDLogin = tblArtiest.IDLogin AND IDConcert=%s AND IDArtiest=%s AND IDLogin=%s", $conc, $cola, $coll);
?>
Code (php)
1
2
3
2
3
Resultaat:
Notice: Undefined variable: deleteSQL in /home/mconcrt/public_html/usr/wscrt.php on line 52
DELETE FROM tblConcert, tblArtiest, tblLogin WHERE tblArtiest.IDArtiest = tblConcert.IDArtiest AND tblLogin.IDLogin = tblArtiest.IDLogin AND IDConcert=29 AND IDArtiest=19 AND IDLogin=1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE tblArtiest.IDArtiest = tblConcert.IDArtiest AND tblLogin.IDLogin = tblArti' at line 1
Notice: Undefined variable: deleteSQL in /home/mconcrt/public_html/usr/wscrt.php on line 52
DELETE FROM tblConcert, tblArtiest, tblLogin WHERE tblArtiest.IDArtiest = tblConcert.IDArtiest AND tblLogin.IDLogin = tblArtiest.IDLogin AND IDConcert=29 AND IDArtiest=19 AND IDLogin=1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE tblArtiest.IDArtiest = tblConcert.IDArtiest AND tblLogin.IDLogin = tblArti' at line 1
Gewijzigd op 01/01/1970 01:00:00 door DeZond
Gewijzigd op 01/01/1970 01:00:00 door DeZond
Zet ook even je query tussen en tags, dan zien we tenminste wat tabs :-)
Edit:
Verander de query eens. Maak van "DELETE FROM" en SELECT * FROM, en voer de query dan uit in PHPMyAdmin.
Krijg je dan de rijen te zien die je wilt verwijderen? Waarschijnlijk niet. Zorg dus dat je een query hebt waarmee je de resultaten te zien krijgt die je wilt verwijderen, en vervang vervolgens "SELECT * FROM" weer terug naar "DELETE FROM"
Verander de query eens. Maak van "DELETE FROM" en SELECT * FROM, en voer de query dan uit in PHPMyAdmin.
Krijg je dan de rijen te zien die je wilt verwijderen? Waarschijnlijk niet. Zorg dus dat je een query hebt waarmee je de resultaten te zien krijgt die je wilt verwijderen, en vervang vervolgens "SELECT * FROM" weer terug naar "DELETE FROM"
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
En de handige tip om Select eerst uit te voeren.
Ik ploeg verder !
Het gebruik van een JOIN houdt zelfs een risico in, wanneer jouw JOIN niet goed is, loop je een corrupte database op.
Zie de handleiding hoe je de FK's aanmaakt. Uiteraard gebruik je de innoDB-engine van MySQL, dat is de enige engine van MySQL die met foreign keys uit de voeten kan.