Beim Umgang mit Daten ist es Pflicht den Benutzer vor dem endgültigen Löschen
eines Datensatzes zu fragen, ob er das wirklich möchte, denn schnell ist man
mal auf die Schaltfläche gekommen und die Gefahr von irreparablem Datenverlust
groß. In "normalen" Anwendungen geht dann meist eine Dialog-Box auf die fragt
"Möchten Sie diesen Datensatz wirklich löschen", die der Benutzer bestätigen
muss.
In ASP-Anwendungen ist as aber nicht so einfach eine solche Dialog-Box vor
dem Löschen anzuzeigen, auch wenn es mit Javascript geht. Eine Alternative hierzu
soll hier vorgestellt werden, die auch noch den Charme hat eine reine HTML-Seite
und für mehrere Seiten verwendbar zu sein.
Die aufrufende Seite
Bauen wir zunächst eine Seite, die eine gewisse Anzahl Datensätze aus einer
Datenbank in einer HTML-Tabelle darstellt und jeden Eintrag mit einer Löschen-Schaltfläche
versieht:
<table border="0" width="300">
<%
'Öffnen der Datenbank-Verbindung per UDL-Datei
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "file name=" & Server.MapPath("kontakte.udl")
'Öffnen des Recordsets
Set rs = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM tblKontakte"
rs.Open strSQL, objConn
Set fldID = rs.Fields("ID")
Set fldVorname = rs.Fields("Vorname")
Set fldNachname = rs.Fields("Nachname")
'Schleife über alle Datensätze der Tabelle
Do Until rs.EOF
%>
<tr>
<td class="row" width="240" height="30">
<%response.write(fldNachname & ", " & fldVorname)%>
</td>
<td class="row" width="60" height="30">
<input type="button" value="Löschen" name="cmdDelete_<%response.write(fldID)%>">
</td>
</tr>
<%
rs.MoveNext
Loop
'Schließen des Recordsets und der Verbindung
rs.close
Set rs = nothing
objConn.Close
Set objConn = Nothing
%>
</table>
Das ganze sieht dann ungefähr so aus:

Wie der aufmerksame Beobachter bemerkt haben wird, sind die INPUT-Schaltflächen
nicht Bestandteil eines HTML-Formulars. Dies hat den Grund, dass die Schaltflächen
jeweils ein onClick-Event erhalten, um die nachfolgende Seite aufzurufen, was
es u.a. ermöglicht weitere Schaltflächen wie "Editieren" o.ä. einfach zu integrieren:
onclick="jumpDeletePage('<%response.write(fldID)%>');"
Die dort aufgerufene JavaScript-Funktion wird im Header definiert und dient
zum Aufruf der Sicherheitsabfrageseite "question.asp", der zum einen über den
Parameter id die zu löschende ID des Datensatzes mitgegeben
wird. Zum anderen wird über den Parameter qst definiert,
wie auf der Seite weiter verfahren werden soll.
<script language="javascript"><!--
function jumpDeletePage(sID) {
window.location.href = "question.asp?qst=1&id=" +
sID; }
//--></script>
Die Sicherheitsabfrage
Diese Seite besteht lediglich aus einer entsprechenden Frage und den beiden
Schaltflächen JA und NEIN, zwischen denen der Benutzer wählen kann.

Im ASP-Code der Seite werden zunächst die beiden übergebenen Parameter ausgelesen
und Variablen zugewiesen. Danach wird anhand der Variablen
intQuestID entschieden welcher Text angezeigt werden
soll und wohin die Reise beim Klick auf die Schaltfläche JA geht. Über die Schaltfläche
NEIN gehts mit Hilfe der Server-Variable "HTTP_REFERER" zurück zur vorherigen
Seite. Wichtig ist, dass der Löschseite (Klick auf JA) neben der ID des Datensatzes
auch mitgegeben wird, woher die Anfrage ursprünglich kam, um nach Abschluss
des Löschvorgang wieder dorthin navigieren zu können.
<%
'Auslesen der Parameter
intQuestID = CInt(Request.QueryString("qst"))
intID = CInt(Request.QueryString("id"))
Select Case intQuestID
case 1
strQuestion = "Bist Du sicher, dass Du diesen Kontakt löschen möchtest?"
strPageYes = "kontakt_delete.asp?id="& intID
End select
strPageYes = strPageYes & "&refer=" & Request.ServerVariables("HTTP_REFERER")
strPageNo = Request.ServerVariables("HTTP_REFERER")
%>
Die Löschseite
Die eigentliche Arbeit des Löschens wird hier in einem knappen ASP-Statement
ohne jeglichen HTML-Code abgehandelt, da nach dem erfolgten Löschen des Datensatzes
ja sofort wieder zum Ausgangspunkt zurückgesprungen wird:
<%
'Auslesen der Parameter
intID = CInt(Request.QueryString("id"))
strReferrer = Trim(Request.QueryString("refer"))
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "file name=" & Server.MapPath("kontakte.udl")
'Absetzen des DELETE-Statements
strSQL = "DELETE * FROM tblKontakte WHERE ID=" & intID
objConn.Execute strSQL, , adExecuteNoRecords
'Schließen der Verbindung
objConn.Close
Set objConn = Nothing
'Aufrufen der Ursprungsseite
Response.redirect(strReferrer)
%>
Downloads
sicherheitsabfrage.zip