Affenformular mit Validierung (Beispiel 2)

Weitere Beispiele

Beispiel ausführen
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);

?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff