PHP Fehlermeldungen Anzeigen, um-und re-display die richtigen Felder
Habe ich eine E-Mail-Formular, das überprüft, drei Felder, Namen, gültige E-Mail und Kommentare. Aber so, wie es jetzt eingerichtet, da die Namen und Kommentare sind in einer Funktion, die zunächst prüft, Namen und Kommentare, auch wenn E-Mail nicht gültig ist, wie kann ich wieder schreiben Sie so prüft es die Felder in der Reihenfolge. Außerdem würde ich gerne wieder die Felder angezeigt, die keine Fehler aufweisen, so dass die Benutzer nicht haben, um geben Sie wieder. Bitte helfen Sie. Dank
<?php
$myemail = "[email protected]";
$yourname = check_input($_POST['yourname'], "Enter your name!");
$email = check_input($_POST['email']);
$phone = check_input($_POST['phone']);
$subject = check_input($_POST['subject']);
$comments = check_input($_POST['comments'], "Write your comments!");
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
show_error("Enter a valid E-mail address!");
}
exit();
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
show_error($problem);
}
return $data;
}
function show_error($myError)
{
?>
<!doctype html>
<html>
<body>
<form action="myform.php" method="post">
<p style="color: red;"><b>Please correct the following error:</b><br />
<?php echo $myError; ?></p>
<p>Name: <input type="text" name="yourname" /></P>
<P>Email: <input type="text" name="email" /></p>
<P>Phone: <input type="text" name="phone" /></p><br />
<P>Subject: <input type="text" style="width:75%;" name="subject" /></p>
<p>Comments:<br />
<textarea name="comments" rows="10" cols="50" style="width: 100%;"></textarea></p>
<p><input type="submit" value="Submit"></p>
</form>
</body>
</html>
<?php
exit();
}
?>
Ich versuchte, um die regex in der Funktion check_input aber dann die E-Mail-Fehler zeigten unabhängig.
InformationsquelleAutor Mosaic | 2012-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst, ich würde vorschlagen, Sie überprüfen ALLE Felder auf einmal, und alle anzeigen werden entsprechende Fehlermeldungen auf dem Formular. Der primäre Grund dafür ist, dass es kann schlecht sein, user experience, wenn Sie das Formular Absenden, eine ganze Reihe von Zeiten, denn Sie müssen Adresse einen Fehler. Ich würde lieber meine richtige E-Mail-Adresse, Passwort, Kommentare und Auswahl in einem versuchen, statt der Fixierung eines in einer Zeit, nur um zu zeigen, was der nächste Fehler ist.
Gesagt, hier sind einige Hinweise auf die Validierung der form, wie Sie wollen. Dies ist in der Regel, wie ich Ansatz einer form zu tun, was Sie tun möchten. Dieser nimmt Ihr HTML-Formular und Formular-Prozessor (PHP) sind zusammen in die gleiche Datei (das ist, was Sie jetzt haben). Sie können den split der beiden, aber die Methoden, dies zu tun, kann ein bisschen anders.
$errors = array()
). Wenn das array leer ist, wissen Sie, es wurden keine Fehler mit der Vorlage$errors
array (z.B.$errors['password'] = 'Passwords must be at least 8 characters long';
)$_POST
array, oder desinfizieren Sie und ordnen Sie die$_POST
Werte zu einzelnen Variablen oder ein array.if (sizeof($errors) > 0) { //show messages } else { //process form }
value=""
Attribut für jedes form-element und liefert den Wert, der gesendet wurde, durch den Benutzer. Es ist sehr wichtig, um die Flucht der Ausgabe mit htmlspecialchars() oder ähnliche FunktionenMit diesen Dingen im Ort, hier ist einige Nacharbeit Ihrer form zu tun:
Habe ich eine erweiterte Beispiel, die Sie sehen können hier, dass kann Ihnen einige Hinweise, wie gut.
Hoffe, das hilft.
Netter avatar ;). Zum Glück verwenden wir häufiger verschiedene Zimmer auf stackoverflow.
@terencehill thumbsup 🙂
InformationsquelleAutor drew010
Die einfachste Möglichkeit ist die Verwendung eines form validation-Bibliothek. PHP ist filter - Erweiterung, zum Beispiel, bietet Validierung und-Bereinigung für einige Arten, aber es ist nicht eine komplette Lösung.
Wenn Sie darauf bestehen, über die Umsetzung, es selbst, ein Problem, das Sie haben zu prüfen, ist das, was zählt als Reihenfolge: die Reihenfolge der Elemente in die form oder die Reihenfolge der Benutzereingabe in
$_POST
. Auf die meisten Browser, diese sollte die gleiche sein, aber es gibt keinen standard, der erzwingt das. Wenn Sie wollen, um zu gehen aus der form, müssen Sie zum definieren der form der Struktur an einer Stelle, und diese Informationen verwenden, um Dinge zu tun wie die Generierung oder Validierung der form (eine Folge der Don ' T Repeat Yourself (TROCKEN) - Prinzip). Iteration über die entsprechende Struktur geben dir den Auftrag, den Sie wünschen: looping über die form gibt, bilden Sie um, während looping über$_POST
gibt Sie Benutzereingaben um.Wie es aussieht, wollen mehr, als nur die Validierung der Daten; Sie wollen auch, um es für die Verwendung vorbereitet, ein Prozess, der als "Bereinigung".
Wenn es um die Bereinigung, definieren verschiedene Arten von Desinfektionsmittel, sondern als eine einzige
check_input
Funktion. Spezifischen Desinfektionsmittel werden könnte, Funktionen oder Objekte mit einem__invoke
Methode. Eine Karte zu erstellen von Formularfeldern für Desinfektionsmittel (zum Beispiel ein array von input name sanitizer Rückrufe). Die Reihenfolge der Elemente in der Zuordnung wird die Anordnung der Bereinigung; wenn Sie eine einzelne Struktur zu definieren, die die form von Informationen, der Anzeige-Reihenfolge und-Bereinigung, um somit die gleiche sein.Hier ist eine sehr grobe Gliederung:
Als für das setzen eines input-Wert, der vom Benutzer gelieferten Daten, einfach die Ausgabe der Wert des Elements bei der Ausgabe des Elements. Wie bei allen Benutzereingaben (wirklich, alle formatierte Ausgabe), richtig escape, die Daten bei der Ausgabe. Für HTML-Attribute, dies bedeutet, mit (z.B.)
htmlspecialchars
. Hinweis: Sie sollten nur die Flucht ausgehende Daten. Dies bedeutet, dass Ihre Bereinigung Funktionen sollten nicht nennenhtmlspecialchars
.Können Sie die Benutzerfreundlichkeit zu verbessern indem Sie jeden Fehler neben den entsprechenden Eingang, indem eine "Fehler" - Klasse, um das element und das styling der "Fehler" Klasse zu machen, zeichnen sich. Verbesserung der Erreichbarkeit durch die Verpackung
<label>
Elemente rund um den label-text.InformationsquelleAutor outis
Diese Struktur verwenden von Skript:
InformationsquelleAutor Fanda
Können Sie immer tun Sie es, wie dieses, filter_var und in_array überprüft:
InformationsquelleAutor Lawrence Cherone