WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   MYSQL/PHP Datensatz löschen geht nicht (http://www.wcm.at/forum/showthread.php?t=181398)

reemrev 23.12.2005 22:10

MYSQL/PHP Datensatz löschen geht nicht
 
Jetzt steh ich an: Möchte einen oder mehrer Datensätze löschen, geht aber nicht, die Daten bleiben erhalten.
________________________________

$db = new mysqli('localhost', $_SESSION['valid_user'], $_SESSION['pw'], 'handel');

for($i=0;$i<$anz;$i++) {
$query = "DELETE FROM news WHERE news_ID = " . $loeschen[$i];}
________________________________

wobei "news_ID" das Indexfeld einer Tabelle ist. Das Array funktioniert. Der Benutzer hat die Rechte fürs Löschen. Verbindung zur DB wird aufgebaut. Woran könnte es sonst liegen?

hewlett 24.12.2005 13:56

Re: MYSQL/PHP Datensatz löschen geht nicht
 
Zitat:

Original geschrieben von reemrev
Jetzt steh ich an: Möchte einen oder mehrer Datensätze löschen, geht aber nicht, die Daten bleiben erhalten.
________________________________

$db = new mysqli('localhost', $_SESSION['valid_user'], $_SESSION['pw'], 'handel');

for($i=0;$i<$anz;$i++) {
$query = "DELETE FROM news WHERE news_ID = " . $loeschen[$i];}
________________________________

wobei "news_ID" das Indexfeld einer Tabelle ist. Das Array funktioniert. Der Benutzer hat die Rechte fürs Löschen. Verbindung zur DB wird aufgebaut. Woran könnte es sonst liegen?

wo/wann führst du die query dann aus?

delphirocks 25.12.2005 08:07

Gib' dir die Query als String aus und führ sie in PHPMyAdmin aus.
Dann siehst du die Fehlermeldung gleich.
Vielleichst versuchst du ja einen Masterdatensatz zu löschen, für den noch Datensätze in einer Detailtabelle existieren...

reemrev 25.12.2005 10:07

@hewlett
Auf der Seite werden zuerst Daten eingelesen und angezeigt, gleichzeitig wird ein Formular mit Checkboxen erstellt. Wenn der SUBMIT geklickt wird, dann wird in IF ($SUBMIT){ obiger Code aufgerufen.

@delphirocks
Wenn ich den String in PHPMyAdmin eingeben, wird der entsprechende Datensatz gelöscht. Aber weil du sagst Masterdatensatz, es besteht zu einer anderen Tabelle eine referentielle Integrität. Hatte ich mal testweise erstellt und vergessen, könnte es damit zusammen hängen?

delphirocks 25.12.2005 10:28

Naja, wenn das Statement im PHPMyAdmin funktioniert, muß es so auch funktionieren. Ich bin bezügl. der neueren MySQL Versionen nicht ganz auf Stand. Bei früheren Versionen wurden Foreign Keys ja nicht erzwungen, d.h. du konntest einen Master-Datensatz löschen, obwohl ein Detaildatensatz vorhanden war (auch wenn der Key nicht mit on delete cascade erstellt wurde).

Die neueren Versionen (5.0++ ???) erlauben dir das nicht mehr, gottseidank.

MySql sollte dir aber eigentlich eine Fehlermeldung zurückliefern, soferne du diese nicht mit '@' unterdrückt hast.

Übrigens wäre es wahrscheinlich besser, anstatt einer "For" Schleife die Abfrage so zu formulieren, sodaß nur ein "Roundtrip" vom Webserver zur DB notwendig ist.

Also anstatt:
for (...)
Delete from....

ein delete from table where newsid in (1,2,3,5,6) zu erstellen,
oder delete from table where newsid between(1,6).

Oder so ähnlich. Die Syntax könnte eventuell ein wenig andes sein, ich bin nicht ganz auf Stand...

T.dot 25.12.2005 10:55

Hallo...

Wenn man von deinem Code-Schnippsel ausgeht, dann wird zwar bei jedem Schleifendurchlauf aufs neue ein String erstellt, dieser aber nie ausgeführt.

Die Schleife müsste so aussehen:

for($i=0;$i<$anz;$i++)
{
$query = "DELETE FROM news WHERE news_ID = " . $loeschen[$i];
$db->query($query);
}

mfg Thomas

reemrev 25.12.2005 11:53

ARRRGGGG, vor lauter Bäumen sieht man den Wald nicht :D
DANKE!

hewlett 26.12.2005 13:53

Zitat:

Original geschrieben von T.dot
Hallo...

Wenn man von deinem Code-Schnippsel ausgeht, dann wird zwar bei jedem Schleifendurchlauf aufs neue ein String erstellt, dieser aber nie ausgeführt.

Die Schleife müsste so aussehen:

for($i=0;$i<$anz;$i++)
{
$query = "DELETE FROM news WHERE news_ID = " . $loeschen[$i];
$db->query($query);
}

mfg Thomas

genau das hab ich ja gemeint!

reemrev 26.12.2005 16:05

"wo/wann führst du die query dann aus?"
jetzt versteh ich auch schon, was du mit 'query' gemeint hast. Anfängerblindheit sag ich mal.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag