Hello,
ein paar kleinere Korrekturen:
$_css = array();
$_css['input[name=name]']['background-color'] = '#FAA'; // hier finden sich die betroffen Feldnamen
$_css['input[name=phone]']['background-color'] = '#FAA';lasse es ausgeben:
define ('NL',chr(13).chr(10)); // da muss es auch eine Systemkonstante geben ?
function make_css($_css)
{
$cssstr = ' <style type="text/css">'.NL;
foreach($_css as $element => $format)
{
$cssstr .= " $element".NL;
$cssstr .= " {".NL;
foreach($format as $formatname => $value)
{
$cssstr .= " $formatname:$value;".NL;
}
$cssstr .= " }".NL;
}
$cssstr .= ' </style>'.NL;
return $cssstr;
}
und im Formular dann
<h1>Reservierung</h1>
<p id="errmess"><?php if(isset($_out['error'])) {echo $_out['error'];} ?></p>
^
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<label for="name">Name: </label><input type="text" name="name" <?php echo $_out['name']; ?>>
<label for="phone">Telefonnummer: </label><input type="text" name="phone" <?php echo $_out['phone']; ?>>
<input type="submit" name="submit" value="Reservieren">
</form>
So funktioniert das schon ganz nett.
Du brauchst also nur noch eine Funktion zu schreiben, die die Fehler feststellt und die CSS-Elemente entsprechend erzeugt bzw. überschreibt.
Und solange in $_out['error'] etwas drinsteht, wird einfach nicht gespeichert, sondern wieder vorgelegt. Du könntest per Session noch einen Zähler mitlaufen lassen, wie oft das der fall war, um Robot-Angriffe besser erkennen zu können. Kaum ein Mensch würde es wohl mehr als zwanzigmal versuchen.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg