Validation, Seite anhalten, User kann korrigieren

Schon festgestellt? Dem Forum sind gerade alle Interaktionsmöglichkeiten genommen. :(

Mehr dazu unter: Abstimmung über das Forum

  • Guten Abend

    Was muss ich beim folgenden Code ergänzen, damit nicht nur die Fehlermeldung erscheint, sondern das Script angehalten wird, damit der User seine Eingaben korrigieren kann?


    Code
    1. if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    2. $error = true;
    3. $mse = 'Bitte korrekte Emailadresse eingeben';
    4. }
  • Hallo MarkusBEO

    die Frage kann man nicht beantworten, ohne das Umfeld zu kennen: Wie wird das Formular abgeschickt? Ist es ein sogenanntes Affenformular, d. h. die Seite ruft sich selber auf? Oder wird beim Abschicken eine andere Seite aufgerufen? Oder wird das Formular mit Ajax abgeschickt?

    Auf jeden Fall kann man sagen, dass unter dem Gesichtspunkt der Benutzerfreundlichkeit eine clientseitige Validierung, zusätzlich zur serverseitigen, zu empfehlen ist. Dann bekommt der Benutzer seine Rückmeldungen schon vor dem Abschicken. Mit der HTML5-Formularvalidierung ist das ja heute ein Kinderspiel:

    https://developer.mozilla.org/…_form_validation_examples

  • Als Anfänger und weil ich Ihre Fragen nicht sicher beantworten kann, erlaube ich mir, den Code der Seite einzustellen - dann zusätzlich den Code (funktion), welche inkludiert wird.


  • Danke, das ist schon mal sehr aufschlussreich. Scheint das besagte Affenformular zu sein, nur dann verstehe ich deine ursprüngliche Frage nicht: Wenn der Benutzer die Fehlermeldung sieht, müsste er darüber auch wieder das Formular sehen und in der Lage sein, seine Eingabe(n) dort zu korrigieren? Oder verstehe ich den Code falsch?

  • Danke, das ist schon mal sehr aufschlussreich. Scheint das besagte Affenformular zu sein, nur dann verstehe ich deine ursprüngliche Frage nicht: Wenn der Benutzer die Fehlermeldung sieht, müsste er darüber auch wieder das Formular sehen und in der Lage sein, seine Eingabe(n) dort zu korrigieren? Oder verstehe ich den Code falsch?

    Wenn der Benutzer die Fehlermeldung wegen falscher Emailangabe sieht, dann sind alle seine Angaben weg und wurden (richtigerweise) auch nicht gespeichert.

    Das einzige Problem ist also scheinbar, wenn die Emailangabe falsch ist und der Benutzer unten links auf den Button "Erfassen" klickt, kommt zwar die Fehlermeldung (=richtig), aber alle Daten sind weg (=falsch).

    Wenn alle Daten stimmen, wird der Eintrag gespeichert (=richtig).

  • Beispiel am Eingabefeld name:

    Und woher willst du das wissen:

    Code
    1. $msg = 'Eintrag ist erfolgt';

    Du fragst keinerlei Fehler ab, das solltest du aber machen, denn nur diese Ausgabe sagt nichts darüber aus.


    Und das ist in mehrere Hinsicht grausam:

    PHP
    1. <?php if ($msg): ?>
    2. <p><?=$msg?></p>
    3. <?php endif; ?>
    4. <?php if ($mse): ?>
    5. <p><?=$mse?></p>
    6. <?php endif; ?>

    Warum nicht so:

    PHP
    1. <?php
    2. if (isset($msg))
    3. echo "<p>$msg</p>";
    4. if (isset($mse))
    5. echo "<p>$mse</p>";
    6. ?>

    Zumal dir

    PHP
    1. <?php if ($msg): ?>

    bei hochgedrehtem Error-Reporting ein Warning um die Ohren haut.


    Apropo Error-Reporting:

    Solange du an einem Script entwickelst, solltest diese beiden Zeilen immer am Anfang haben:

    Code
    1. error_reporting(E_ALL);
    2. ini_set('display_errors', true);
  • Vielen Dank für die Tipps, ich habe das soweit mal angepasst,
    ausser #6, erster Eintrag wegen Eingabefeld Name, weil mir nicht klar ist, was der Eintrag auf Zeile 7 genau bedeutet.

    Die Fehlerabfrage muss ich noch lernen (ob gespeichert wurde oder nicht). Das Errorreporting habe in in der functions.php eingefügt.
    Ich bin Anfänger und habe den Code aus dem Internet und will ihn für meine Bedürfnisse abändern.


    Mein Hauptproblem: Habe schon stundenlang geübt mit diesem und anderen Affenformularen und habe bisher nie erreicht dass
    bei einer Fehleingabe des Users das Formular stehen bleibt, bis alles i.O. ist. - Hier stehe ich total auf dem Schlauch, was ich da ergänzen/anpassen müsste.

  • Zitat

    dass bei einer Fehleingabe des Users das Formular stehen bleibt

    Versuche es mit der Formularvalidierung durch HTML5, wie in meinem Beitrag #2 empfohlen.

    Ändere z. B. das Eingabefeld für die Email indem Du den Typ auf "email" änderst und das Attribut "required" hinzu fügst:

    <input type="email" name="email" placeholder="" id="email" required>

  • Simples Beispiel eines Affenformulars, bei dem die eingegebenen Werte im Formular stehen bleiben:

  • Freut mich, dass es funktioniert. Mit ein wenig CSS kann man dem Benutzer auch gleich bei der Eingabe signalisieren, dass der Wert noch nicht stimmt:

    Code
    1. <style>
    2. /* Die Pseudoklasse :invalid gibt an,
    3. dass die Eingabe fehlerhaft ist. */
    4. input:invalid,
    5. input:invalid:focus {
    6. outline: none;
    7. border: 2px solid red;
    8. }
    9. </style>