ha-bauer: Bestimmten Datensatz auf Klick hin aus Datenbank löschen

Hallo zusammen,

ich probiere gerade, bestimmte Datensätze auf einen Klick hin zu löschen. Dabei verwende ich folgenden Code:

echo "[ <a href='javascript:history.back()'>Zurück</a> ] [ <a href='newsletter-archive.php?delete=$id'>Nachricht löschen</a> ]<br>";  
  $sql_delete = "DELETE FROM newsletter WHERE id = '$id'";  
  if (mysql_query($sql_delete)) {  
    if (mysql_affected_rows() > 0) {  
      echo "<strong>Die Nachricht wurde erfolgreich gelöscht!</strong>";  
    }  
    else {  
      echo "<strong>Die Nachricht wurde nicht gelöscht (warum auch immer :)...)</strong>";  
    }  
  }

Aber wenn ich den Quellcode so verwende, wird der Datensatz auch bei Klick auf "Zurück" gelöscht (und die Statusmeldung, also "Nachricht wurde gelöscht / nicht gelöscht", erscheint auch nicht). Irgendwie muss ich abfragen, ob auf "Nachricht löschen" geklickt wurde. Ich weiß nur nicht, wie ... Habe schon Verschiedenes probiert mit if (isset($_GET["delete"])) ... und if ($_SERVER["QUERY_STRING"] == "?delete=$id") ..., aber es hat irgendwie nie richtig funktioniert. Hat irgendjemand eine Idee, wie ich dieses Problem lösen könnte?
Vielen Dank,
ha-bauer

  1. Hi
    »»~~~php if (isset($_GET["delete"]))
    { //nur dann löschen
    }

      
    müsste so gehen  
      
    lg, david
    
    1. Hai

      müsste so gehen

      nicht wirklich,
      er verwendet JavaScript.history.back(),
      damit wird die komplette URL erneut gesendet, inclusive aller Parameter.

      m.b.G. Rolf

      1. Hi,

        müsste so gehen
        nicht wirklich,
        er verwendet JavaScript.history.back(),
        damit wird die komplette URL erneut gesendet, inclusive aller Parameter.

        aber nur wenn er vorher bei löschen war, oder?

        lg, david

        1. er verwendet JavaScript.history.back(),
          damit wird die komplette URL erneut gesendet, inclusive aller Parameter.

          Gut, wenn es daran liegt: Ich kann auch einfach mit einem normalen link <a href="newsletter-archive.php">Zurück</a> zur Übersicht zurückleiten, wenn das hilft. Sollte es dann mit if (isset($_GET["delete"]) ... gehen, oder wie kann man das dann machen?
          Vielen Dank schonmal für diese zahlreichen Antworten.
          ha-bauer

          1. Hi,

            Gut, wenn es daran liegt: Ich kann auch einfach mit einem normalen link <a href="newsletter-archive.php">Zurück</a> zur Übersicht zurückleiten, wenn das hilft. Sollte es dann mit if (isset($_GET["delete"])) ... gehen, oder wie kann man das dann machen?
            Vielen Dank schonmal für diese zahlreichen Antworten.
            ha-bauer

            sollte so funktionieren. probiers mal aus

            lg, davidp

            1. sollte so funktionieren. probiers mal aus

              Habs mal so probiert, aber irgendwie - ich weiß nicht warum - geht das nicht. Aber es ist eigentlich auch egal. Ich verwende diese Funktion nur zum Löschen von alten Newslettern: Die kann man ja dann über PHPMyAdmin löschen. Aber wenn jemand noch eine bessere (funktionierende) Lösung hätte, wäre das natürlich schön.

              Viele Grüße,
              ha-bauer

              1. Hi,

                wie schaut denn der quelltext jetzt aus?

                lg, davidp

                1. Hi,

                  wie schaut denn der quelltext jetzt aus?

                  lg, davidp

                  Hi davidp,
                  ich habe das Löschfeature jetzt einmal auf der Seite mit der Übersicht der Newsletter eingebaut. Der Quelltext sieht jetzt so aus:

                  $id = $row[id];  
                  echo "<a href='newsletter-archive.php?id=$row[id]'>-> $Betreff</a> (<em>geschrieben am</em> $Datum)   |   -> <a href='newsletter-archive.php?delete=$id'>Löschen?</a><br>";  
                      $sql_delete = "DELETE FROM newsletter WHERE id = '$id'";  
                      if (isset($_GET["delete"])) {  
                        if (mysql_query($sql_delete)) {  
                          if (mysql_affected_rows() > 0) {  
                            echo "<strong>Die Nachricht wurde erfolgreich gelöscht!</strong>";  
                          }  
                          else {  
                            echo "<strong>Die Nachricht wurde nicht gelöscht (warum auch immer ...)</strong>";  
                          }  
                        }  
                      }
                  

                  Wenn ich jetzt also (nur bei einem Newsletter) auf Löschen klicke und mehrere Newsletter im Archiv sind (was später einmal der Fall sein wird, nehme ich an), dann steht plötzlich bei allen Newslettern der Text "Die Nachricht wurde erfolgreich gelöscht!". Ich will doch aber nur den einen Newsletter löschen, bei dem ich auf "Löschen" geklickt habe.
                  Was muss ich tun, damit das klappt?
                  Hast du eine Idee?
                  Vielen Dank,
                  ha-bauer

      2. Hoi,

        das geht schon aus dem Grund nicht wirklich weil dann der Datensatz trotzdem angezeigt wird obwohl er geloescht wurde. Der Code ist totaler Unsinn und nicht zum ersten mal Hier. Oder hab ich nen Dejavu?

        Wir haben hier schlicht und einfach das uebeliche Problem des Auseinanderhaltens von clienseitiger und serverseitiger Programmierung.

        --
        "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
              - T. Pratchett
  2. echo $begrüßung;

    ich probiere gerade, bestimmte Datensätze auf einen Klick hin zu löschen.

    Das ist keine besonders gute Idee, denn ein Crawler klickt nicht bewusst, der verfolgt einfach alle Links ... und leer ist dein Archiv. Daten manipulierende Requests sollten POST verwenden, das verfolgen die Crawler im Allgemeinen nicht.

    $sql_delete = "DELETE FROM newsletter WHERE id = '$id'";

    Und wenn es der Crawler nicht leert, macht es vielleicht jemand per SQL-Injection.

    echo "$verabschiedung $name";