Frank Stabenau: Wie macht ihr das:

Hallo,

mich würde folgendes interessieren:

Wenn ich ein Script schreibe, wo angenommen ein Formular gesendet wird bei dem Eingabefelder geprüft und weiter verarbeitet werden, habe ich es bis jetzt immer so gemacht: Ich sende es an sich selbst, prüfe und verarbeite und erst dann leite ich es mit Meta-refresh weiter ans nächste Script.

Wie ist die übliche Vorgehensweise, bzw wie macht ihr das?

Gruß Frank

  1. Hello,

    Wenn ich ein Script schreibe, wo angenommen ein Formular gesendet wird bei dem Eingabefelder geprüft und weiter verarbeitet werden, habe ich es bis jetzt immer so gemacht: Ich sende es an sich selbst, prüfe und verarbeite und erst dann leite ich es mit Meta-refresh weiter ans nächste Script.

    Alle Formulare eines Projektes sollten immer an EIN und dasselbe Script senden, dass dann die Formularverwaltung zentral übernimmt und sich die passende Intelligenz per include() oder aus einer DB mit eval() dazulädt.

    Hatte ben schon mehr dazu geschreiben, bin aber wieder auf den Bug getreten :-((

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Danke für die Antwort.

      Also sollte ich alle Formulare an ein Formular senden mit POST und von diesem Formular verteilen mit meta-refresh?

      Gib es irgendwo ein Tutorial wo solche "sollten"-Sachen beschrieben werden?

      Wenn man dabei ist und sich PHP aneignet, bekommt man nirgens zu lesen, auf welche Weise man bei einigen Dingen am besten vorgeht.

      Gruß
      Frank

      1. hi,

        Wenn man dabei ist und sich PHP aneignet, bekommt man nirgens zu lesen, auf welche Weise man bei einigen Dingen am besten vorgeht.

        ohne ihn kritisieren zu wollen: bin nicht unbedingt sicher, ob toms lösung die "beste" ist.

        dass ein formular sich idr. einfach immer wieder selbst aufrufen sollte, um die eingaben zu checken und zu verarbeiten, da stimme ich ihm zu - sog. "affenformular".

        die idee, beim einsatz verschiedener formulare alle an _ein_ script zu schicken, hat mich allerdings noch nicht überzeugt.
        vor allem sehe ich da die übersichtlichkeit leicht flöten gehen.

        vielleicht hast du ja noch ein paar begründungen dazu, tom?

        gruß,
        wahsaga

        --
        [ Hier könnte Ihre Werbung stehen! ]
        1. Hello,

          vielleicht hast du ja noch ein paar begründungen dazu, tom?

          hatte ich eben geschrieben und weil es so viel war, die Rechtschreibprüfung bemüht und anschließend abgespeichert. Leider ist alles verschwunden.

          Stichworte:

          - Zertifikate für Post-Echtheit
            - Vorgangsverarbeitung
            - Formular-Gültigkeit
            - zentrale User-/Rechteverwaltung

          Das index.php oder wie es auch immer heißt kontrolliert die Vorgänge und lädt sich per include() oder aus einer DB (Auswertung per eval() ) die benötigte "Intelligenz" dazu. Das macht das Projekt erst übersichtlich, weil immer alles über eine zenrtrale Stelle geht.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. hi,

            Das index.php oder wie es auch immer heißt kontrolliert die Vorgänge und lädt sich per include() oder aus einer DB (Auswertung per eval() ) die benötigte "Intelligenz" dazu.

            na ja, sowas wie zentrale user/rechteverwaltung kann man ebensogut andersherum implementieren, in dem man sich ein modul schreibt, dass man dann auf jeder seite oben per include einbindet.

            und bei dem eval-vorschlag zweifele ich gerade noch, ob du den ernst gemeint hast ...

            gruß,
            wahsaga

            --
            [ Hier könnte Ihre Werbung stehen! ]
            1. Hello,

              und bei dem eval-vorschlag zweifele ich gerade noch, ob du den ernst gemeint hast ...

              Ja sicherlich, denn das macht das Ganze auch vertikal objektorientiert.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
          2. Hi Tom

            Nanu, ich hatte doch vor einer halben Stunde bereits was gepostet...

            Dein Lösungsansatz interessiert micht. Was machst du denn genau, wenn die Eingaben ungültig sind? Ich möchte ja dem Benutzer das Formular mit den korrekten Daten als Standardwerte anzeigen und nur die ungültigen Felder leeren, wenn etwas schief ging. Wie machst du das?

            - Zertifikate für Post-Echtheit

            Du meinst für SSL? Damit kenne ich mich nicht wirklich aus. Kann man damit nur einzelne Skripte zertifizieren?

            - Formular-Gültigkeit

            Was genau meinst du damit?

            Das index.php oder wie es auch immer heißt kontrolliert die Vorgänge und lädt sich per include() oder aus einer DB (Auswertung per eval() ) die benötigte "Intelligenz" dazu.

            Heisst das, dass du die Formulare auch von diesem Skript ausgeben lässt?

            Ich habe neulich eine Formularklasse programmiert (VBScript/ASP), welche mir automatisch Formulare generiert, die Eingaben entgegen nimmt und diese auch gleich evaluiert. Da sie noch nicht ganz fertig ist bin ich natürlich immer auf der Suche nach neuen Verbesserungsideen.

            FG

            Tom2

            --
            SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
            ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
            1. Hello,

              Nanu, ich hatte doch vor einer halben Stunde bereits was gepostet...

              Ja, das scheint hier jetzt ein Glücksspielautomat geworden zu sein. Macht aber trotzdem noch Spaß, oder?

              Dein Lösungsansatz interessiert micht. Was machst du denn genau, wenn die Eingaben ungültig sind? Ich möchte ja dem Benutzer das Formular mit den korrekten Daten als Standardwerte anzeigen und nur die ungültigen Felder leeren, wenn etwas schief ging. Wie machst du das?

              Es gibt eine zentrale Formularverwaltung. Die kann man auch in einer Datenbank ablegen. Das "Masterscript" nimmt den Auftrag an, prüft, welches Formular der User (ggf. n/auth) haben will und ob er berechtigt ist. Das POST-Array steht ja noch im Speicher. Der Nächste Schritt wird also ein, dass geprüft wird, ob für diesen User das angeforderte Formular Vorgangsgebunden ist und vielleicht schon gesendet wurde und noch nicht zurück ist. Der User könnte ja zwei fenster geöffnet haben und aus versehen den Vorgang doppelt einleiten. Dann gibts nur das Warnformular, dass als Antwort erwartet: alte Daten verwerfen / weiterarbeiten. Die Vorgangsdaten sind ja in nder Session des Users unter dem Vorgangs-Zertifikat gespeichert. Nun bekommt der user die Aingabeaufforderung mit den aktuellen Initialisierungen gesendet. Die kann er ausgefüllt zurückschicken. Unter dem Vorgangs-Zertifikat kann das System feststellen, welche Formualrart in welchem Status das ist und kann aus der DB die Prüf- und Vergleichsbedingungen holen. Als erstes wird geprüft, ob alle Felder vorhanden sind, die vorhanden sein müssen, oder ob ggf. eines zuviel da ist. Im Fehlerfalle schicken wir den User in die Beschäftigungstherapie (Verarschung für Faker) oder wir sind einfach mal gnädig und senden ihm den letzten Screen nochmal mit Fehlermeldung und Entschuldigung...

              Wenn der User nun ein Doppelposting absendet, können wir das erkennen und geben ihm wieder diese tolle Fehlermeldung.

              na und so weiter.

              Über die Vorgangs- und Formularmatrix wissen wir immer, welche Funktionenhj für Prüfung, Speicherung Verarbeitung, Anzeige usw. dazugeladen werden müssen und welches der nächste View bei Erfolg ist.

              - Zertifikate für Post-Echtheit

              Du meinst für SSL? Damit kenne ich mich nicht wirklich aus. Kann man damit nur einzelne Skripte zertifizieren?

              Nein. das hat nichts in der Vorgangsverwaltung zu suchen. Aber du könntest ja einen Post2Host von einem anderen Host aus machen. Das nützt Dir aber nichts, wenn der angesprochene Vorgang nicht in der VW eingetragen ist.

              - Formular-Gültigkeit

              Was genau meinst du damit?

              Ist im Prinzig due Untermenge von Vorgang. jeder Vorgang kann mehrere aktive Formulare erfordern.

              Das index.php oder wie es auch immer heißt kontrolliert die Vorgänge und lädt sich per include() oder aus einer DB (Auswertung per eval() ) die benötigte "Intelligenz" dazu.

              Heisst das, dass du die Formulare auch von diesem Skript ausgeben lässt?

              Na klar, sonst wäre das Ganze ja sinnlos.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hi Tom

                Ja, das scheint hier jetzt ein Glücksspielautomat geworden zu sein. Macht aber trotzdem noch Spaß, oder?

                Na klar doch. Besten Dank für deine interessanten Ausführungen! Da sind noch ein paar sehr wertvolle Ideen dabei, die ich auch für meine Formularklasse gebrauchen kann. Wie oder wo hast du das denn gelernt? Genau solche konzeptionelle Themen interessieren mich, ich finde aber kaum Infos dazu, bzw. ich weiss nicht, wonach ich suchen soll.

                Meine Klasse kann bisher folgendes: Ich binde per Include die Klasse in ein Skript ein, instanziere sie und lege über ein Array für jedes Formularfeld (bei select-Boxen auch für die Werte) den Namen, die Beschriftung, den Feld-Typ, den Standard-Wert, ob Null oder nicht Null gestattet ist und einen Ausdruck fest, der die Gültigkeit der Benutzereingabe prüft. Eine danach aufgerufene Funktion versucht die Benutzereingaben zu lesen und zu validieren. Geht das schief oder wurden keine Daten übergeben, dann wird das Formular mit allen gültigen Werten automatisch generiert. Andernfalls kann stellt mir das Objekt die Daten zur Verfügung, und ich kann damit machen, was ich will. Damit lassen sich Formulare ziemlich schnell und einfach implementieren.

                In Gedanken bin ich aber schon seit längerer Zeit bei einem einzigen Skript, dass eine ganze Webapplikation dynamisch lädt und langsam sollte ich mal mit dem Implementieren beginnen. Meine Idee dafür: In einem XML-File wird zentral die Struktur der Applikation verwaltet. Ich möchte dort Standard-Module, die immer geladen werden müssen, oder spezifische, die von der aktuellen Aktion abhängig sind, in eine Baumstruktur verschachteln. D.h. ich gebe an, wann welches Modul mit welcher Konfiguration geladen werden soll. Die Baumstruktur enthält so nicht nur die Konfiguration der einzelnen Module sondern auch die komplette Menüstruktur der Applikation. Willst du beispielsweise einen Menüast schützen, dann legst du einfach ein Authentifizierungsmodul um den Ast und schon sollte das funktionieren. So stelle ich mir das zu mindest vor ;-).
                Auch Funktionsbibliotheken oder -objekte sollen sich dynamisch laden lassen, so dass ich per Parameter bestimmen kann, ob ich HTML, XHTML oder WML als Ausgabe möchte. An Ideen magelt es nicht wirklich...
                Da ich momentan keinen funktionierenden Webserver (ich möchte PHP und XML verwenden, vielleicht auch mal einen Versuch mit JSP starten) und ständig wieder neue Ideen habe konnte ich davon leider nocht nicht wirklich viel in die Tat umsetzen.

                So, genug der schönen Worte. Ich würde mich freuen, wieder etwas von dir (oder von sonst jemand interessiertem) zu höhren.

                Cya

                Tom2

                PS: Ctrl + A, Ctrl + C, nur zur Sicherheit ;-) *undrechtschreibprüf*

                --
                SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
                ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
                1. Hello,

                  PHP hat nach meinem bisherigen Verständnis noch ein dickes Manquo.

                  Einmal dazugeladende Funktionen lassen sich nicht wieder entladen. Variablen kann man aber wieder freigeben.

                  Wenn man nun ein etwas länglicheres Script hat, dass über diverse Includes und Evals Funktionalität dazulädt, dann stößt man schnell an die Grenzen des zur Verfügung stehenden Arbeitsspeichers (bewusst begrenzt, um Multiuserbetrieb nicht zu stören), obwohl man durch wieder Entladen von nicht mehr benötigten Funktionen eigentlich genügend Speicher hätte.

                  Man könnte sich also vorstellen:

                  lade Basismodul
                    lade GPC-Validierungsfunktionen
                      führe Validierung durch
                      entlade Validierungsfunktionen
                    lade Datenbankmodul
                      führe Datnbankabfragen durch
                      entlade Datenbankfunktionen
                    lade Berechnungsmodul
                      führe Berechnungen durch
                      entlade berechnungsfunktionen
                    lade Anzeigemodul
                      führe Anzeige durch

                  Scriptende

                  Ist das denn jetzt durch Destruktoren bei PHP 5 möglich?

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
      2. Hello,

        Also sollte ich alle Formulare an ein Formular senden mit POST und von diesem Formular verteilen mit meta-refresh?

        Nein. siehe oben!

        Leider ist meine Antwort schon wieder im Nirwana verschwunden.
        Tut mir leid. Nochmal schreib ichs jetzt nicht.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
      3. Moin,

        Wenn man dabei ist und sich PHP aneignet, bekommt man nirgens zu lesen, auf welche Weise man bei einigen Dingen am besten vorgeht.

        Wenn du eh gerade dabei bist dir PHP anzueignen, könnte sich u.U. ein Vergleich deines/r Wissens/Vorgehensweise mit diesem Tutorial als nützlich erweisen.

        http://tut.php-q.net/

        Gruß
        Frank

        Liebe Grüße

        Oliver

        --
        Man muss nicht alles wissen, man muss nur wissen wo es steht.
  2. hi,

    Wenn ich ein Script schreibe, wo angenommen ein Formular gesendet wird bei dem Eingabefelder geprüft und weiter verarbeitet werden, habe ich es bis jetzt immer so gemacht: Ich sende es an sich selbst, prüfe und verarbeite

    bis hier her OK.

    und erst dann leite ich es mit Meta-refresh weiter ans nächste Script.

    hier würde ich allerdings die weiterleitung nach der formularverarbeitung per location-header machen, anstatt per unschönem meta-tag.

    gruß,
    wahsaga

    --
    [ Hier könnte Ihre Werbung stehen! ]
    1. Hallo, danke für deine Antwort.

      hier würde ich allerdings die weiterleitung nach der formularverarbeitung per location-header machen, anstatt per unschönem meta-tag.

      Was ist daran eigentlich unschön? Weils nicht im Head steht?

      Wie benutzt man header() richtig? Ich wollte es testen, aber bekomme ne Fehlermeldung... Konnte auch keine funktionierende Erklärung per Suche finden. :-/

      Gruß
      Frank

      1. Hallo,

        Wie benutzt man header() richtig? Ich wollte es testen, aber bekomme ne Fehlermeldung... Konnte auch keine funktionierende Erklärung per Suche finden. :-/

        eine gute Anlaufstelle ist immer php.net, in deinem Fall http://www.php.net/header. Da gibt es auch ein hübsches Beispiel wie das mit der Weiterleitung funktioniert...

        Schöne Grüße
        Julian

      2. hi,

        Was ist daran eigentlich unschön? Weils nicht im Head steht?

        weil du dafür extra nochmal ein HTML-dokument an den client schickst, um diesem darin zu sagen, "bitte geh woanders kucken" - hat ein bisschen was von "ätsch-bätsch, verarscht ...".

        die umleitung per HTTP-header hingegegen sagt dem client gleich, "bitte hole dir das dokument stattdessen von der adresse xy".

        Wie benutzt man header() richtig? Ich wollte es testen, aber bekomme ne Fehlermeldung...

        da header() zusätzliche HTTP-header produziert, dürfen davor keinerlei ausgaben erfolgen (selbst whitespace ist zu viel). und im falle der umleitung sind auch ausgaben danach sinnfrei.

        wenn du also eine bestätigungs anzeigen lassen willst, empfiehlt es sich dies auf der zielseite der umleitung zu machen - ggf. durch zusätzlichen GET-parameter getriggert, wenn diese seite auch von anderen stellen aus aufgerufen werden soll.

        gruß,
        wahsaga

        --
        [ Hier könnte Ihre Werbung stehen! ]
        1. Hallo,

          Was ist daran eigentlich unschön? Weils nicht im Head steht?

          weil du dafür extra nochmal ein HTML-dokument an den client schickst, um diesem darin zu sagen, "bitte geh woanders kucken" - hat ein bisschen was von "ätsch-bätsch, verarscht ...".

          die umleitung per HTTP-header hingegegen sagt dem client gleich, "bitte hole dir das dokument stattdessen von der adresse xy".

          »Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).«
          http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2

          Kommt also diesbezüglich auf dasselbe heraus. Auch bei 301-303 wird »extra nochmal ein HTML-Dokument an den Client geschickt«. Es wird in dem Fall ganz normal angegeben, dass sich um eine text/html-Datei handelt. Es wäre eher sinnlos, wenn diese leer ist, denn nicht umsonst wurde festgelegt, dass der Entity dann nicht leer ist.

          da header() zusätzliche HTTP-header produziert, dürfen davor keinerlei ausgaben erfolgen (selbst whitespace ist zu viel). und im falle der umleitung sind auch ausgaben danach sinnfrei.

          Siehe oben.

          Mathias