legolas41: Formularwerte mitschleifen...

Hallo!

Ich würde gerne ein Script schreiben, dass es mir ermöglicht, zu erkennen, ob Formularwerte gesendet wurden. Anschließend soll das Script, wenn Formularwerte gesendet wurden, diese empfangen, einen "input type=hidden" Befehl in den HTML-Quelltext schreiben und diese dann weiterschicken.

Das ganze wäre praktisch für ein Passwort Script, dass ich geschrieben habe. Per Include wird das Passwort Script in jede HTML-Seite eingefügt, die administrative Möglichkeiten anbietet.

Kennt einer die nötigen Befehle, um:
1. wurden Daten gesendet, diese entgegennehmen
2. einen <input type="hidden"> befehl erzeugen, mit dem richtigen namen

Vielen Dank
Grüße
Legolas

  1. Hallo Legolas

    Kennt einer die nötigen Befehle, um:

    1. wurden Daten gesendet, diese entgegennehmen

    Ob Daten gesendet wurden erkennst du mit

    If Request.ServerVariables("REQUEST_METHOD") = "POST" Then...

    und

    If Request.ServerVariables("REQUEST_METHOD") = "GET" Then...

    Du solltest jedoch wissen, wie die gesendeten Daten heissen. Das könnte dann etwa so aussehen:

    If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
      strUser = Request.Form("Username")
      strPass = Request.Form("Password")
    End If

    1. einen <input type="hidden"> befehl erzeugen, mit dem richtigen namen

    Anscheinend weisst du jedoch nicht, wie die Namen sind. In diesem Fall kenne ich zumindest für die Get-Methode einen Weg: Du liest den ganzen Query-String aus und zerlegst ihn mit Stringoperationen in seine Bestandteile. Mit diesen füllst du ein Array und erzeugst daraus dan die <input type="hidden">-Tags.

    MfG & HtH

    Tom2

    1. hi!

      das sollte auch noch einfacher gehen...

      <%
      strUser = Request("User")
      strPass = Request("pass")
      If Not strUser = vbNullString And Not strPass = vbNullString Then
      ...
      Else
      ...
      End If
      %>

      einfach nur das request-object ohne seine methode abzufragen, ist zwar nicht grade grandioser programmierstil - der server findet diese aber schneller, was natürlich auch die script-performance verbessert.
      ich würde allerdings auch keine logindaten sondern eher die sessionID transportieren - die ist ja auch eindeutig.

      1. hi!

        das sollte auch noch einfacher gehen...

        <%
        strUser = Request("User")
        strPass = Request("pass")
        If Not strUser = vbNullString And Not strPass = vbNullString Then
        ...
        Else
        ...
        End If
        %>

        einfach nur das request-object ohne seine methode abzufragen, ist zwar nicht grade grandioser programmierstil - der server findet diese aber schneller, was natürlich auch die script-performance verbessert.
        ich würde allerdings auch keine logindaten sondern eher die sessionID transportieren - die ist ja auch eindeutig.

        Hi Chief,

        die gesamt Request-Auflistung ohne Benutzung der entsprechenden Unterauflistung abzufragen bedeutet nach einhelliger Literaturmeinung von MS Press und meiner MCP-Seminarleiter:
        1. Request.ServerVariables durchsuchen
        dann erst Request.QueryString/Request.Form
        und dauert länger, weil der Server dadurch mehr Arbeit hat, ist eigentlich auch logisch, oder?

        also weniger (schneller findet = bessere Scriptperformance), aber das fällt bei wenigen Aufrufen nicht so ins gewicht.

        zwischen "" und vbNullString konnte ich bislang auch keinen Unterschied feststellen, außer dass es sich länger tippt als "" :-)

        Gruß, Frank

        1. Hi Chief,

          die gesamt Request-Auflistung ohne Benutzung der entsprechenden Unterauflistung abzufragen bedeutet nach einhelliger Literaturmeinung von MS Press und meiner MCP-Seminarleiter:

          1. Request.ServerVariables durchsuchen
            dann erst Request.QueryString/Request.Form
            und dauert länger, weil der Server dadurch mehr Arbeit hat, ist eigentlich auch logisch, oder?

          also weniger (schneller findet = bessere Scriptperformance), aber das fällt bei wenigen Aufrufen nicht so ins gewicht.

          zwischen "" und vbNullString konnte ich bislang auch keinen Unterschied feststellen, außer dass es sich länger tippt als "" :-)

          Gruß, Frank

          hi, frank!

          nix für ungut...
          ...aber wenn du mir nicht glaubst, dann mache doch mal folgenden kleinen test:
          <%
          a = Timer
          For i = 0 To 10000
           b = Request.QueryString("test")
          Next
          Response.Write "mit Methode: " & Timer - a

          a = Timer
          For i = 0 To 10000
           b = Request("test")
          Next
          Response.Write "ohne Methode: " & Timer - a
          %>
          lass dich vom ergebnis überraschen und vergiss, was die M$ler so zu ihren eigenen produkten von sich geben... ;-)

          das gleiche spielchen funzt übrigens auch sehr gut mit anderen objekten - z.b. ist 'objRS("myField")' bedeutend schneller als 'objRS.Fields.Item("myField").Value'...

          grtz
          chief

          1. Hi Leute

            Interessante Sachen lernt man hier - Chief, wo krieg ich solche Infos her?

            Noch eine kleine Überlegung zu den beiden Lösungen: Ist es in diesem Beispiel nicht besser, die Request-Methode abzufragen und dann aufgrund des Ergebnisses die Formulardaten auszulesen oder eben nicht. Meine Begründung zur Annahme: Der Login steht AFAIK nur so auf der Seite, man wird sich folgich nicht jedes mal (oder eher selten) einloggen. Es muss also immer nur _eine_ Bedingung gechecked werden und nicht pro Formular-Feld eine Zuweisung und zum Schluss noch eine Bedingung.

            Was natürlich sein könnte, ist, dass das Abfragen der Server-Variablen einiges länger dauert als die Zuweisungen und ein normaler Vergleich zweier Variablen. In diesem Fall wäre deine Lösung, Chief, natürlich schneller. Das weiss ich jedoch noch nicht, beim Thema Performance bin ich noch nicht angelangt.

            MfG

            Tom2

            1. Interessante Sachen lernt man hier - Chief, wo krieg ich solche Infos her?

              das sind im grunde reine erfahrungswerte, würde ich sagen - wenn man alltäglich viele stunden mit ASP und VBS verbringt, ergibt sich einiges... ;-)

              Noch eine kleine Überlegung zu den beiden Lösungen: Ist es in diesem Beispiel nicht besser, die Request-Methode abzufragen und dann aufgrund des Ergebnisses die Formulardaten auszulesen oder eben nicht. Meine Begründung zur Annahme: Der Login steht AFAIK nur so auf der Seite, man wird sich folgich nicht jedes mal (oder eher selten) einloggen. Es muss also immer nur _eine_ Bedingung gechecked werden und nicht pro Formular-Feld eine Zuweisung und zum Schluss noch eine Bedingung.

              Was natürlich sein könnte, ist, dass das Abfragen der Server-Variablen einiges länger dauert als die Zuweisungen und ein normaler Vergleich zweier Variablen. In diesem Fall wäre deine Lösung, Chief, natürlich schneller. Das weiss ich jedoch noch nicht, beim Thema Performance bin ich noch nicht angelangt.

              ich würde dir einfach dazu raten, nach erfolgreichem login eine session-variable anzulegen...
              z.b.: Session("login") = True

              dann brauchst du beim seitenaufruf nur abzufragen...
              If Not Session("login") Then
              ...nun folgt die loginprozedur bzw. der Redirect auf die login-seite

              grtz
              chief

              1. Hi Chief,

                mit ner DB hab ich das jetzt mal gestestet....

                erstmal nur mit einem Zugriff... über mehrere Runden:

                Dabei hat sich ergeben, das dein Tip

                Zugriffszeit(rs(Name)) <  Zugriffszeit(rs.fields.item(Name)) um ca. 1 bis 1,5 sek. schneller ist unter folgenden Voraussetzungen:

                Tabelle mit 8 Feldern, 1200 Datensätzen
                Anschluß per OLEDB JET 4.0
                auf Win2K Pro
                Zufällige Auswahl eines möglichen Feldnamens bei jedem Datensatz
                500 Durchläufe aller Datensätze

                seltsamerweise lähmt das meinen PC hier aber dermaßen ??? das alles nur Ruckhaft geht...  andersherum scheinen aber Aktionen wie mit Outlook Mails schreiben keinerlei Einfluss auf die Performance des Datenabrufs zu haben... komisch.

                Interessant ist weiterhin, daß man anscheinend durch entsprechendes Tuning die Verarbeitungszeit um ca. 50% senken kann...

                Ich werde jetzt mal versuchen mittels wget 25 simultane Benchmarks zu fahren...

                Als denn, Frank

                deine Request.... sache teste ich auch noch, und wehe ich bekomme was anderes raus, dann wirst du exkommuniziert ;-)

          2. Hi Chief,

            die gesamt Request-Auflistung ohne Benutzung der entsprechenden Unterauflistung abzufragen bedeutet nach einhelliger Literaturmeinung von MS Press und meiner MCP-Seminarleiter:

            1. Request.ServerVariables durchsuchen
              dann erst Request.QueryString/Request.Form
              und dauert länger, weil der Server dadurch mehr Arbeit hat, ist eigentlich auch logisch, oder?

            also weniger (schneller findet = bessere Scriptperformance), aber das fällt bei wenigen Aufrufen nicht so ins gewicht.

            zwischen "" und vbNullString konnte ich bislang auch keinen Unterschied feststellen, außer dass es sich länger tippt als "" :-)

            Gruß, Frank

            hi, frank!

            nix für ungut...
            ...aber wenn du mir nicht glaubst, dann mache doch mal folgenden kleinen test:
            <%
            a = Timer
            For i = 0 To 10000
            b = Request.QueryString("test")
            Next
            Response.Write "mit Methode: " & Timer - a

            a = Timer
            For i = 0 To 10000
            b = Request("test")
            Next
            Response.Write "ohne Methode: " & Timer - a
            %>
            lass dich vom ergebnis überraschen und vergiss, was die M$ler so zu ihren eigenen produkten von sich geben... ;-)

            das gleiche spielchen funzt übrigens auch sehr gut mit anderen objekten - z.b. ist 'objRS("myField")' bedeutend schneller als 'objRS.Fields.Item("myField").Value'...

            grtz
            chief

            Hi Chief,

            das werd ich mal ausprobieren....  ist mir noch nicht geläufig, aber ich lasse mich gern vom Gegenteil inspirieren...

            werde dann mal das Ergebnis posten. :-)

            tschau, Frank

  2. Hallo!

    Ich würde gerne ein Script schreiben, dass es mir ermöglicht, zu erkennen, ob Formularwerte gesendet wurden. Anschließend soll das Script, wenn Formularwerte gesendet wurden, diese empfangen, einen "input type=hidden" Befehl in den HTML-Quelltext schreiben und diese dann weiterschicken.

    Das ganze wäre praktisch für ein Passwort Script, dass ich geschrieben habe. Per Include wird das Passwort Script in jede HTML-Seite eingefügt, die administrative Möglichkeiten anbietet.

    Kennt einer die nötigen Befehle, um:

    1. wurden Daten gesendet, diese entgegennehmen
    2. einen <input type="hidden"> befehl erzeugen, mit dem richtigen namen

    Vielen Dank
    Grüße
    Legolas

    Hi....

    du hast die Lösung doch schon fast selbst vorgeschrieben... hier nochmal deutlicher:
    für jeden gesendeten Wert in den per Post-Methode gesendeten Daten
       schreibe in HTML einen input tag vom typ hidden mit dem Namen des gesendeten Wertes und dessen eigentlichen Wert
    weiter mit dem nächsten Wert

    allerdings wäre das meines erachtens nach sehr unklug und unsicher, Passwörter für administrative Bereiche/Funktionen im HTML, welches der Client lesen kann (quelltext), zu übergeben. Noch unsicherer, dies sogar über die get-Methode, wo dann das PW explizit in der Adreßzeile steht, zu machen.

    entweder du nutzt die Sessions mit ASP, wobei aber der Client Cookies während der Sitzungszeit erlauben muß, dort (Session_Variablen) kann man z.b. speichern, ob authorisiert und wenn ja, wer, wann etc...

    oder du übergibst einen Pseudo-Zahlencode, den du mit einer Indexliste vergleichst, die bei "Einlog" Vorgängen um einen Datensatz mit einer bestimmten gültigkeitsdauer erweitert wird.

    Wenn du zu den Lösungswegen noch Fragen hast.... das Forum ist dazu da.

    Gruß, Frank