Liebe(r) Nathi,
Du beschreibst ein "Affenformular".
Wenn Du den einfachen Formmailer in PHP zu Grunde legst, dann kannst Du der Reihe nach die Indices in $_POST überprüfen, um im Fehlerfalle eine Variable entsprechend zu befüllen und das Formular eben wieder ausgeben.
Beispiel für ein Affenformular:
<?php
/* Formular auswerten */
$fehler = false; // Noch ist alles OK.
if (!empty($_POST)) {
// Es wurden POST-Daten gesendet -> Auswerten!
$pflichtfelder = array("vname", "nname", "adresse", "plz", "ort");
foreach ($pflichtfelder as $pf) {
if (!isset($_POST[$pf]) || empty($_POST[$pf])) {
$fehler = true;
}
}
// Verarbeiten oder Formular wieder ausgeben?
if (!$fehler) {
// Verarbeiten!
echo "Vielen Dank. Die Daten wurden verarbeitet.";
}
}
if ($fehler || empty($_POST)) {
// Formular ausgeben (entweder war $_POST leer oder $fehler war true)
?>
~~~~~~html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Einfacher PHP-Formmailer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
~~~css
.fehler {
background-color: #ff8080;
border-color: #ff0000;
}
~~~html
</style>
</head>
<body>
<h1>Beispielformular</h1>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
<!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
<dl>
<dt><label for="vname">Ihr Vorname</label>:</dt>
<dd><input type="text" name="vname" id="vname"
~~~~~~php
<?php
$test = isset($_POST["vname"]) ? $_POST["vname"] : "";
echo 'value="', $test, '"';
if (empty($test) && $fehler)
echo ' class="fehler"';
?>
~~~ ~~~html
/></dd>
<dt><label for="nname">Ihr Nachname</label>:</dt>
<dd><input type="text" name="nname" id="nname"
~~~~~~php
<?php
$test = isset($_POST["nname"]) ? $_POST["nname"] : "";
echo 'value="', $test, '"';
if (empty($test) && $fehler)
echo ' class="fehler"';
?>
~~~ ~~~html
/></dd>
<dt><label for="adresse">Ihre Anschrift</label>:</dt>
<dd><input type="text" name="adresse" id="adresse"
~~~~~~php
<?php
$test = isset($_POST["adresse"]) ? $_POST["adresse"] : "";
echo 'value="', $test, '"';
if (empty($test) && $fehler)
echo ' class="fehler"';
?>
~~~ ~~~html
/></dd>
<dt><label for="plz">PLZ</label> und <label for="ort">Wohnort</label>:</dt>
<dd>
<input type="text" name="plz" id="plz"
~~~~~~php
<?php
$test = isset($_POST["plz"]) ? $_POST["plz"] : "";
echo 'value="', $test, '"';
if (empty($test) && $fehler)
echo ' class="fehler"';
?>
~~~ ~~~html
/>
<input type="text" name="ort" id="ort"
~~~~~~php
<?php
$test = isset($_POST["ort"]) ? $_POST["ort"] : "";
echo 'value="', $test, '"';
if (empty($test) && $fehler)
echo ' class="fehler"';
?>
~~~ ~~~html
/>
</dd>
</dl>
<!-- Ende der Beispielangaben -->
<p>
<input type="submit" value="Senden" />
<input type="reset" value="Zurücksetzen" />
</p>
</form>
</body>
</html>
<?php
}
?>
Du siehst wahrscheinlich selbst, dass obiger Code suboptimal ist. Besser wäre es, den HTML-Code in eine HTML-Datei auszulagern, die dann vom eigentlichen PHP-Script eingelesen, und bei Bedarf modifiziert wird.
Ich mache das eher so:
[HTML-Datei "formular-template.html"]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Einfacher PHP-Formmailer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
~~~css
.fehler {
background-color: #ff8080;
border-color: #ff0000;
}
~~~html
</style>
</head>
<body>
<h1>Beispielformular</h1>
<form action="" method="post">
<!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
<dl>
<dt><label for="vname">Ihr Vorname</label>:</dt>
<dd><input type="text" name="vname" id="vname" /></dd>
<dt><label for="nname">Ihr Nachname</label>:</dt>
<dd><input type="text" name="nname" id="nname" /></dd>
<dt><label for="adresse">Ihre Anschrift</label>:</dt>
<dd><input type="text" name="adresse" id="adresse" /></dd>
<dt><label for="plz">PLZ</label> und <label for="ort">Wohnort</label>:</dt>
<dd>
<input type="text" name="plz" id="plz" />
<input type="text" name="ort" id="ort" />
</dd>
</dl>
<!-- Ende der Beispielangaben -->
<p>
<input name="submit-button" type="submit" value="Senden" />
</p>
</form>
</body>
</html>
[PHP-Datei "test.php"]
<?php
/* Formular auswerten */
$fehler = false; // Noch ist alles OK.
$pflichtfelder = array("vname", "nname", "adresse", "plz", "ort");
if (!empty($_POST)) {
// Es wurden POST-Daten gesendet -> Auswerten!
foreach ($pflichtfelder as $pf) {
if (!isset($_POST[$pf]) || empty($_POST[$pf])) {
$fehler = true;
}
}
// Verarbeiten oder Formular wieder ausgeben?
if (!$fehler) {
// Verarbeiten!
echo "Vielen Dank. Die Daten wurden verarbeitet.";
}
}
if ($fehler || empty($_POST)) {
// Formular ausgeben (entweder war $_POST leer oder $fehler war true)
$html = file_get_contents('formular-template.html');
foreach ($pflichtfelder as $pf) {
$test = isset($_POST[$pf]) ? $_POST[$pf] : "";
$html_zusatz = 'value="'.$test.'"';
if (empty($test) && $fehler)
$html_zusatz .= ' class="fehler"';
$html = preg_replace('~(?is)(id="'.$pf.'")~', '\\1 '.$html_zusatz, $html);
}
echo $html;
}
?>
Hoffentlich hilft's...
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)