Das Formular aus Beispiel 1 ist hier um eine Eingabevalidierung erweitert worden.
Um eine solche Überprüfung der Benutzereingaben zu realisieren gibt es verschiedene Lösungsansätze.
Hier wird jeweils einem regulären Ausdruck ein Fehlermeldungstext zugeordnet.
Jedem Formularfeld können beliebig viele solcher Pärchen zugeordnet werden.
Deshalb ist das ein recht universell einsetzbares Verfahren.
<?php
/**
* Funktion um
* a) ggf. Slashes zu entfernen
* b) htmlentities() auf POST-Parameter anzuwenden
*/
function tidy_post_values()
{
$stack = array();
$args = func_get_args();
while ($idx = array_shift($args)){
if (!isset($_POST[$idx])){
$stack[$idx] = '';
continue;
}
$tmp = trim($_POST[$idx]);
$tmp = get_magic_quotes_gpc()
? stripslashes($tmp)
: $tmp;
$stack[$idx] = htmlentities($tmp);
}
return $stack;
}
/**
* Funktion zur Eingabevalidierung
*
*/
function apply_rules($values, $rules, $msg_tpl = '<p style="color:#cc0000;">%s</p>')
{
$stack = array();
foreach ($rules as $k => $v){
foreach ($v as $rule => $msg){
$success = preg_match($rule, $values[$k]);
if(!$success){
$stack[$k] = sprintf($msg_tpl, $msg);
break;
}
}
}
return $stack;
}
function get_comment_form(&$ok)
{
$values = tidy_post_values(
'sender',
'email',
'comment'
);
$rules = array(
'comment' => array(
'#.#' => 'Die Angabe eines Kommentares ist Pflicht',
'#.{5}#' => 'Mehr hast Du nicht zu sagen?',
'#^.{0,2000}$#s' => 'Der Kommentar sollte nicht länger als 2000 Zeichen sein.',
),
'sender' => array(
'#^.{0,30}$#' => 'Der Name darf maximal 30 Zeichen lang sein.',
'#^$|^.{3,}$#' => 'Der Name sollte länger als 2 Zeichen lang sein.',
),
'email' => array(
'#^([^@]+@[^@]+\.[^@]{2,}|)$#' => 'Bitte überprüfe Deine Email-Adresse.',
),
);
$errors = array();
$submit = '';
if (isset($_POST['GO'])) {
$errors = apply_rules($values, $rules);
$submit = count($errors)
? ''
: '<input type="submit" name="GO" value="Eintragen"/>';
if (count($errors)==0){
$ok = true;
}else{
$ok = false;
}
}
// Fehlermeldungen initialisieren um Notices zu vermeiden
if (!isset($errors['email'])){
$errors['email'] = '';
}
if (!isset($errors['comment'])){
$errors['comment'] = '';
}
if (!isset($errors['sender'])){
$errors['sender'] = '';
}
$form = <<< EOT
<h3>Kommentar eintragen</h3>
<form action="{$_SERVER['REQUEST_URI']}#comments" method="post">
<input type="hidden" name="COMMENTACTION" value="ISSEND"/>
{$errors['comment']}
<textarea name="comment" rows="10" cols="60">{$values['comment']}</textarea>
<fieldset><legend>Name</legend>
{$errors['sender']}
<input type="text" name="sender" value="{$values['sender']}"/>
</fieldset>
<fieldset><legend>Email</legend>
{$errors['email']}
<input type="text" name="email" value="{$values['email']}"/>
</fieldset>
<input type="submit" name="GO" value="Vorschau"/>
$submit
</form>
EOT;
return $form;
}
// MAIN
echo get_comment_form($ok);
?>