Hi Airis.
In der Regel fähst du besser, wenn du zwar das Formular, also den HTML-Code der Webseite mit dem Formular auslagerst, diese jedoch auch als dynamische PHP-Datei und nicht als statische HTML-Datei anlegst. Da die rein clientseite Überprüfung der Benutzereingaben völlig unzureichend ist (sie lässt sich a) problemlos aushebeln und b) lässt sie je nach Implementierung womöglich auch Benutzer durch, die versehentlich invalide Angaben machen) musst du die Daten ja auch in denem PHP-Script nochmal validieren. Folglich wirst du dem Benutzer wahrscheinlich auch Hinweise geben wollen, wenn er was falsch ausgefüllt hat. Und dazu sollte deine Fomular-Seite eingebettete PHP-Codes beinhalten, die Fehlermeldungen auszuspucken. (Ein Schritt weiter wäre dann der zu einem Template-System, aber das ist wohl erstmal übertrieben).
Das Prinzip ist folgendes:
Aufrufe an das Formular gehen an ein Skript (z.B. form.php). Diese prüft zunächst, ob das Formular bereits abgeschickt wurde. Dazu setzt du in dieses entweder ein Hidden-Field (sei hier mal "sent") oder du wertest eben den Submit-Button aus.
Wurde das Formular nicht abgeschickt, dann gibst du einfach deine Formular-Seite aus:
Wenn das Formular abgeschickt wurde, dann validiere und sammle ggf. die Fehler in einem Array. Nach der Validierung der einzelnen Felder guckst du dann, ob in dem Array was drin ist (sprich ein oder mehrere Fehler). Wenn ja, dann bereitst du diese ggf. noch auf und bindest wieder das Formular ein (was PHP-Code enthält, die Fehlermelungen auszugeben). War kein Fehler drin, dann machst du einen Redirect auf eine "Danke für die Anfrage"-Seite. Dieser Redirect ist wichtig, da sonst das Formular leicht aus Versehen mehrfach abgeschickt wird (z.B. durch ein Klick auf "Reload/Aktualisieren" oder durch eine Änderung der Fenstergröße in den alten (auch den neuen?) NS (und, glaub auch in den alten Geckos)).
Also nochmal zusammengefasst etwa so:
<?php
if (empty($_REQEUST['sent'])) {
include('form.tpl');
die();
}
$errors = array();
if (empty($_REQUEST['name'])) $errors[] = 'name empty';
if (empty($_REQUEST['email'])) {
$errors[] = 'email empty';
} else if (!validate_email_against_rfc822($_REQUEST['email'])) $errors[] = 'email invalid';
if (emty($errors)) header('Location: http://www.example.com/success.html');
if (1 === sizeof($errors)) {
if ('name empty' == $errors[0]) $err_msg = 'Bitte geben Sie Ihren Namen an.';
if ('email empty' == $errors[0]) $err_msg = 'Bitte geben Sie Ihre E-Mail-Adresse an.';
} else {
if ('email empty' == $errors[1]) $err_msg = 'Bitte geben Sie ihren Namen und Ihre E-Mail-Adresse an.';
if ('email invalid' == $errors[1]) $err_msg = 'Bitte geben Sie ihren Namen an und überprüfen Sie Ihre E-Mail-Adresse.';
}
include ('form.tpl');
Ggf. stripslashes() über die Felder ziehen, falls magic_quotes_gpc = on.
Und form.tpl enthät dann eben ein <?php if (isset($err_msg)) echo html_entities($err_msg); ?>
Alles ungetestet natürlich...
Ich hoffe, das hilft dir weiter, ansonsten solltest du hier den relevanten Code abdrucken, dann können wir ja mal gucken.
Basti