chribu
Goto Top

Sicherheitsabfrage vor dem Löschen eines Datensatzes

Hallo Leute,

ich habe ein kleines Problem mit meinem Formular(HTML/PHP mit MySQL-DB anbindung)!

Wie bekomme ich es hin, dass ich, wenn ich den Löschenbutton drücke, erst eine Sicherheitsabfrage bekomme z.B. "Sind sie sicher, dass sie diesen Datensatz löschen mächten?" und wenn ich diese mit ja bestätige, soll der weiter Löschenverlauf folgen (DELETE FROM...blablabla sql abfrage)!

Wenn ich auf nein drücke soll er nichts machen, also zu dem geöffneten Fenster zurückspringen!

GIbt es da eine Lösung für?

Danke schon im vorraus

Chribu
[EDIT masterG 20.09.2007 14:51]:
Nach dem dieser Thread schon eine weile gelöst ist werde ich ihn schließen.

Content-Key: 40190

Url: https://administrator.de/contentid/40190

Printed on: April 23, 2024 at 20:04 o'clock

Member: Dani
Dani Sep 15, 2006 at 10:11:52 (UTC)
Goto Top
Hi,
ich habe sowas mit Javascript realisiert.

<script language="JavaScript" type="text/JavaScript">  
<!--
function confirmSubmit()
{
    var agree=confirm("Sind Sie sich sicher?");  
    if (agree)
    return true ;
    else
    return false ;
}
</script>
<a onclick="return confirmSubmit()" href="VERWEISE AUF DATEI" class=link1>l&ouml;schen</a>
Wenn du Ja klickst wird der Datensatz gelöscht.


Gruß
Dani
Member: Chribu
Chribu Sep 15, 2006 at 10:42:13 (UTC)
Goto Top
Hi Dani,

also bei mir sieht das ja so aus:

/*Löschen Button*/
if (isset($_POST['loeschen']))  
{
$sql = "DELETE FROM infotain_neu WHERE  
Servername = '".$_POST['dd']."'";  
mysql_query($sql);
echo "Der Datensatz wurde gelöscht<p>";  
}

/*Wenn "Submit"-Button gedrückt wurde, dann zeige Formular mit allen Details*/         
if (isset($_POST['dd']))  
{
..........

Ähm nur wie soll ich das mit dem <a onklick.. > machen?

Danke nochmal!

Gibt es auch andere Lösungsmöglichkeiten? (da ja nicht jeder Browser java aktiv hat!)

Cya

Chribu
Member: Dani
Dani Sep 15, 2006 at 11:59:53 (UTC)
Goto Top
Hi,
der Quellcode von deiner Löscheseite muss dann so aussehen:
$sql = "DELETE FROM infotain_neu WHERE Servername = '".$_POST['dd']."'";  
mysql_query($sql);

Diese Seite bindest bei meinem Link oben ein! Geht eigentlich immer! Ist übrigends die gleieche Funktion, wenn du hier eine Nachricht löschst.!


Gruß
Dani
Member: EvilMoe
EvilMoe Sep 17, 2006 at 08:26:41 (UTC)
Goto Top
Hi

bei mir funktionierts wunderbar danke !
Member: Guenni
Guenni Sep 17, 2006 at 18:25:06 (UTC)
Goto Top
@Chribu

Hi,

Lösungsbeispiel ohne JavaScript.

Auf der Ergebnisseite deiner Auswahl kannst du ohne weiteres einen
Button in ein eigenes Formular verpacken, das ein Script aufruft,
dass dir den zum Löschen ausgewählten Datensatz nochmals
anzeigt, wo dann entweder die Bestätigung zum Löschen erfolgt,
oder der Löschvorgang abgebrochen wird.

Das Form:
<form action="drop.php?server=<?echo $server;?>" method="post">  
<input type="submit" name="cmd" value="Loeschen"/>  
</form>

Die Seite drop.php baut sich dann wie folgt auf:

// Folg. Code wird ausgeführt, wenn zur Löschbestätigung der Button "Ja" 
// angeklickt wurde.
// 
if($cmd=="Ja"){  
 $conn=mysql_connect("localhost","guenni","guenni") or die(mysql_error());  
 $db=mysql_select_db("test") or die("Konnte die Datenbank nicht waehlen.");  
 $sql="delete from computer where id=$server";  
 mysql_query($sql,$conn);
 header("location:index.php"); // Nach dem Löschen zurück zur Startseite, Erklärung  
// weiter unten
}

// Wurde der Button "Nein" angeklickt, wird die Seite drop.php verlassen  
if($cmd=="Nein"){  
 header("location:edit.php?server=$server"); // Zurück zur Editierseite,  
// Erklärung weiter unten
}

// Der zum Löschen vorgesehene Datensatz wird angezeigt
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
$conn=mysql_connect("localhost","guenni","guenni") or die(mysql_error());  
$db=mysql_select_db("test") or die("Konnte die Datenbank nicht waehlen.");  
$sql="SELECT * FROM computer WHERE id = $server";  
$result = mysql_query($sql,$conn);
$row=mysql_fetch_array($result,MYSQL_ASSOC);
$server=$row[id];
Soll dieser Datensatz wirklich gelöscht werden ?
echo "<table border=1>";  
echo "<tr>";  
while($field=key($row)){
 echo "<th>";  
 echo $field;
 next($row);
}
echo "</tr>";  
$result = mysql_query($sql,$conn);
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
 echo "<tr><td>";  
 echo implode("<td>",$row);  
}
echo "</table>";  
<form action="drop.php?server=<? echo $server;?>" method="post">  
<input type="submit" name="cmd" value="Ja" />  
<input type="submit" name="cmd" value="Nein" />  
</form>
Erklärung:

Im Tread -->

hatte ich Franzmann geschrieben, dass ich versch. Vorgänge wie Einfügen,
Löschen, Editieren von Datensätzen immer auf entsprechende Seiten verteile.

Daher die Weiterleitung via header("location:...... .

Ich finde das wesentlich übersichtlicher, als wenn man den kompletten
Code in eine einzige Seite packt.

Gruß
Günni
Member: Chribu
Chribu Sep 18, 2006 at 07:23:53 (UTC)
Goto Top
Hallo!!

Danke für eure Antworten!

Ich habe mich jetzt mal mit dem JavaScript Code auseinandergesetzt!

Hier meine delete.php:

<?php

//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);

/*Datenbankverbindung aufbauen*/
$db = mysql_connect("localhost","root","") or die(mysql_error());  
mysql_select_db("test", $db) or die("Konnte die Datenbank nicht waehlen.");  

$sql = "DELETE FROM infotain_neu WHERE Servername = '".$_POST['dd']."'";  
mysql_query($sql);

mysql_close($db);
?>

So und hier meine Ergebnisseite:

<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body>
<p><strong><u>Servermanager >>> Server ändern oder löschen</u></strong></p>
<p>
<script language="JavaScript" type="text/JavaScript">  
<!--
function confirmSubmit()
{
    var agree=confirm("Sind Sie sich sicher, dass Sie diesen Server löschen wollen?");  
    if (agree)
    return true ;
    else
    return false ;
}
</script>

  <?php
//alle Fehler im Browser anzeigen

usw.........

Hier mein Link:

echo "<a onclick='return confirmSubmit()' href='delete.php' class='link1'>Löschen</a>";  

So wenn ich nun auf den Link klicke bekomme ich zwar die gewünschte Sicherheitsabfrage, doch löscht er keinen Datensatz aus der MySQL-DB!

Hab ich was vergessen?

Danke

Chribu
Member: EvilMoe
EvilMoe Sep 18, 2006 at 08:09:54 (UTC)
Goto Top
wurdest du richtig an die delete.php weitergeleitet?
Member: Chribu
Chribu Sep 18, 2006 at 08:35:40 (UTC)
Goto Top
Jop wurde ich!

Nachdem ich das error_reporting auch eingefügt hatte bekam ich folgende Fehlermeldung!

Notice: Undefined index: dd in E:\TYPO3\htdocs\prokom srv manager\delete.php on line 11

Das ist doch ein Indiz dafür, dass die Variable "'$_Post['dd']'" nicht gesetzt worden ist, sprich nicht weis welchen Server er löschen soll!

Dann muss doch am QUellcode was schief gelaufen sein!

Muss ich die irgendwie includen oder so?

Cya

Chribu
Member: Guenni
Guenni Sep 18, 2006 at 19:13:55 (UTC)
Goto Top
@Chribu

Hi,

wenn du die Seite delete.php via Link aufrufst, und erwartest, dass da was
passiert, so mußt du dem Link auch einen Parameter mitgeben.

echo "<a onclick='return confirmSubmit()' href='delete.php?para=$dd' class='link1'>Löschen</a>";  

Eine Auswertung mit $_POST[……

$sql = "DELETE FROM infotain_neu WHERE Servername = '".$_POST['dd']."'";  

bringt ebenfalls nichts, weil Variablen bzw. Parameter, die via Link übertragen
werden, mit der Methode GET ausgewertet werden. Also...

$sql = "DELETE FROM infotain_neu WHERE Servername = '".$_GET['para']."'";  

oder einfach

$sql = "DELETE FROM infotain_neu WHERE Servername = $para";  

Der Parameter para (…'delete.php?para=<?echo $dd;?>…) enthält dann den
Wert von $dd, und kann ganz normal als Variable $para weiterverarbeitet werden.

Tipp:

Wenn du Variablen an andere Seiten weiterleitest, ob mit Form oder Link,
so lass' dir auf den Seiten als erstes mal mittels echo $Variable; anzeigen,
ob die Daten überhaupt korrekt übermittelt wurden.

Wenn ja, dann Aktionen mit den Werten programmieren face-smile.

Grüße
Günni
Member: Chribu
Chribu Sep 19, 2006 at 07:18:22 (UTC)
Goto Top
Hallo Günni,

ich habe das jetzt nach deinen Anweisungen versucht:

Hier mein Link: (ZEILE 85)

echo "<a onclick='return confirmSubmit()' href='delete.php?para=$dd' class='link1'>Löschen</a>";  

Und dann rufe ich das Formular auf und bekomme schon in der Ergebnisseite folgende Fehlermeldung:

Notice: Undefined variable: dd in E:\TYPO3\htdocs\prokom srv manager\form3t.php on line 85

Also konnte er mit der Variable nichts anfangen! Habe die auch mal mit $_Post ausgetauscht aber hat auch nicht hingehauen.

So hier meine delete.php:
echo "$para"; //Zeile 11  

$sql = "DELETE FROM infotain_neu WHERE Servername = $para"; //Zeile 13  
mysql_query($sql) or die ("Es ist ein Fehler aufgetreten");  
Und folgender Fehler tritt auf der delete.php auf:

Notice: Undefined variable: para in E:\TYPO3\htdocs\prokom srv manager\delete.php on line 11

Notice: Undefined variable: para in E:\TYPO3\htdocs\prokom srv manager\delete.php on line 13
Es ist ein Fehler aufgetreten


So och habe doch deinen Rat befolgt, oder bin ich grade zu blind dafür das hinzubekommen?

Danke nochmal!

Chribu
Member: Chribu
Chribu Sep 19, 2006 at 08:59:33 (UTC)
Goto Top
Alles okay es läuft jetzt!

Ich habe es hinbekommen, indem ich die Variablen davor nochmal gesetzt habe!

Genau so:

(delete.php)

$para=$_GET['para'];  
echo "<font color='red'>Der Server '".$_GET['para']."' wurde gelöscht!</color>  
";  
echo "<a href='form3t.php' class='link1'>Zurück zum Formular</a>";  
$sql = "DELETE FROM infotain_neu WHERE Servername = '".$_GET['para']."'";  

Und hier meine Ergebnisseite:
  $dd=$_POST['dd'];  
   echo "<a onclick='return confirmSubmit()' href='delete.php?para=$dd' class='link1'>Löschen</a>";  

Danke nochmal an ALLE!

Cya

Chribu