Javascript

Sicherheitsabfrage mit Javascript

Datensatzmanipulation leicht gemacht

Beim Umgang mit Datensätzen ist es elementar, den Benutzer vor sich selbst zu schützen, d.h. der Entwickler sollte z.B. vor dem Löschen von Datensätzen nachfragen, ob diese Aktion wirklich gewollt ist. Im Artikel Sicherheitsabfrage mit ASP habe ich dargestellt, wie man eine solche Sicherheitsabfrage mit reinem ASP bewerkstelligt und bereits angedeutet, dass es für dieses Problem auch eine Javascript-Lösung gibt, bei der sich nach dem Klick auf die Löschen-Schaltfläche eine entsprechende Dialogbox öffnet. Die hier vorgestellte Lösung geht aber noch einen Schritt weiter und implementiert eine weitere Datenmanipulation, nämlich das Speichern eines Datensatzes, über das gleiche Funktionsschema. Das Schema ist beliebig erweiterbar.

Der Ansatz besteht aus zwei ASP-Seiten: einer Datensatzliste und einer Aktionsseite, die die Datensatzmanipulation durchführt.

Die Datensatzliste

Verwenden wir eine kleine Access-Datenbank als Datenquelle und erzeugen über eine Schleife auf der Tabelle "tblKontakte" im Body der ASP-Seite eine Datensatzliste, deren Einträge jeweils zwei Schaltflächen zum Löschen und Speichern beinhalten:

<form method="POST" name="frm" action="">
<table border="0" width="400" style="border-collapse: collapse">

<%
   'Ö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 fldVN = rs.Fields("Vorname")
   Set fldNN = rs.Fields("Nachname")
   Set fldStr = rs.Fields("Strasse")
   Set fldPLZ = rs.Fields("PLZ")
   Set fldOrt = rs.Fields("Ort")

   'Schleife über alle Datensätze der Tabelle
   Do Until rs.EOF
%>
   <!-- Vorname und Nachname -->
   <tr><td>
      <input type="text" name="txtNN<%response.write fldID%>"size="17"
         value="<%response.write fldVN%>">
      <input type="text" name="txtVN<%response.write fldID%>"size="18"
         value="<%response.write fldNN%>">
   </td></tr>

   <!-- Strasse -->
   <tr><td>
      <input type="text" name="txtStr<%response.write fldID%>"size="40"
         value="<%response.write fldStr%>">
   </td></tr>

   <!-- PLZ und Ort -->
   <tr><td>
      <input type="text" name="txtPLZ<%response.write fldID%>"size="5"
         value="<%response.write fldPLZ%>">
      <input type="text" name="txtOrt<%response.write fldID%>"size="30"
         value="<%response.write fldOrt%>">
      </td></tr>

   <!-- Schaltflächen -->
   <tr><td>
      <input class="button" type="button" value="Löschen"
         name="cmdDelete<%response.write fldID%>"
         onclick="confirm_cmd(this.form,'DELETE', <%response.write fldID%>)">
      <input class="button" type="button" value="Speichern"
         name="cmdSave<%response.write fldID%>"
         onclick="run_cmd(this.form,'SAVE', <%response.write fldID%>)">
      </td></tr>

   <!-- Trennzeile -->
   <tr><td><br><br></td></tr>
<%
      rs.MoveNext
   Loop

   'Schließen des Recordsets und der Verbindung
   rs.close
   Set rs = nothing
   objConn.Close
   Set objConn = Nothing
%>

Zu beachten ist, dass alle Formularelemente einen unterschiedlichen Namen erhalten, um nachher auf die richtigen Formularfelder zugreifen zu können. Dies wird erreicht, indem einfach die Datensatz-ID dem jeweiligen Namen angehängt wird.

Das Formular, über das die ausführende ASP-Seite aufgerufen wird, trägt kein Action-Attribut, denn dieses wird erst über die Javascript-Funktion run_cmd in Abhängigkeit der gedrückten Schaltfläche gesetzt. Dieser Funktion wird, neben dem Eingangsparameter frm, der das Formular bezeichnet, das auszuführende Kommando als String und die Datensatz-ID übergeben.

Die Sicherheitsabfrage per Dialog wird erreicht, indem beim Klick auf die Löschen-Schaltfläche nicht sofort die Funktion run_cmd aufgerufen wird, sondern die vorgelagerte Funktion confirm_cmd, die dem Benutzer über den Javascript-Befehl CONFIRM eine Dialogbox anzeigt, über die er sich entscheiden kann, wie er weiter verfahren möchte.

Diese beiden Funktionen werden im Header der ASP-Seite abgelegt:

<script language="javascript"><!--
   function run_cmd(frm,cmd,id)
   {
      frm.action = "kontakt_action.asp?cmd=" + cmd + "&id="+ id
      frm.submit();
   }

   function confirm_cmd(frm, cmd, id)
   {
      msg = "Sind Sie sicher, daß Sie diesen Eintrag löschen möchten?";
      var agree=confirm(msg);
      if (agree)
         run_cmd(frm,'DELETE', id);
   }
//--></script>

Willi go...

Der Aufruf der ausführenden Seite "kontakt_action.asp" geschieht über die POST-Methode. Bevor wir jedoch die Formularfelder auswerten können, brauchen wir die ID, die neben dem Kommando als Parameter übergeben wurde. Die ersten Zeilen der lauten somit:

intID = CInt(Trim(Request.QueryString("id")))
strCmd = UCase(Trim(Request.QueryString("cmd")))

strNN = Request.Form("txtNN" & intID)
strVN = Request.Form("txtVN" & intID)
strStr = Request.Form("txtStr" & intID)
strPLZ = Request.Form("txtPLZ" & intID)
strOrt = Request.Form("txtOrt" & intID)

Mit diesen Werten können wir nun in Abhängigkeit des Kommandos die Datenmanipulation durchführen:

Select Case strCmd

   Case "DELETE"
      strShowCmd="<b> 'Löschen' für Datensatz " & intID & "</b>"
      'Code für das Löschen des Datensatzes
      '...

   Case "SAVE"
      strShowCmd = "<b> 'Speichern' für Datensatz " & intID & "</b><br><br>"
      strShowCmd = strShowCmd & "Vorname: " & strVN & "<br>"
      strShowCmd = strShowCmd & "Nachname: " & strNN &"<br>"
      strShowCmd = strShowCmd & "Strasse: " & strStr &"<br>"
      strShowCmd = strShowCmd & "PLZ: " & strPLZ & "<br>"
      strShowCmd = strShowCmd & "Ort: " & strOrt
      'Code für das Speichern des Datensatzes
      '...

End Select
kick it on dotnet-kicks.de AddThis Trackback-Url...

Schlagworte

128 Kommentare bislang...

  • The Louis Coach Outlet Store Online Vuitton Surya Coach Factory Online handbag got Coach Factory Online its name Coach Factory Store Online from the Coach Online Outlet Hindu sun Coach Online Outlet Store god of Coach Purse Outlet the same Coach Factory Outlet Online name. Shiny Burberry Scarf and bright Coach Outlet Online with patent Coach Outlet Online leather being Coach Factory perforated expertly Coach Factory Outlet to form Coach Factory Outlet Online the LV Coach Factory Store Online monogram logo Coach Outlet Store Online. The Surya Coach Online Outlet bag really Coach Factory Outlet shines, so Coach Factory Store it’s no Coach Purses Outlet wonder it Coach Outlet Store Online was named Coach Outlet Online Store after one Coach Factory Online of the Coach Factory forms of Coach Factory Store Online Shiva. It Coach Factory is said Coach Outlet that Surya had arms and hair of gold, and drives his chariot through the sky led by a horse with seven heads, or in some version seven horses.
    128
    Coach Outlet Online : Samstag, 7. Januar 2012 10:15
  • Walking in the streets nowadays, on the street at the foot of the MM the highest rate of non-wearing none other than UGG.'s Snow boots from Australia, not only the warm-level good, but with a high rate both with shorts or pants with feet are very fashion!
    127
    cheap ugg boots  : Donnerstag, 5. Januar 2012 08:57
  • I thought I would leave my first comment. I dont know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often.
    126
    ray ban : Freitag, 30. Dezember 2011 07:17
  • Walking in the streets nowadays, on the street at the foot of the MM the highest rate of non-wearing none other than UGG.'s Snow boots from Australia, not only the warm-level good, but with a high rate both with shorts or pants with feet are very fashion!

    125
    ugg boots for women  : Freitag, 30. Dezember 2011 06:57
  • I totally like the useful <a href="http://www.ray-ban.uk.com/">ray ban</a> info shared in the article.
    Your do have some unique ideas and I expect more <a href="http://www.ray-ban.uk.com/">ray bans</a> articles from you.
    I am glad to read some fantastic <a href="http://www.ray-ban.uk.com/">ray ban sunglasses</a> article like this.
    This <a href="http://www.ray-ban.uk.com/">ray ban uk</a> article is definitely eye-opening and inspiring.
    Thanks for the <a href="http://www.ray-ban.uk.com/aviator">ray ban aviator</a> info, it helps a lot.
    We share the opinion on <a href="http://www.ray-ban.uk.com/wayfarer">ray ban wayfarer</a> and I really enjoy reading your article.
    I love this <a href="http://www.ray-ban.uk.com/warrior">ray ban warrior</a> article since it is one of those which truly convey useful ideas.
    This is the best <a href="http://www.ray-ban.uk.com/">ray ban sale</a> article I have ever found on the Internet.
    Remember <a href="http://www.ray-ban.uk.com/ray-ban-2132">ray ban 2132</a> when you are interested in the best relaxed.
    Country where there tend to be more <a href="http://www.ray-ban.uk.com/ray-ban-3025">ray ban 3025</a> that can be used in the country.
    Pandora jewellery is created with only the very best <a href="http://www.ray-ban.uk.com/ray-ban-2140">ray ban 2140</a> and top-quality engineering and design.
    124
    ray ban : Freitag, 30. Dezember 2011 06:52

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 12

  • Datum: 23.02.2005
    Kategorie: Javascript
    Zugriffe: 4.991
    Kommentare: 128
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei