Einfacher Passwortschutz

<!-- START PASSWORT
(c) by: Steven Varco
See: www.tech-island.com for many more usefull Scripts
(Bitte diesen Vermerk stehen lassen!)
-->
<!--
<Script language="JavaScript">
var passwort=prompt("Bitte geben Sie das Passwort ein","xxxxx");
document.write('<META HTTP-EQUIV="REFRESH" content="0;URL=' + passwort + '.html">') </Script>
<CENTER><H2>Uups, falsches Passwort ?
Dann gehen Sie bitte auf reload</H2></CENTER>
//-->
<!-- END PASSWORT -->

String-trenner Funktion

Diese Funktionen musst ich mal während meiner LAP arbeit machen, findet selber raus wozu sie gut sind… 😉

char <em>strtrenner(char </em>string, char trennzeichen, int element)
//Gibt den n'ten teil eines strings zurück den man mit dem Trennzeichen unterteilt hat,
//wobei n = element.
//Beispiel:  stringtrenner("123:456:789", ':', 2)  =   "456"
//Wenn das Attribut element eine höhere Zahl erhält als der String Elemente besitzt wird das letzte Element
//zurückgegeben.
{
	static char returnstring [50];
	unsigned int  i_count;
	int  i_elementcount;
	int  i_endstrpos;
	int  i_startstrpos;
	i_startstrpos = 0;
	i_elementcount = 0;
	for(i_count = 0; (i_count <= strlen(string)) && (element != i_elementcount); i_count++)
	{
		if((string[i_count] == trennzeichen) || (string[i_count] == 'n'))
		{
			i_elementcount++;
			if(i_elementcount < element)
			{
				i_startstrpos = i_count+1;
			}
		}
	}
	i_endstrpos = i_count-1;
	strncpy(returnstring, &string[i_startstrpos], i_endstrpos - i_startstrpos);
	returnstring[i_endstrpos-i_startstrpos] = '';
	return returnstring;
}

Zeitfunktionen

long zeitinh(char *string, char trenn1, char trenn2, char trenn3)
//wandelt einen String der eine Zeit enthält in hundertstelsekunden um.
//erwartet wird ein string im format: HH:mm:ss:hh wobei der erste Doppelpunkt dem
//trenn1, der zweite dem trenn2 und der dritte dem trenn3 entspricht.
//Vorsicht: die funktion strtrenner() wird benötigt
{
  long l_hundertstel;
  char s_temp[12];
  l_hundertstel = 0;
  strcpy(s_temp, strtrenner(string, trenn1, 1));
  printf("n%st", s_temp);
  l_hundertstel += atoi(s_temp) <em> 60 </em> 60 * 100;
  strcpy(s_temp, strtrenner(strtrenner(string, trenn1, 2), trenn2, 1));
  printf("%st", s_temp);
  l_hundertstel += atoi(s_temp) <em> 60 </em> 100;
  strcpy(s_temp, strtrenner(strtrenner(strtrenner(string, trenn1, 3), trenn2, 2), trenn3, 1));
  printf("%st", s_temp);
  l_hundertstel += atoi(s_temp)  * 100;
  strcpy(s_temp, strtrenner(strtrenner(strtrenner(string, trenn1, 4), trenn2, 3), trenn3, 2));
  printf("%sn", s_temp);
  l_hundertstel += atoi(s_temp);
  return l_hundertstel;
}
 
 
 
 
 
char *zeitformatieren(long zeitinh, char trenn1, char trenn2, char trenn3)
//gegenstueck zu zeitinh()
//formatiert die zeit mit den angegebenen Trennzeichen
//als eingabe wird die zeit in hundertstelsekunden erwartet
{
  long l_hundertstel;
  static char returnstring[20];
  int stunden;
  int minuten;
  int sekunden;
  int hundertstel;
  l_hundertstel = zeitinh;
 
  stunden = l_hundertstel / 100 / 60 / 60;
  l_hundertstel -= stunden <em> 100 </em> 60 * 60;
  minuten = l_hundertstel / 100 / 60;
  l_hundertstel -= minuten <em> 100 </em> 60;
  sekunden = l_hundertstel / 100;
  l_hundertstel -= sekunden *100;
  hundertstel = l_hundertstel;
 
  strcpy(returnstring, "                   ");
 
  if(stunden >= 10)
    itoa(stunden, returnstring, 10);
  else
    itoa(stunden, &returnstring[1], 10);
  returnstring[2] = trenn1;
 
  if(minuten >= 10)
    itoa(minuten, &returnstring[3], 10);
  else
  {
    returnstring[3] = '0';
    itoa(minuten, &returnstring[4], 10);
  }
  returnstring[5] = trenn2;
 
  if(sekunden >= 10)
    itoa(sekunden, &returnstring[6], 10);
  else
  {
    returnstring[6] = '0';
    itoa(sekunden, &returnstring[7], 10);
  }
  returnstring[8] = trenn3;
 
  if(hundertstel >= 10)
    itoa(hundertstel, &returnstring[9], 10);
  else
  {
    returnstring[9] = '0';
    itoa(hundertstel, &returnstring[10], 10);
  }
  return returnstring;
}

Spaltennamen einer DB auslesen

Dim RS
set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = Cnn
RS.Source = "SELECT * FROM Tabelle"
RS.Open
 
Dim Feld
FOR EACH Feld IN RS.Fields
   Response.Write Feld.Name & "<br>"
   Response.Write Feld.Type & "<br>"
Next
 
RS.Close
set RS = nothing
Cnn.Close
set Conn = nothing

".Type" gibt Dir dann auch den datentyp aus.

Tabellen einer Access Datenbank auflisten

Die einfachste Variante ist die Abfrage der Systemtabellen der Datenbank. Unter Access muss der
User "Administrator" Lesezugriff auf die Tabelle "MSysObjects" haben. Dies können Sie in Access 2000
unter "Extras -> Sicherheit -> Benutzer- und Gruppenberechtigungen" einstellen.

[listtables.asp]

<%
' --- SQL-String für Access
ListSQL = "SELECT name AS tablename FROM MSysObjects WHERE [type] = 1 AND [flags] = 0"
 
' --- SQL-String für Microsoft SQL Server 7.0
' --- ListSQL = "SELECT name AS tablename FROM SysObjects WHERE [type] = 'U'"
 
' --- SQL-String für Oracle 7.x oder höher (alle Tabellen, auf die der User Zugriff hat)
' --- ListSQL = "SELECT table_name AS tablename FROM all_tables"
 
' --- SQL-String für Oracle 7.x oder höher (alle Tabellen, die dem User gehören)
' --- ListSQL = "SELECT table_name AS tablename FROM user_tables"
 
Set ListRS = Server.CreateObject("ADODB.Recordset")
    ListRS.Open ListSQL, objConn, 3, 3
 
        ' --- Ausgabe der Überschrift
        Response.Write "<b><u>Tabellen in DB</u></b><br>" & vbCrLf
 
        Do While Not ListRS.EOF
 
            ' --- Ausgabe des Tabellennamens
            Response.Write ListRS.Fields("tablename") & "<br>" & vbCrLf
            ListRS.MoveNext
 
        Loop
 
    ListRS.Close
Set ListRS = Nothing
%>

——————————————————————————–
Alternativ kann man auch auf eine relativ unbekannte Methode des Connection-Objekts zurückgreifen.
Die OpenSchema-Methode. Mit Hilfe dieser Methode können Sie sehr viel über Ihre Datenbank erfahren.
So zum Beispiel auch, welche Tabellen in der Datenbank enthalten sind.

[listtables.asp]

<%
' --- Öffnen der Datenbankverbindung
Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "<DSN>", "<UID>", "<PWD>"
 
' --- Instantiieren des Recordsets für das Auslesen der Tabellen
' --- adSchemaTables = 20 (Konstante definiert in adovbs.inc)
Set objRS = objConn.OpenSchema(adSchemaTables)
 
    Response.Write "<b>Tabellenname</b><br>"
    Do Until objRS.EOF
 
        ' --- Da auch die Systemtabelle (objRS.Fields("TABLE_TYPE") = "SYSTEM_TABLE")
        ' --- zurückgegeben werden, wird eine Eingrenzung auf die Usertabellen implementiert
        If objRS.Fields("TABLE_TYPE") = "TABLE" THEN
            Response.Write objRS.Fields("TABLE_NAME") & "<br>" & vbCrLf
        End if
 
        objRS.MoveNext
 
    Loop
 
' --- Schliessen und terminieren des Recordets
    objRS.Close
Set objRS = Nothing
 
' --- Schliessen und terminieren der Datenbankverbindung
    objConn.Close
Set objConn = Nothing
%>

Browser ermitteln

' --- Ermitteln des Browsertyps
Set objBrowser = Server.CreateObject("MSWC.BrowserType")
    If objBrowser.Browser = "IE" Then
        CSSFile = "ie.css"
        Else
            CSSFile = "ns.css"
    End if
Set objBrowser = Nothing
 
In den Head-Tag fügst du dann folgendes ein:
<link rel=stylesheet href="<%=CSSFile%>" type="text/css">

An NT-Domäne anmelden

<%
If Request.ServerVariables("LOGON_USER") = "" Then
    Response.Status = "401 - Not allowed"
    Response.End
End if
 
' --- Wenn der User hierhin kommt, ist das Login OK
' --- daher kann man einfach weitermachen ohne weitere Prüfung
...
%>

Wartefunktion

Mittels diesem code kann man in ASP eine warte-funktion wie in VB erstellen:

<%
While a=1
Response.Write "Hi" & "<br>"
WaitNSeconds(1)
Wend
 
Private Sub WaitNSeconds(n)
 
    Response.Write Now & " - " & Timer & "<br>"
    StopTimer = Timer + n
    Do While Timer < StopTimer
    Loop
    Response.Write Now & " - " & Timer & "<br>"
 
End Sub
%>

Pfad entfernen

' Pfad entfernen
Function GetFileName(FileName)
    Dim TmpFileName
    TmpFileName = FileName
    TmpFileName = Trim(Replace(TmpFileName,"", "/"))
    TmpFileName = Right(TmpFileName, Len(TmpFileName) -
InStrRev(TmpFileName, "/",true, vbTextCompare))
    GetFileName = TmpFileName
End Function
Respone.Write GetFileName("c:inetpubwwwrootfilesblabla.asp")

ergibt
blabla.asp

Statt einem phys. Pfad kann man auch eine URL der Func. übergeben

ggf. muss man es noch ein wenig anpassen.

Application / Session / global.asa – Unterschiede und FAQ

[…]
> In der global.asa kann man für Application_OnStart/OnEnd Code angeben. Mir
> ist aber nicht ganz klar wann OnStart/OnEnd ausgeführt wird.
[…]

Application_onStart wird beim ersten Aufruf der Applikation (nach Start des
IIS oder nach Änderung der global.asa) aufgerufen

Application_onEnd wird beim Beenden des IIS aufgerufen

Session_onStart wird beim ersten Aufruf eines Users innerhalb einer
Applikation aufgerufen (wenn der User keine Cookies akzeptiert, wird
die Session_onStart bei jedem Aufruf einer ASP-Seite aufgerufen.

Session_onEnd wird nach dem Session-Timeout (Zeit, in der der User
kein ASP-Skript mehr aufruft, Standard 20 Minuten) oder beim
Aufruf von Session.Abandon aufgerufen. ACHTUNG !!! Session.Abandon
wird IMMER AM ENDE des Scripts aufgerufen, selbst wenn es in der
ersten Zeile des Scripts steht.

> Zur Global.asa dann noch: Kann man in Application_Onstart oder irgendwo in
> der global.asa eine Variable angeben die überall in der Webseite ablesbar
> ist oder ist genau für diesen Zweck Session()/Application() gedacht?

Application("") ist auf allen Seiten für alle User verfügbar.
Session("") ist auf allen Seiten für einen User verfügbar.

> Dann hab ich auch vor kurzem gelesen das man in die global.asa folgendes
> eintragen kann . Welchen
> Zweck hat das?

Damit kannst Du Objekte instantiieren, die dann mit dem entsprechenden Namen
(nicht Application(""), sondern angesprochen werden
können.