delete en join

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

DeZond

DeZond

17/10/2007 12:13:00
Quote Anchor link
Kan ik delete en join samen gebruiken zoals hieronder:
Ik wil IDConcert deleten uit de tblConcert; met parameters die ook verwijzen naar 2 andere tabellen: tblArtiest(a)en tblLogin(l).


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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));
}




?>



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
 
PHP hulp

PHP hulp

18/05/2024 16:43:21
 
Jelmer -

Jelmer -

17/10/2007 12:22:00
Quote Anchor link
Je kan niet specifieke velden deleten. Het is dus 'DELETE FROM table', de veldnamen moet je weg laten.
 
DeZond

DeZond

17/10/2007 13:25:00
Quote Anchor link
Jelmer, bedankt voor uw tip.
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
 
Frank -

Frank -

17/10/2007 14:04:00
Quote Anchor link
echo je huidige query eens, dan weten we waar we het over hebben.
 
Kees Schepers

kees Schepers

17/10/2007 14:06:00
Quote Anchor link
Je kan wel met een JOIN deleten onder MySQL dan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
DELETE FROM orders,users WHERE orders.userid=users.id AND orders.status='deleted'


Bijvoorbeeld
 
DeZond

DeZond

17/10/2007 14:27:00
Quote Anchor link
Ik gebruik MySQL.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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));
}

?>


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
 
Frank -

Frank -

17/10/2007 14:29:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
echo $deleteSQL;
?>

Wat levert dit op?
 
DeZond

DeZond

17/10/2007 14:42:00
Quote Anchor link
Dag pgFrank,

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
 
Frank -

Frank -

17/10/2007 14:47:00
Quote Anchor link
Quote:
Het levert niets op omdat de pagina in eerste instantie al een foutboodschap geeft:
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.

Echo die zooi nu eens even, dat is toch geen rocket science, of wel dan?
 
DeZond

DeZond

17/10/2007 15:19:00
Quote Anchor link
Ja, het lijkt idd wel op rocket science voor een beginner. Kheb overal* die echo geplaatst, maar nergens een output gekregen !
* vooraan de pagina; vlak voor de query.
 
Frank -

Frank -

17/10/2007 15:27:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest van je code
?>
 
DeZond

DeZond

17/10/2007 15:48:00
Quote Anchor link
Ik krijg niet meer info dan ik anders had:

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>


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...
 
Klaasjan Boven

Klaasjan Boven

17/10/2007 15:51:00
Quote Anchor link
if ((isset($_GET['IDConcert'])) && ($_GET['IDConcert'] != "")) {

$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
 
Frank -

Frank -

17/10/2007 16:02:00
Quote Anchor link
Het probleem zal ongetwijfeld in de JOIN zitten.

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 -
 
DeZond

DeZond

17/10/2007 16:03:00
Quote Anchor link
Zoals een beginneling beaamt; duurt het ff voor ik het door had. Sorry.
Ik zie nu dat de where functie alles goed binnenkrijgt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 01/01/1970 01:00:00 door DeZond
 
DeZond

DeZond

17/10/2007 16:08:00
Quote Anchor link
pgFrank; m'n excuses. Ik heb het nu beet ! Merci voor uw geduld met deze php-beginner die nu soms al kleine rampen veroorzaakt.
 
DeZond

DeZond

17/10/2007 16:34:00
Quote Anchor link
Ik heb eens een andere delete syntax gebruikt; helaas zelfde resultaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 01/01/1970 01:00:00 door DeZond
 
DeZond

DeZond

17/10/2007 17:41:00
Quote Anchor link
u
Gewijzigd op 01/01/1970 01:00:00 door DeZond
 
PHP Newbie

PHP Newbie

17/10/2007 18:45:00
Quote Anchor link
Niet bumpen Zond ;-) Gebruik je edit knop

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"
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
DeZond

DeZond

17/10/2007 19:30:00
Quote Anchor link
@PHPNewbie: merci voor de handige phphulp.nl instructries !
En de handige tip om Select eerst uit te voeren.
Ik ploeg verder !
 
Frank -

Frank -

19/10/2007 14:26:00
Quote Anchor link
Ik bedenk me ineens dat je helemaal geen JOIN in een DELETE nodig hebt, stel de juiste foreignkey in en gebruik de juiste ON DELETE en ON UPDATE. Dan kun je in jouw geval gewoon het betrokken record uit tblArtiest weggooien, de gekoppelde tabellen zul dan automatisch (afhankelijk van de ON DELETE) de bijbehorende records weggooien.

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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.