V tomto díle seriálu publikuji skript na základní a automatizovanou kontrolu formulářů na straně serveru, a jejich před-vyplňování, v případě, že formulář nebyl vyplněn korektně, a je nutné je opravit.
function check($field,$type,$chars=''){
$field=htmlspecialchars(trim($_POST[$field]));
$error='';
switch ($type){
case 'email':
if (preg_match(
'/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[A-Za-z]{2,5}$/',
$field)) return;
$error='Emailová adresa není platná.';
break;
case 'string':
if (!isset($chars)) $chars=2;
if (strlen($field)>=$chars) return;
$error="Tato položka musí mít minimálně $chars znaků.";
break;
case 'number':
if (!isset($chars)) $chars=0;
if ($chars==0 && !is_numeric($field))
$error="Položka nebyla zadána správně.";
if ($chars==0 && is_numeric($field) && intval($field)<0)
$error="Položka nebyla zadána správně.";
if ($chars>0)
if (!preg_match("/d{".strval($chars)."}/",$field))
$error="Toto číslo musí mít právě $chars znaků.";
break;
case 'ico':
if (!is_numeric($field))
$error='IČ nemá správný formát.';
break;
case 'equal':
if (!isset($field) || !isset($_POST[$chars]))
$error='Položka není shodná s předchozí';
if (strcmp($field,$_POST[$chars])!=0)
$error='Tato položka ('.
$field.
') není shodná s předchozí ('.
$_POST[$chars].')';
break;
default:
die('Chybná konfigurace systému');
break;
}
if (!empty($error)) {
echo "<p style='color:red'>Chyba: <em>$error</em></p>n";
$this->isok=false;
}
} /* end check */
Uvedenou funkci poté můžeme používat pro kontrolu stringových, numerických položek, emailů, IČ organizace (musí být modulo 11), případně rovnosti 2 vložených položek (například 2x vkládaného emailu či hesla).
No tohle už jsem tak řešil, ale trošku jiným způsobem. Udělal jsem objekt, kterému předám jméno prvku, hlášku a typ a on všechno zpracuje. Vtip je v tom, že nepoužívám CASE, ale prosté regulární výrazy. Prostě na ovšření vložím regulární výraz a těch mám několik předdefinovanch jako konstanty. Podle mě je to výhodnější v tom, že je to univerzálnější a snadněji upravitelné, ale to je osobní pohled
Modulo sa dá vyrátať oveľa jednoduchšie a možno aj rýchlejšie.
Tento kus kódu by som čakal od nejakého Pascalistu a nie od ostrielaného kódera.
if((intval(floatval($field)/11)*11)!=intval($field))je napríklad ekvivalentné s
if($field % 11)No čo je lepšie?
[2] absolutně souhlas, občas bych ten VELMI STARÝ kód měl prověřit, nicméně, taky je heslo never change a running system 😉