Microsoft Active Server Pages:
Kurzzusammenfassung einiger häufig benutzter ASP-Befehle
(in Verbindung mit VBScript)

+ andere TechDocs
+ serverseitige Programmierung
+ C# und .NET
+ Java, JSP
+


ASP hat zwei unterschiedliche Bedeutungen: "Active Server Pages" und "Application Service Providing". Im Folgenden soll es nur um "Microsoft Active Server Pages" gehen.

Einen Vergleich von MS-ASP zu anderen Techniken finden Sie unter Serverseitige Programmiertechniken für dynamische Webseiten mit Datenbankanbindung.

MS-ASP ist eine Technik zur Einbettung von serverseitig ausgeführten Skripten in HTML-Seiten. MS-ASP kann im Prinzip mit verschiedenen Skriptsprachen kombiniert werden, wird aber fast nur mit VBScript verwendet. Fast alle Beispiele und Dokumentationen setzen VBScript voraus. Da VBScript alleine nicht mächtig genug ist, wird komplexerer Code in COM- oder ActiveX-Komponenten verlagert. Die Microsoft-ActiveX-Library ist nur unter Windows mit dem Microsoft Internet Information Server (IIS) verfügbar.

Im Nachfolger von MS-ASP, dem neuen ASP.NET, kommt nicht mehr VBScript zur Anwendung. Es können theoretisch alle .NET-Programmiersprachen eingesetzt werden. In den üblichen Dokumentationen und Beispielen wird Visual Basic .NET und C# verwendet. Informationen zu .NET und C# finden Sie unter C#, IL, CLR und .NET.



Inhalt

  1. Weiterführende Informationen
  2. Übliche Position für ASP-Aufrufe im HTML-Dokument
  3. Einige Konventionen und Operatoren
  4. Verzweigungen und Schleifen
  5. Einige Daten und Funktionen
  6. Beispiel: Alle Formulardaten anzeigen
  7. Beispiel: Formulardaten überprüfen
  8. Beispiele: Datenbankzugriff (SQL-INSERT, mit VBScript, mit JScript)


Weiterführende Informationen



Übliche Position für ASP-Aufrufe im HTML-Dokument

<html>
  <head>
    ...
  </head>
  <body>
    <%
      Response.Write( "Hallo 1!" )
    %>
    <%
      ="Hallo 2!"
    %>
    ...
  </body>
</html>
<html> schließt das gesamte HTML-Dokument ein.
<head> schließt den Header ein.
<body> schließt den Hauptteil ein.
ASP-Kommandos sind in <% ... %> eingeschlossen und befinden sich meistens im Hauptteil.
Sie können auch in einer externen Datei enthalten sein, die per SSI-Include eingebunden wird:
<!--#include file=incl.asp"-->
oder
<!--#include virtual=/inc/incl.asp"-->
file bezeichnet einen Pfad relativ zur aktuellen Datei, virtual einen virtuellen Pfad.


Einige Konventionen und Operatoren

'KommentarText Komentare werden mit Hochkomma begonnen.
Response.Write( _
  "Hallo !" )
Der Unterstrich '_' verbindet Zeilen (und darf nicht in Namen benutzt werden).
Dim VariablenName
Dim ArrayName(11)
Dim deklariert Variablen (kann aber weggelassen werden).
Arrays werden mit runden Klammern deklariert. Die Zählung beginnt bei 0, der angegebene Index bezeichnet den höchstmöglichen Index, es gibt also ein Element mehr als den angegebenen Wert.
OPTION EXPLICIT Damit müssen Variablen mit Dim deklariert werden.
Set objInstName = ...
Set objInstName = Nothing
Set deklariert Objekt-Instanzen (kann aber weggelassen werden). Z.B.
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Mit Nothing wird die Objekt-Instanz wieder aus dem Speicher entfernt. Z.B.
Set fso = Nothing
Function funktionsname( parm )
  ...
  funktionsname = ...
End Function
Funktionen returnieren ein Ergebnis.
Der Rückgabewert muss dem Funktionsnamen zugewiesen werden. Die Parameter werden in Klammern eingeschlossen.
Sub prozedurname1( parm )
  ...
End Sub
Sub prozedurname2 parm1 parm2
  ...
End Sub
Prozeduren returnieren kein Ergebnis.
Mehrere Parameter dürfen nicht in Klammern eingeschlossen werden. Ein einzelner Parameter kann mit oder ohne Klammern übergeben werden.
"", vbTab Sonderzeichen: "" für ", vbTab für Tabulator. Z.B.
Response.Write( vbTab & "--""--" )
& Addition zweier Strings (+ geht auch).
+, -, *, /, \, Mod, ^ Arithmetische Operatoren (\ = ganzzahlige Division, Mod = Modulo, ^ = Exponent).
=, <>, <, >, <=, >= Vergleichs-Operatoren (= für Gleichheit, <> für Ungleichheit).
And, Or, Xor, Not Logische Operatoren.


Verzweigungen und Schleifen

If ... Then ... Elseif ... Then ... Else ... End If If Else.
Select Case ...
  Case ...
    ...
  Case ...
    ...
  ...
  Case Else
    ...
End Select
Select Case.
For Each ...
  ...
Next
For Each.
For x=1 To 10 ... Next For (ohne Step wird um 1 erhöht).
For x=1 To 10 Step 2 ... Next For.
While ...
  ...
Wend
While.
Do While ...
  ...
Loop
Do While.
Do Until ...
  ...
Loop
Do Until.


Einige Daten und Funktionen

len( str ) Returniert Länge des Strings str.
InStr( str, subStr )
InStrRev( str, subStr )
Returniert Position des subStr in str.
InStrRev beginnt von hinten.
Left( str, nAnzahl )
Mid( str, nStart, nAnzahl )
Mid( str, nStart )
Right( str, nAnzahl )
Returniert Teilstrings.
Now, Date, Time Datum + Uhrzeit, nur Datum, nur Uhrzeit (auf dem Server).
Now+30 bedeutet: in 30 Tagen.
Year(), Month(), Day(), Weekday(),
Hour(), Minute(), Second()
Einzelne Zeitangaben eines Datumswertes, z.B.
Day(Now).
DateDiff( format, datum1, datum2 ) Differenz zweier Datumwerte. Mit format wird die Rückgabe-Einheit definiert: yyyy=Jahre, q=Quartale, m=Monate, d=Tage, h=Stunden, n=Minuten, s=Sekunden. Z.B.
DateDiff( "d", #01/01/2000#, Now )
Request...
Response...
Request: Anfrage-Daten vom Client.
Response: Ausgabe in HTML-Seite für Client.
Request.ServerVariable( "..." )
Request.ServerVariable("SCRIPT_NAME")
Request.ServerVariable("HTTP_USER_AGENT")
ServerVariable: Eine die Umgebungsvariablen beinhaltende Kollektion.
SCRIPT_NAME: Pfad + Name der aktuellen ASP-Datei.
HTTP_USER_AGENT: Client-Browser.
Request.Form( "..." )
Request.QueryString( "..." )
Form: Per POST (per HTTP) übergebene Formulareingaben lesen.
QueryString: Per GET (per URL) übergebene Formulareingaben lesen.
Response.Write( "..." )
="..."
Textausgabe.
Die Kurzform (="...") funktioniert nur, wenn keine anderen ASP-Anweisungen im <%...%>-Block sind.
Response.Redirect( "andereseite.asp" ) Umleitung. Vorher darf es keine HTML-Ausgaben geben.
Session( "..." ) = "..."
Request.Cookies...
Response.Cookies...
In der Kollektion Session können zu einem bestimmten Benutzer gehörenden Daten gespeichert werden (IDs, Name, Warenkorb, ...) (verwendet Cookies).
Z.B. Benutzername speichern:
Session("Benutzername") = Request.Form("Benutzername")
Z.B. Benutzername prüfen:
If Session("Benutzername") = "" Then ...
Die Kollektionen Request.Cookies und Response.Cookies bieten weitergehende Möglichkeiten (Expires, Domain, Path).
Set fso = Server.CreateObject( _
            "Scripting.FileSystemObject" )
Set dat = fso.OpenTextFile( _
            Server.MapPath( _
              "/dateiname.txt" ), _
            opt, erstell )
dat.ReadAll
dat.ReadLine
dat.WriteLine
dat.Write
dat.Close
Set dat = Nothing
Set fso = Nothing
Dateizugriff.
OpenTextFile erwartet den physikalischen Pfad (z.B. C:\INetPub\WwwRoot\Datei.txt). Ein virtueller kann mit Server.MapPath umgewandelt werden.
Als zweiter Parameter wird der Öffnungs-Modus übergeben: 1=Lesen, 2=Schreiben, 8=Anhängen.
Fehlt der dritte Parameter und soll in die Datei geschrieben werden, gibt es eine Fehlermeldung, wenn sie noch nicht existiert. Ist der dritte Parameter True wird in diesem Fall eine neue Datei erstellt.


Beispiel: Alle Formulardaten anzeigen

<html><body><table>
<tr><td>Name</td><td>Wert</td></tr>
<%
  For Each element in Request.Form
%>
<tr>
  <td><% =element %></td>
  <td><% =Request.Form(element) %></td>
</tr>
<%
  Next
%>
</table></body></html>
Diese ASP-Datei muss von der das Formular enthaltenden HTML-Seite aufgerufen werden mit:
<form action="formulardatenanzeige.asp" method="post">


Beispiel: Formulardaten überprüfen

<%
  name = True
  sprache = True
  If Request.Form("Versand") = _
     "Abschicken" Then
    If Request.Form("Vorname") = "" Then _
      name = False End If
    If Request.Form("Sprache") = "" Then _
      sprache = False End If
    If (name AND sprache) = True Then
      Response.Redirect("danke.asp")
    End If
  End If
%>
<html>
<body>
<%
  If (name AND sprache) = False Then
%>
<p>Bitte füllen Sie alle Felder aus !</p>
<%
  End If
%>
<form method="post">
<% If name=False Then %>
<font color="#FF0000"><% End If %>
Name
<% If name=False Then %>
</font><% End If %>
<input type="text" size="20"
       name="Vorname" value=
"<% =Request.Form("Vorname") %>">
<br>
<% If sprache=False Then %>
<font color="#FF0000"><% End If %>
Lieblingssprache
<% If sprache=False Then %>
</font><% End If %>
<select name="Sprache" size="3">
<option value="ASP"
<% If Request.Form("Sprache")="ASP" Then %>
selected
<% End If %>>ASP</option>
<option value="PHP"
<% If Request.Form("Sprache")="PHP" Then %>
selected
<% End If %>>PHP</option>
<option value="JSP"
<% If Request.Form("Sprache")="JSP" Then %>
selected
<% End If %>>JSP</option>
</select>
<br>
<input type="submit" name="Versand"
                     value="Abschicken">
</form>
</body>
</html>
In diesem ASP-Dokument stehen das Formular und der die Ergebnisse auswertende ASP-Code zusammen in einer Datei.
Deshalb wird das action-Attribut im <form>-Tag nicht gesetzt, wodurch die eingegebenen Formulardaten an die gleiche Seite zurückgesand werden.
Um den ersten Aufruf (ohne Formulardaten) vom zweiten Aufruf (mit eventuell nur teilweise ausgefüllten Formulardaten) unterscheiden zu können, bekommt der Submit-Button einen Namen:
<input type="submit" name="Versand" value="Abschicken">
Dann kann der erste vom zweiten Aufruf unterschieden werden mit:
If Request.Form("Versand") = "Abschicken"
Bei vollständig ausgefüllten Daten wird auf eine Bestätigungsseite umgeschaltet:
Response.Redirect("danke.asp")
Davor darf es keine HTML-Ausgaben geben.
Bei fehlenden Angaben wird das Formular erneut versand und die Felder mit fehlenden Einträgen rot gefärbt:
<font color="#FF0000">


Beispiele: Datenbankzugriff

Erklärungen zu ODBC-DSN-Namen und SQL: siehe SQL.
Für Microsoft-Access-Datenbankdateien (.mdb) genügt als Eröffnungskommando:
cn.Open "DSN=meinDsnName"
Soll eine Datenbank per ODBC angesprochen werden, wird "ODBC;" vorangestellt:
cn.Open "ODBC;DSN=meinDsnName"
Ist die Datenbank passwortgeschützt, müssen Benutzername und Passwort mit angegeben werden:
cn.Open "ODBC;DSN=meinDsnName;UID=meinName;PWD=geheim"
Source-Code-Beispiele sind funktionsfähig, aber ohne Fehlerbehandlung.

<%
  Set cn = Server.CreateObject( _
             "ADODB.Connection" )
  cn.Open "dsn=meinDsnName"
  cn.Execute( strSql )
  cn.Close
  Set cn = Nothing
%>
SQL-Kommando (z.B. "INSERT ...") ausführen.
<html><body>
<%
  Dim dsnName
  Dim tabName
  if Request.Form( "submit" ) = _
     "Datenbank lesen" Then
    dsnName = Request.Form( "dsn" )
    tabName = Request.Form( "tab" )
  Else
    dsnName = "Test-Datenbank"
    tabName = "Test-Tabelle"
  End If
%>
<form method="post"><pre>
  DSN-Name     <input type="text" _
    name="dsn" value="<%= dsnName %>"><br>
  Tabellenname <input type="text" _
    name="tab" value="<%= tabName %>"><br>
  <input type="submit" name="submit" _
    value="Datenbank lesen">
</pre></form>
<table border=1 cellspacing=0>
<%
  if Request.Form( "submit" ) = _
     "Datenbank lesen" Then
    Set cn  = Server.CreateObject( _
                "ADODB.Connection" )
    Set cmd = Server.CreateObject( _
                "ADODB.Command" )
    Set rs  = Server.CreateObject( _
                "ADODB.Recordset" )
    cn.Open "dsn=" & dsnName
    strSql = "SELECT * FROM " & _
                 tabName
    cmd.CommandText = strSql
    cmd.CommandType = 1
    Set cmd.ActiveConnection = cn
    rs.Open cmd, , 0, 1
    While Not rs.EOF
      Response.Write( "<tr>" )
      For Each feldelement in rs.Fields
        Response.Write( "<td>" & _
          feldelement & "</td>" )
      Next
      Response.Write( "</tr>" )
      rs.MoveNext
    Wend
    rs.Close
    cn.Close
    Set rs  = Nothing
    Set cmd = Nothing
    Set cn  = Nothing
  End If
%>
</table>
</body></html>
SQL-Recordset einlesen und anzeigen mit VBScript.
<%@ LANGUAGE="JSCRIPT" %>
<html><body>
<%
  var dsnName = "Test-Datenbank";
  var tabName = "Test-Tabelle";
  if( Request.Form( "submit" ) ==
      "Datenbank lesen" )
  {
    dsnName = Request.Form( "dsn" );
    tabName = Request.Form( "tab" );
  }
%>
<form method="post"><pre>
  DSN-Name     <input type="text" name="dsn"
                value="<%= dsnName %>"><br>
  Tabellenname <input type="text" name="tab"
                value="<%= tabName %>"><br>
  <input type="submit" name="submit"
   value="Datenbank lesen">
</pre></form>
<table border=1 cellspacing=0>
<%
  if( Request.Form( "submit" ) ==
      "Datenbank lesen" )
  {
    var db = Server.CreateObject(
               "ADODB.Connection" );
    db.Open( dsnName );
    var rs = db.Execute( "SELECT * FROM " +
                             tabName );
    while( !rs.EOF ) { %>
      <tr>
      <% for( i=0; i<rs.Fields.Count;
                   i++ ) { %>
        <td><%= rs(i) %></td>
      <% } %>
      </tr>
      <%
      rs.MoveNext();
    }
    db.Close();
  }
%>
</table>
</body></html>
SQL-Recordset einlesen und anzeigen mit JScript.


Weitere Themen: andere TechDocs | HTML | JavaScript | JSP | SQL | Webanwendungen | C#/.NET
© 1998-2007 Torsten Horn, Aachen