simplecontent

PHP Snippets und Beispiele

Inhaltsverzeichnis A-Z Register
Beispiel ausführen

Affenformular mit Validierung (Beispiel 2)

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. Das PHP Code Beispiel:
<?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)
#' 
=> '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);

?>

Dieses PHP Snippet soll in erster Linie als Beispiel und Anregung für eigene Bemühungen dienen.
Gerne darf man es für Projekte aller Art benutzen.
Möchte jemand das Snippet also solches in ähnlicher oder anderer Form veröffentlichen ist ein kleiner Hinweis auf simplecontent.net nicht zuviel verlangt oder Herr Koch?
Für die Abwesenheit von Fehlern kann natürlich keine Gewähr gegeben werden.