Renton: javascript-php-mysql problem

Hi,
habe folgendes Problem:

Ich habe eine Seite entworfen, in welcher man links einfügen & löschen kann durch mysql (bin erst seit einem monat mit php usw. vertraut).

Nun wollte ich das löschen durch eine weitere Abfrage bestätigen lassen. Allerdings löscht er nach der Abfrage entweder oder er tut garnichts. Was wäre hier wohl die geschickteste lösung?

Vielen Dank im Vorraus und hier mein Code:

...

@mysql_connect('*****','*****','') OR die(mysql_error());
          mysql_select_db('*****') OR    die(mysql_error());

$sql="SELECT
                Name
          FROM
           links;";

echo <<<END_1
<html>
<head>
<body>

<script type="text/javascript">
var check = confirm("Link wirklich löschen?");
if (check == false)
  history.back();
</script>

</body>
</head>
</html>

END_1;

$loesch = "DELETE FROM links WHERE Name = '".$_POST['feld']."'";
$kill = mysql_query($loesch);

echo "<h1>'".$_POST['feld']."'wurde gelöscht</h1>";

...

  1. Hallo,

    da missverstehst du etwas grundsätzlich und wirfst clientseitige und serverseitige Logik durcheinander.

    Du kannst nicht mit browserseitigem JavaScript ein serverseitiges Script anhalten oder verzögern. Halte dir mal vor Augen, wie die Kommunikation zwischen Webserver und Browser funktioniert und wie PHP und JavaScript überhaupt ausgeführt werden:

    1. Der Browser sendet die Anfrage an den Server und verlangt das PHP-Script
    2. Der Server führt das PHP-Script aus. (Es läuft bis zu seinem Ende.)
    3. Das Script gibt i.d.R. ein HTML-Dokument zurück, das vom Webserver an den Browser durchgereicht wird. (Zu dem Zeitpunkt läuft das PHP-Script gar nicht mehr.)
    4. Der Browser zeigt das Dokument an und führt das JavaScript aus. (Zu dem Zeitpunkt ist auf dem Server schon alles gelaufen und die HTTP-Verbindung beendet.)

    Wenn du also im PHP-Script einen Löschbefehl notierst, dann wird der auch immer ausgeführt. Ob du zwischen Datenbank-Connect und -Query irgendwelchen Code ausgibst, ist dem PHP-Interpreter völlig egal. Wenn der JavaScript-Code im Browser ausgeführt wird, wurde das Script schon längst fertig auf dem Server ausgeführt.

    Du kannst ein PHP-Script nicht an irgendeiner Stelle »anhalten«, ein JavaScript-Meldefenster im Browser anzeigen lassen, und dann das Script weiterlaufen lassen. Das geht konzeptionell schon nicht, wie klar geworden sein sollte. In PHP musst du immer mit dem Client-Server- bzw. dem Abfrage-Modell von HTTP arbeiten: Browser stellt Anfrage an den Server, PHP-Script läuft, generiert die Antwort, Antwort wird im Browser gezeigt.

    Wie du nun eine Bestätigung einbauen kannst: Der Browser darf das Löschscript überhaupt nur anfragen, wenn der Benutzer dies bestätigt. Zum Beispiel beim Link darauf mit JavaScript:

    <a href="loeschscript.php" onclick="return confirm('wirklich löschen?')">Löschen</a>

    Oder das Löschscript zeigt zuerst einmal ein Bestätigungsformular, das die Formulardaten an sich selbst schickt. Es übergibt sich dann einen bestimmten Parameter. Wenn dieser gesetzt ist, wird gelöscht, wenn nicht, dann nur das Bestätigungsformular angezeigt:

    <?php
    if (isset($_POST['confirm'])) {
      /* .. lösche aus Datenbank ... */
    } else {
    ?>
    <form action="" method="post">
    <p><input type="submit" name="confirm" value="Löschen bestätigen"></p>
    </form>
    <?php
    }
    ?>

    Mathias

    1. echo $begrüßung;

      Wie du nun eine Bestätigung einbauen kannst: Der Browser darf das Löschscript überhaupt nur anfragen, wenn der Benutzer dies bestätigt. Zum Beispiel beim Link darauf mit JavaScript:

      <a href="loeschscript.php" onclick="return confirm('wirklich löschen?')">Löschen</a>

      Diese Variante ist nicht zu empfehlen. Oder allgemeiner: Alle Requests die Daten verändern sollten nicht über einen einfachen Link ausgelöst werden können. Auch dann nicht, wenn dieser durch Javascript "gesichert" ist. Wenn man über eine Seite mit solchen Links mal einen Linkchecker drüberschickt, dann ignoriert dieser das Javascript und folgt fröhlich den Links ...

      Oder das Löschscript zeigt zuerst einmal ein Bestätigungsformular, das die Formulardaten an sich selbst schickt.
      <form action="" method="post">

      So ist das schon besser. POST-Formulare werden im Allgemeinen von Suchmaschinen und anderen (gutartigen) Automatismen nicht weiter aufgerufen.

      echo "$verabschiedung $name";