Weil da noch ein Fehler drin war, den ich in
https://forum.selfhtml.org/?t=175925&m=1156773
beseitigt habe.Die Attribute der Elemente
$_css['input[name=name]']['background-color'] = '#FAA';
$_css['input[name=phone]']['background-color'] = '#FAA';
Also nochmal von vorn. Wenn ich das richtig verstanden habe, muss ich also in der reservation.php die zu Beginn des Skriptes die Funktion make_css() definieren. Dann, sofern ein Fehler auftritt (z.B. Formularfeld "name" nicht ausgefüllt), muss die make_css() Funktion ausgeführt und die $cssstr (halt die erzeugte CSS-Definition) im head ausgegeben werden. Soviel zur Theorie, das sollte stimmen, oder?
Ich habe dementsprechend die reservierung.php folgendermassen geändert:
<?php
define ('NL',chr(13).chr(10));
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;
}
// Konfiguration
$empfaenger = "meinemail@meinhost.com";
$subject = "Reservierung";
$header = 'From: meinemail@meinhost.com' . "\r\n" .
'Reply-To: meinemail@meinhost.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$_css = array();
if (isset($_POST['submit']) && $_POST['name'] !== "" && $_POST['phone'] !== "") {
$mailtext = $_POST['name'].", ".$_POST['phone'];
mail($empfaenger, $subject, $mailtext, $header);
echo "Besten Dank für Ihre Reservierung";
}
else {
if (isset($_POST['submit'], $_POST['name'], $_POST['phone'])){
if ($_POST['name'] == ""){
$_out['error']['name'] = "Bitte geben Sie Ihren Namen ein.";
$_css['input[name=name]']['background-color'] = '#FAA';
}
if ($_POST['phone'] == ""){
$_out['error']['phone'] = "Bitte geben Sie Ihre Telefonnummer ein.";
$_css['input[name=phone]']['background-color'] = '#FAA';
}
}
$_out['name'] = htmlspecialchars($_POST['name']);
$_out['phone'] = htmlspecialchars($_POST['phone']);
include "formular.php";
}
?>
Die Funktion $_css wird definiert, die Überprüfung wird ausgeführt, falls ein Fehler vorliegt wird die $_css entsprechend "ergänzt".
Die Ausgabe der CSS-Definition muss ich ja im header machen und da es das Formular betrifft und ich dieses erst am Ende der else-Klausel include (hmm..das änder ich noch zu require), kann ich in der formular.php die CSS-Definition folgendermassen im header ausgeben (header zur Darstellung gekürzt):
<head><?php echo make_css($_css);?></head>
Also funktionieren tuts, aber ich bin mir nicht sicher ob Du das so gemeint hast. Ists richtig?
Gruss
erich