Ich denke zu quer und komme nicht auf die Lösung, die vermutlich tierisch einfach ist...
Es soll ein Formular sein mit Überprüfungen, ob die einzelnen Felder leer, resp. richtig ausgefüllt sind. Soweit klappt es auch. Derzeit habe ich es so, dass bei einem Fehler eine entsprechende Meldung über dem Formular angezeigt wird. Jetzt hätte ich aber auch noch gerne eine optische Hervorhebung, wo der Fehler ist. Im Beispiel habe ich hinter die Eingabefelder ein span-Tag mit einer variablen Klasse und einem Ausrufezeichen als Inhalt. Aufruf des Formulars: Klasse ist "hidden". Validierung: Klasse ist immer noch "hidden", nur dort, wo ein Fehler ist, soll eine Klasse namens "hinweis" vorhanden sein. Erst bei einem Fehler soll das Ausrufezeichen sichtbar werden. Aber wie??
Im Head:
HTML-Code:
<style type="text/css">
.hidden{
visibility: hidden;
}
.hinweis{
visibility: visible;
}
</style>
Im Body:
PHP-Code:
<?php
$formular="
<form action=\"$_SERVER[PHP_SELF]\" method=\"post\" id=\"thisform\">
<p>
<input type=\"hidden\" name=\"formular_gezeigt\" value=\"pos\" />
</p>
<fieldset>
<legend>Kontakt-Formular</legend>
<p><label for=\"name\">Name</label><br />
<input type=\"text\" id=\"name\" name=\"name\" value=\"".htmlentities($_POST['name'])."\" /><span class=\"".$klasse."\">!</span></p>
<p><label for=\"email\">E-Mail-Adresse</label><br />
<input type=\"text\" id=\"email\" name=\"email\" value=\"".$_POST['email']."\" /><span class=\"".$klasse."\">!</span></p>
<p><label for=\"kommentar\">Message</label><br />
<textarea id=\"kommentar\" name=\"kommentar\" rows=\"7\" cols=\"35\">".htmlspecialchars($_POST['kommentar'])."</textarea><span class=\"".$klasse."\">!</span></p>
<p><input type=\"submit\" value=\"Abschicken\" /></p>
</fieldset>
</form>";
// wurde das Formular schon angezeigt?
if($formular_gezeigt != "pos"):
echo $formular;
// alles ausgefuellt?
else:
$fehler_flag = "no";
// $name leer?
if ($name == ""):
echo "<p class=\"fehler\">Bitte Namen eingeben!</p>";
$fehler_flag = "yup";
endif;
// $email leer?
if ($email == ""):
echo "<p class=\"fehler\">E-Mail-Adresse eingeben!</p>";
$fehler_flag = "yup";
endif;
// ist email gueltig?
if ($email != ""):
$email = strtolower(trim($email));
if (! @eregi('^[0-9a-z]+'.'@'.'([0-9a-z]+\.)+'.'([0-9a-z]){2,4}$', $email)):
echo "<p class=\"fehler\">Bitte E-Mail-Adresse noch einmal bitte prüfen!</p>";
$fehler_flag = "yup";
endif;
endif;
// wenn $fehler_flag gesetzt, dann zeige $formular noch einmal an
if ($fehler_flag == "yup"):
echo "$formular";
else:
//mailroutine
mail(blablbalbla);
endif;
endif;
?>
Oder mal eine Internetquelle, die das Thema behandelt? In Foren gibt es oft auf eine ähnlich gestellte Frage die Antwort, dass es ganz leicht sei, man müsse nur ein Flag setzen und das über eine CSS-Klasse lösen. Wie das genau gehen soll, habe ich jedoch bisher noch nicht gefunden...
Jemand eine Ahnung? Danke im voraus...
M