Alle Formulardaten vordefinieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alle Formulardaten vordefinieren

    Hallo,

    kann man irgendwie alle Strings aus Formulardaten irgendwie vordefinieren, damit man diese einfach auf Gültigkeit mittels RegEx abfragen kann?

    Hatte mir das etwa so vorgestellt:

    $strings = array(

    "username"=>"[0-9a-zA-Z]{3,12]",
    "plz"=>"[0-9]{5}]",
    ...

    );

    Was macht man aber wenn da auch gleich noch ein Fehlertext "ala PLZ ist ungültig" mit rein soll?

  • #2
    wie bitte? verstehe nicht.

    Kommentar


    • #3
      Stellt Dir ein Forum vor, wo viel vom User abgeschickt wird.

      Die Formularfelder werden natürlich immer überprüft, z.B. ob der Username nur Buchstaben und Zahlen enthält und die minimale bzw. maximale Länge.

      Diese Überprüfung des Usernames kommt ja z.B. öfter an verschiedenen Stellen vor...

      Ich wollte daher die ganzen Gültigkeitsüberprüfungen auslagern und dann an der jeweiligen Stelle nur noch so einheitlich prüfen:

      if(check($_POST['username'])==true){...}
      ...

      if(check($_POST['passwort'])==true){...}
      ...

      if(check($_POST['plz'])==true){...}
      ...

      Kommentar


      • #4
        die idee ist völlig richtig. wo ist das problem?

        Kommentar


        • #5
          Also so hab ich es mir vorgestellt:

          PHP-Code:
          function check($was)

          {

          $variablen = array(

          "username"=>"[0-9a-zA-Z]{3,12}]",
          "plz"=>"[0-9]{5}]",

          );

          if(
          preg_match($variablen[$was],$was)){return true;}


          Wenn ich jetzt auch noch individuelle Fehlermeldungen pro Variable zurückliefern lassen will, dann muss ich pro Variable nochmal ein Array ins vorhandene einbinden, richtig?

          Und wie löst man es z.B., wenn bestimmte Variablen vor dem Check erstmal mit trim() und/oder strip_tags() bereinigt werden sollen? Auch mit in das untergeordnete Array den jeweiligen Befehl mit rein und dann per eval() ausführen lassen?

          Kommentar


          • #6
            Wenn ich jetzt auch noch individuelle Fehlermeldungen pro Variable zurückliefern lassen will, dann muss ich pro Variable nochmal ein Array ins vorhandene einbinden, richtig?
            Mach ein zusätzliches Array:
            PHP-Code:
            $meldungen = array(

            "username"=>"Benutzername ungültig",
            "plz"=>"Postleizahl ungültig",

            );

            if(
            preg_match($variablen[$was],$was)) {
               return 
            true;
            } else {
               return 
            $meldungen[$was];

            Und nicht vergessen: if( check("...") === true )
            Und wie löst man es z.B., wenn bestimmte Variablen vor dem Check erstmal mit trim() und/oder strip_tags() bereinigt werden sollen? Auch mit in das untergeordnete Array den jeweiligen Befehl mit rein und dann per eval() ausführen lassen?
            Wie meinen?
            Du meinst if( check(trim($_POST["irgendwas"]))) ?

            Kommentar


            • #7
              Original geschrieben von kuddeldaddeldu Und nicht vergessen: if( check("...") === true )
              Warum das? Muss mal wohl 3 === machen wenn der Rückgabewert von einer Funktion kommt?

              Original geschrieben von kuddeldaddeldu
              Wie meinen?
              Du meinst if( check(trim($_POST["irgendwas"]))) ?
              Bestimmte (nicht alle!) Variablen sollen mit z.B. strip_tags() behandelt werden. Ich hatte mir vorgestellt, dass diese Befehle auch gleich dynamisch mit im Array sind und per eval() ausgeführt werden. Wird aber glaub zu kompliziert, so geht es glaub auch:

              PHP-Code:
              function validator($was)

              {

              $variablen = array(

              "userid"=>array(
              "aufbau"=>"[0-9a-zA-Z]{3,12}]",
              "fehler"=>"Die UserID darf nur ...",
              "befehl"=>"strtolower"),

              "passwort"=>array(
              "aufbau"=>"[0-9a-zA-Z]{6,12}]",
              "fehler"=>"Das Passwort darf nur ...",
              "befehl"=>"strip_tags"),

              );

              if(
              $variablen[$was]['befehl']=="strip_tags"){$was=strip_tags($was);}
              if(
              $variablen[$was]['befehl']=="strtolower"){$was=strtolower($was);}

              if(
              preg_match($variablen[$was]['aufbau'],$was))
              {return 
              true;}
              else
              {return 
              $variablen[$was]['fehler'];}

              }

              if(
              validator($_POST['username'])===true){...} 
              Wobei man hier return $variablen[$was]['fehler']; so nicht einfach zurückgeben kann. Eine globaler String wäre wohl besser...

              Kommentar


              • #8
                Bestimmte (nicht alle!) Variablen sollen mit z.B. strip_tags() behandelt werden.
                Und deshalb würde ich das vor Aufruf der Funktion check, validator, whatever entscheiden/machen. Aber das ist vielleicht Geschmackssache.
                Wobei man hier return $variablen[$was]['fehler']; so nicht einfach zurückgeben kann.
                Warum nicht?
                Eine globaler String wäre wohl besser...
                Warum das?
                === brauchst Du in diesem Fall, weil die Bedingung sonst immer true wäre. Schau mal hier.

                Kommentar


                • #9
                  Übrigens:
                  PHP-Code:
                  if(check($_POST['username'],'username')) 
                  Zweiter Parameter ist notwendig.

                  geht natürlich auch als Klasse:
                  PHP-Code:
                  $C->check(*,*);
                  $C->check(*,*);
                  $C->check(*,*);
                  $C->check(*,*);

                  if(!
                  $C->error())
                    
                  // eintragen
                  else
                    die(
                  $C->getErrorMsg()); 
                  gibt natürlich diverse ansätze.
                  Zuletzt geändert von TobiaZ; 22.06.2007, 10:14.

                  Kommentar


                  • #10
                    @kuddeldaddeldu:

                    Nun das erwartet hier nur ob es "true" ist:

                    if(validator($_POST['username'])===true){...}else{echo "fehler";}

                    Den Fehler gleich mit per return zu übergeben macht ja da keinen Sinn. Die Fehlermeldung sollte dann einfach eine globale Variable sein und mit ausgegeben werden.

                    Komischerweise geht es bei mir mit == problemlos, liefert also auch false zurück.

                    @TobiaZ:

                    Wie kommst Du auf einen 2. Parameter???

                    Kommentar


                    • #11
                      Sinn macht es natürlich nur ungefähr so:
                      PHP-Code:
                      $result validator($_POST['username'], "username");
                      if( 
                      $result === true ) {
                         
                      // mach wat
                      } else {
                         
                      fehler($result);

                      Komischerweise geht es bei mir mit == problemlos, liefert also auch false zurück.
                      Wenn Du eine Fehlermeldung, also einen String zurückgegeben hast?

                      Den zweiten Parameter brauchst Du, um zu identifizieren, welche Variable Du da übergeben hast. Hatte ich übersehen.

                      Kommentar


                      • #12
                        Na, im sinne der Wiederverwendbarkeit. Nicht immer heißen Formularfelder gleich. Mal password, mal passwort. und du willst ja nicht immer die Grunddaten anpassen, nur weil sich ein Formularfeld ändert.
                        Sinn macht es natürlich nur ungefähr so: [...]
                        Da finde ich objektorientiert aber schöner...

                        Kommentar


                        • #13
                          Da finde ich objektorientiert aber schöner...
                          Da muss ich Dir recht geben.
                          Na, im sinne der Wiederverwendbarkeit. Nicht immer heißen Formularfelder gleich.
                          @TS: Und vor allem weisst Du in der Funktion ja nicht mehr, welches $_POST-Feld übergeben wurde (username?, passwort?,plz?). Da hast Du nur den Inhalt.
                          Zuletzt geändert von kuddeldaddeldu; 22.06.2007, 16:48.

                          Kommentar


                          • #14
                            Und vor allem weisst Du in der Funktion ja nicht mehr, welches $_POST-Feld übergeben wurde (username?, passwort?,plz?). Da hast Du nur den Inhalt.
                            sagtest du ja bereits.

                            Kommentar


                            • #15
                              Mit Klassen wäre es sicherlich auch schön lösbar nur leider sträube ich mich bei dem Thema immer irgendwie... das macht mir dann alles zu unübersichtlich... auch wenn es für die Freaks natürlich alles logisch und überhaupt ist :-)

                              Kommentar

                              Lädt...
                              X