Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_match Überprüfung funktioniert nur mit bestimmten Formularfeldern

Einklappen

Neue Werbung 2019

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

  • preg_match Überprüfung funktioniert nur mit bestimmten Formularfeldern

    Hallo zusammen,

    ich habe ein einfaches kleines Formular, bei denen die Felder in eine CSV-Datei geschrieben werden sollen. Das funktioniert auch alles super. Bestimmte Felder des Formulars möchte ich mit preg_match() auf ihre Gültigkeit überprüfen. Dabei soll, nach meiner Logik, Feld für Feld überprüft werden, ob das jeweilige Feld entweder korrekte Zeichen enhält oder leer ist.

    Nun hab ich aber einige Probleme. Es kommt immer eine Fehlermeldung, wenn:

    - nur "prename" leer ist
    - nur "name" leer ist
    - nur "prename" und "name" leer sind
    - nur "prename" und "email" leer sind
    - nur "prename" und "email" leer sind
    - nur "prename" und "address" leer sind
    - nur "name" und "email" leer sind
    - nur "name" und "address" leer sind

    - nur "title" und ein sonstiges Feld ausgefüllt sind
    - nur "title" ausgefüllt ist

    Bei den restlichen Fällen funktioniert alles wie es soll (Ich denke jedenfalls, dass ich jeden Fall ausprobiert habe).

    Ich persönlich nehme an, dass die Zeile "title" Probleme macht, aber selbst beim Ausklammern eben dieser Zeile, treten die selben Probleme auf.

    Hat jemand eine Idee?

    Hier der entsprechende Code:
    PHP-Code:
    if (isset($_POST['save'])) {
        if (
    preg_match("#^[a-zA-ZäÄöÖüÜß]+$#",$_POST["address"]) or $_POST["address"]=="") {
            if (
    preg_match("#^[a-zA-ZäÄöÖüÜß]+$#",$_POST["title"]) or $_POST["title"]=="") {
                if (
    preg_match("#^[a-zA-ZäÄöÖüÜß]+$#",$_POST["name"]) or $_POST["title"]=="") {
                    if (
    preg_match("#^[a-zA-ZäÄöÖüÜß]+$#",$_POST["prename"]) or $_POST["title"]=="") {
                        if (
    preg_match("#^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$#"$_POST["email"]) or $_POST["email"]=="") {
                            
    save_data();}

                        else {echo 
    $error;}
                    }
                    else {echo 
    $error;}
                }
                else {echo 
    $error;}
            }
            else {echo 
    $error;}
        }
        else {echo 
    $error;}

    Danke

  • #2
    Puuh, schau dir dringend mal das Wächter Prinzip an und/oder mach eine oder mehr Funktionen draus.
    http://php-de.github.io/jumpto/waechter/

    Oder Arbeite mit Arrays etc... Ich glaube diese Variante ist der worst Case.
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hey,

      danke für den Link. Sehr interessant.

      Aber gibt er mir dann nicht mehrere Ausgaben aus, wenn ich den Code nicht so verschachtelt schreibe? Also wenn mehrere Angaben ungültig sind, würde doch dann für jedes Mal der error-String ausgeworfen werden oder verstehe ich da jetzt was falsch?

      LG


      EDIT: Wenn ich alles in Funktionen aufteilen, bleiben die Probleme. Für mich irgendwie logisch, weil der Ablauf im Grund ja nicht geändert wird.

      EDIT2: Ah Stichwort ist in den Funktionen return. So kann ich die Funktionien unterbrechen, wenn ich möchte.
      Darüber hinaus habe ich im verschachtelten Code meinen Fehler gefunden. Bei der Abfrage, ob die Felder leer sind, habe ich drei mal $_POST["title"]. Daher die Fehler. Zu lange auf Code starren macht echt blind. Kann geschlossen oder erledigt werden. Danke.

      Kommentar


      • #4
        Kommt drauf an wie dein Anwendungsfall aussehen soll.
        Wenn nach dem ersten Fehler Ende sein soll, musst du eben die entsprechende Meldung ausgeben und danach abbrechen / Verhindern dass die anderen Prüfungen durchgeführt werden.
        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

        Kommentar


        • #5
          Beim ersten Fehler zu beenden ist nicht so nutzerfreundlich. Besser ist alles zu prüfen und die Fehler zu sammeln (z.B. in einem Array).

          Allgemein kann ich nur empfehlen mal nach 'Form Validation class php' zu suchen um sich dort einige Anregungen zu holen.

          LG jspit

          Kommentar


          • #6
            Am Rande: Ich würde auch mal darüber nachdenken, auf UTF-8 umzusteigen.

            (Witzig, was das derzeit wieder für ein riesiges Thema hier im Forum ist. Eigentlich sollte man annehmen, dass sich derlei Dinge irgendwann erledigt haben.)

            Kommentar

            Lädt...
            X