erich p.: Reservierungsformular

Beitrag lesen

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