Problem mit DELETE in PHP

Alles, was PHP betrifft, kann hier besprochen werden.

Problem mit DELETE in PHP

Postby Stunner » 13. January 2009 17:21

Hallo liebe Apache-Freunde.

Ich habe mich schon durch alle SuFu´s durchgequält aber nichts aufschlussreifes gefunden.
Daher frage ich hier:
Ich möchte auf meiner Admin-Seite News löschen können. Diese News befinden sich in der MySQL-Datenbank auf meinem Server. Nun klappt aber irgendwas nicht. Also der nimmt die ID der News nicht an, wenn ich per Link diese Löschen möchte. Hier ist alles was ich zurzeit habe:


if ($_REQUEST['news_title']) {

{
$loeschen = 'DELETE FROM news WHERE news_title = '.$_REQUEST['news_title'];
}
$loesch = mysql_query($loeschen);

echo "News wurde erfolgreich gel&ouml;scht!<BR>";

}



Der Link zum Löschen sieht wie folgt aus:

<a href="index.php?news_title=<? echo $row['news_title']; ?>"><button>L&ouml;schen</button></a>


Ich habe es manuell schonmal versucht (also ohne die ID-Abfrage).
Also so:

$loeschen = "DELETE FROM news WHERE news_title = 'TEST'";


Ich glaube, dass ich ein Fehler mit den Anführungszeichen habe, aber ich habe keine Ahnung.

Vielen Dank schonmal im voraus!

Gruß,
stunner
|-----------------|
Gruß,
Nici [Stunner]
|-----------------|
User avatar
Stunner
 
Posts: 28
Joined: 17. December 2008 14:41
Location: Köln

Re: Problem mit DELETE in PHP

Postby glitzi85 » 13. January 2009 17:34

Ich hoffe du weisst was du tust, denn so ist deine DB für SQL-Injections offen wie ein Scheunentor.

Als erstes würde ich mal prüfen ob die Zeile wirklich gelöscht wurde, bevor ich eine Erfolgsmeldung ausgebe. Das tut man bei modifizierenden Statements mittels mysql_affected_rows, wenn da nichts passiert ist, kann man mittels mysql_error() die letzte MySQL-Fehlermeldung ausgeben lassen.

Das Statement selber sieht so eigentlicht nicht schlecht aus. Natürlich kenne ich deine DB-Struktur nicht, könnte also ein Fehler in den Bezeichnungen sein. Alternativ wäre auch noch möglich, dass es einfach keinen Eintrag TEST gibt (vielleicht nennt sich der ja Test).

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: Problem mit DELETE in PHP

Postby Stunner » 13. January 2009 17:58

Die News TEST ist vorhanden. Und das Statement was hier per echo ausgegeben wird, spielt ja keine große Rolle bei diesem Problem.
Manuell hat es geklappt, da ich dies hier eingegeben hab:
$loeschen = "DELETE FROM news WHERE news_title = 'TEST'";


Da hat es geklappt. Dann habe ich in .§_REQUEST['news_title'] eingesetzt; Dann gings nicht mehr. Daher befürchte ich, das meine Schreibweise nicht korrekt ist.

Fällt euch den wirklich kein Fehler auf?
BRAUCHE DRINGEND HILFE!

P.S.:
glitzi85 wrote:Ich hoffe du weisst was du tust, denn so ist deine DB für SQL-Injections offen wie ein Scheunentor.

Das weiß ich 'leider' selber. Aber das kommt noich später. Außerdem ist zurzeit alles .htacces geschützt.
|-----------------|
Gruß,
Nici [Stunner]
|-----------------|
User avatar
Stunner
 
Posts: 28
Joined: 17. December 2008 14:41
Location: Köln

Re: Problem mit DELETE in PHP

Postby glitzi85 » 13. January 2009 18:03

Stunner wrote:Manuell hat es geklappt, da ich dies hier eingegeben hab:
$loeschen = "DELETE FROM news WHERE news_title = 'TEST'";
Da hat es geklappt.

OK, das hattest nicht geschrieben.

Stunner wrote:Dann habe ich in .§_REQUEST['news_title'] eingesetzt; Dann gings nicht mehr. Daher befürchte ich, das meine Schreibweise nicht korrekt ist.

OK, das hab ich übersehen:

Code: Select all
$loeschen = 'DELETE FROM news WHERE news_title = '.$_GET['news_title'];


Stunner wrote:P.S.:
glitzi85 wrote:Ich hoffe du weisst was du tust, denn so ist deine DB für SQL-Injections offen wie ein Scheunentor.

Das weiß ich 'leider' selber. Aber das kommt noich später. Außerdem ist zurzeit alles .htacces geschützt.

OK, wollt nur drauf hinweisen, nicht dass nachher die Frage aufkommt, warum deine DB gehackt wurde 8)

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: Problem mit DELETE in PHP

Postby Stunner » 13. January 2009 18:30

glitzi85 wrote:$loeschen = 'DELETE FROM news WHERE news_title = '.$_GET['news_title'];


Dies wird nach ausfürhung angezeigt (ich habe mal die $loeschen mit echo widergegeben):

DELETE FROM news WHERE news_title = TEST


Aber die News wurde nicht entfernt.

Aber warum klappt es nicht?
|-----------------|
Gruß,
Nici [Stunner]
|-----------------|
User avatar
Stunner
 
Posts: 28
Joined: 17. December 2008 14:41
Location: Köln

Re: Problem mit DELETE in PHP

Postby glitzi85 » 13. January 2009 18:40

Verdammt, jetzt hab ich nicht aufgepasst:

Code: Select all
$loeschen = 'DELETE FROM news WHERE news_title = \''.$_GET['news_title'].'\'';


Strings in SQL müssen von Hochkomma umschlossen sein. In deinem manuellen Test hattest du die drin. In deinem Script haben die gefehlt.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: Problem mit DELETE in PHP

Postby medium » 13. January 2009 18:42

N'abend,


error_reporting aufdrehen und Fehlermeldungen anzeigen lassen.

[code]
$loeschen = "DELETE FROM news WHERE news_title = '".$_GET['news_title']."' LIMIT 1;";
$ergebnis = mysql_query($loeschen) or die(mysql_error());
[/code]

Versuche beim Löschen von Datensätzen (wenn möglich!) immer ein LIMIT zu setzen. Ansonsten kann es Dir beim Testen (oder durch einen Bug) passieren, dass Du sämtliche Inhalte demselben Titel löschst. Ausserdem würde ich persönlich davon abkommen, (zB.) eine News anhand ihres Titels zu löschen - schliesslich kann der Titel mehrfach vorkommen, nimm' also lieber die ID (Datenbank-Normalisierung!)


Gruss
medium
 
Posts: 8
Joined: 10. January 2009 00:54

Re: Problem mit DELETE in PHP

Postby Stunner » 13. January 2009 18:48

JUPPI!

Es hat geklappt.

Ich bedanke mich für die schnellen Antworten und für die guten Tips.

Das mit dem Limit ist ne gute Sache. Merk ich mir!

Also vielen Dank.

Noch ne Frage:
Wenn ich eine News editieren möchte, wie muss ich vorgehen? Könnt ihr mir da kurz ein Skript zusammen basteln?
Wäre echt nett!

Grüße!!!
|-----------------|
Gruß,
Nici [Stunner]
|-----------------|
User avatar
Stunner
 
Posts: 28
Joined: 17. December 2008 14:41
Location: Köln

Re: Problem mit DELETE in PHP

Postby medium » 13. January 2009 19:00

Anders denken..

Du willst eine Zeile in der Tabelle ändern und in dieser gibt es normalerweise nur ein einziges Element welches Einmalig ist. Ich gehe nun einfach mal davon aus, dass Du dafür eine ID mit einem auto_increment - Wert hast.

1. Auslesen der zu ändernden News
2. News ausgeben, dass Du sie editieren kannst (am besten genau so wie Du sie eingetragen hast - also ein ähnliches Formular, zusätzlich noch die ausgelesene ID als hidden-Feld einbauen)
3. Analog zum Eintragen einer neuen News die Daten weiter verarbeiten.
4. MySQL-Statement "UPDATE"( http://dev.mysql.com/doc/refman/5.1/de/update.html )
--> zb. $sql = "UPDATE SET titel = '".$_POST['titel']."', inhalt = '".$_POST['inhalt']."' WHERE id = '".$_POST['id']."' LIMIT 1;";
---> Wie überall auch hier auf die Sicherheit achten (mein dahingekritzeltes Beispiel beinhaltet nichts davon!)
medium
 
Posts: 8
Joined: 10. January 2009 00:54

Re: Problem mit DELETE in PHP

Postby Stunner » 13. January 2009 19:25

Sorry, aber leider kann ich damit nicht so viel anfangen. Tut mir Leid. Aber ich weiß, was du meinst, kann es aber nicht so umsetzen.
Ich wollte dafür eine news-edit.php machen. Aber wie muss ich vorgehen?

Gruß!
|-----------------|
Gruß,
Nici [Stunner]
|-----------------|
User avatar
Stunner
 
Posts: 28
Joined: 17. December 2008 14:41
Location: Köln

Re: Problem mit DELETE in PHP

Postby Nobbie » 13. January 2009 21:08

So programmiert man kein SQL, das ist falsch (auch wenn es "ein wenig" funktioniert).

Zum Löschen und Editieren eines Datensatzes (DELETE, UPDATE) muss(!!!!) als Kriterium (die WHERE-Klausel) der Primärkey angegeben werden und sonst gar nichts! Den Titel anzugeben ist völlig verfehlt und geht spätestens dann in die Hose, wenn zwei verschiedene News den gleichen Titel haben (das wird irgendwann passieren).

Und es ist grundsätzlich falsch, nicht mit dem Primärkey zu arbeiten, denn dafür und nur dafür ist er da.

Du mußt also beim Link nicht href="index.php?news_title=<? echo $row['news_title'] angeben, sondern stattdessen href="index.php?id=<? echo $row['id'] (wobei ich davon ausgehe, dass "id" der Primary Key ist), und beim DELETE ebenso nicht WHERE news_title = '.$_GET['news_title']; sondern WHERE id = '.$_GET['id];

Und dann braucht man auch kein LIMIT 1 anzugeben (welches sonst zufällig den erst besten Titel löscht, der passt), sondern nun wird wirklich genau der richtige Datensatz gelöscht (oder editiert), den man auch wirklich löschen (editieren) will.
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Re: Problem mit DELETE in PHP

Postby Xardas der Dunkle » 13. January 2009 23:26

Stunner wrote:
glitzi85 wrote:Ich hoffe du weisst was du tust, denn so ist deine DB für SQL-Injections offen wie ein Scheunentor.

Das weiß ich 'leider' selber. Aber das kommt noich später. Außerdem ist zurzeit alles .htacces geschützt.

Da sollte man sofort machen, später hat man keinen Bock mehr dazu wieder alles ab zu ändern!
Zudem was ist daran so schwer mal eben n' kleinen Funktionsaufruf zu tätigen. Ein intval($_GET['id']) oder mysql_real_escape_string($_GET['news_title']) reicht bereits vollkommen.
Zudem $_REQUEST ist böse!
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: Problem mit DELETE in PHP

Postby Stunner » 14. January 2009 14:22

Nun ... ich werde beide Beiträge anwenden. Danke. Und mir ist auch klar, dass eine News am besten über eine ID laufen sollte.

Also nochmals danke.

Nur, ich bekomme das Editieren mit UPDATE nich hin. Ich weiß da einfach nicht, wie ich es am besten machen sollte. Eine neue Datei oder in der gleichen Datei? Und wie rufe ich es auf, dass die Inhalte der ausgewählten News angezeigt werden?

Grüße!!
|-----------------|
Gruß,
Nici [Stunner]
|-----------------|
User avatar
Stunner
 
Posts: 28
Joined: 17. December 2008 14:41
Location: Köln

Re: Problem mit DELETE in PHP

Postby Nobbie » 14. January 2009 15:20

Stunner wrote:Eine neue Datei oder in der gleichen Datei?


Datei? Was für eine Datei?
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Re: Problem mit DELETE in PHP

Postby medium » 14. January 2009 17:10

Ich denke er meint ob er alles (Eintragen, Löschen, Bearbeiten, ...) in eine Datei schreiben soll oder in mehrere...
medium
 
Posts: 8
Joined: 10. January 2009 00:54

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests