Jednoduchá dynamická funkce ověření formuláře pomocí PHP

Původně zveřejněno @ https://codeanddeploy.com navštivte a stáhněte si ukázkový kód:https://codeanddeploy.com/blog/php/simple-dynamic-form-validation-function-using-php

V tomto tutoriálu kóduji jednoduchou funkci dynamického ověřování formulářů pomocí PHP který má stejnou syntaxi jako ověření Laravel. Víme, že ověření je jednou z nejdůležitějších před uložením do naší databáze. Pokud má například váš sloupec povolenou velikost pouze 100 znaků, ale nezkontrolovali jste maximální počet znaků a váš uživatel zadal více než 100 znaků, budou uložená data oříznuta.

Toto jsou mé základní vlastnosti této funkce:

  • Povinné – nastavte pole podle potřeby a nepokračujte, pokud nezadáte žádnou hodnotu
  • E-mail – zaškrtněte pole, zda se jedná o platný e-mail
  • Unikátní – zaškrtněte pole, zda se jedná o jedinečnou hodnotu pro vaši databázovou tabulku (užitečné pro kontrolu, zda hodnota v tabulce ještě neexistuje)
  • Max – Zkontrolujte maximální délku pole
  • Min – Zkontrolujte minimální délku pole

Jak tuto funkci používat?

Zkontrolujte prosím níže uvedený kód, jak tuto funkci používat:

// Validate the data
$validation = validate($_REQUEST, [
    'email' => 'required|email|unique:employees|min:2|max:100',
    'first_name' => 'required|min:2|max:100',
    'last_name' => 'required|min:2|max:100',
    'address' => 'required|min:2|max:250'
]);

Jak můžete vidět výše, funkci validate() nazýváme tyto parametry:

function validate($input, $rules) {}

$vstup - Toto je typ pole a je vhodný pro $_REQUEST a $_POST Super globální proměnná. Níže je ukázkový formát pole.

Array
(
    [email] => [email protected]
    [first_name] => Ronard
    [last_name] => Cauba
    [address] => Dumaguete City, Negros Oriental, Philippines
)

$pravidla - Toto je typ pole s hodnotou ověření pole. Níže je uvedena hodnota pole vzorků.

[
    'email' => 'required|email|unique:employees|min:2|max:100',
    'first_name' => 'required|min:2|max:100',
    'last_name' => 'required|min:2|max:100',
    'address' => 'required|min:2|max:250'
]

Syntaxe ověření

Název klíče pole, což je název pole z $input parametr a název klíče pole $rules parametr musí být stejný. Jak můžete vidět výše uvedený příklad pro $input &pravidla $ parametry.

Požadovaná syntaxe - pokud musí být vaše pole povinné, musíte do parametru $rules přidat „povinné“ s názvem pole, například:

[
..
    'email' => 'required'
..
]

Syntaxe e-mailu - pokud vaše pole potřebuje ověřit, zda je e-mail platný, musíte do parametru $rules přidat "e-mail" s názvem pole, například:

[
..
    'email' => 'required|email'
..
]

POZNÁMKA: Jak můžete vidět, máme nyní povinné a e-mailové ověření pro pole e-mailu. Takže musíte mít oddělovač "|" (čára)

Jedinečná syntaxe - pokud vaše pole musí mít pro vaši tabulku jedinečnou hodnotu, musíte přidat "unique:{table_name}", takže pokud je název vaší tabulky "users", mělo by to být takto:

[
..
    'email' => 'unique:users'
..
]

Minimální syntaxe - pokud má vaše pole minimální počet znaků, musíte přidat "min:{minimum_number}". Zde je ukázkový kód níže:

[
..
    'email' => 'min:10'
..
]

Maximální syntaxe - pokud má vaše pole maximální počet znaků, musíte přidat "max:{maximum_number}". Zde je ukázkový kód níže:

[
..
    'email' => 'max:100'
..
]

Dokončete funkce ověření formuláře

Nyní máte základní ověření formuláře. Nyní vám poskytnu úplný zdrojový kód funkce, který můžete použít.

Za prvé , config.php

<?php
    //set the servername
    define("SERVER_NAME", "localhost");
    //set the server username
    define("SERVER_UNAME", "root");
    // set the server password (you must put password here if your using live server)
    define("SERVER_UPASS", "");
    // set the table name
    define("SERVER_DB", "demos");

    // Include functions file
    require_once 'functions.php';

    // Connect to database
    $db = connectDB();
?>

Za druhé , functions.php

<?php

    function connectDB() 
    {
        $db = new mysqli(SERVER_NAME, SERVER_UNAME, SERVER_UPASS, SERVER_DB);

        if ($db->connect_errno) {
          echo "Failed to connect to MySQL: " . $db->connect_error;
          exit();
        }

        return $db;
    }

    function validate($input, $rules) 
    {
        $errors = [];

        if(is_array($input)):
            foreach($rules as $fieldName=>$value):
                $fieldRules = explode("|", $value);

                foreach($fieldRules as $rule):

                    $ruleValue = _getRuleSuffix($rule);
                    $rule = _removeRuleSuffix($rule);

                    if($rule == "required" && isEmptyFieldRequired($input, $fieldName)):
                        $errors[$fieldName]['required'] = _removeUnderscore(ucfirst($fieldName)) . " field is required.";
                    endif;

                    if($rule == "email" && !isEmailValid($input, $fieldName)):
                        $errors[$fieldName]['email'] = _removeUnderscore(ucfirst($fieldName)) . " field is invalid.";
                    endif;

                    if($rule == "min" && isLessThanMin($input, $fieldName, $ruleValue)):
                        $errors[$fieldName]['max'] = _removeUnderscore(ucfirst($fieldName)) . " field is less than " . $ruleValue . " characters of the minimum length.";
                    endif;

                    if($rule == "max" && isMoreThanMax($input, $fieldName, $ruleValue)):
                        $errors[$fieldName]['max'] = _removeUnderscore(ucfirst($fieldName)) . " field is more than " . $ruleValue . " characters of the maximum length.";
                    endif;

                    if($rule == "unique" && !isRecordUnique($input, $fieldName, $ruleValue)):
                        $errors[$fieldName]['unique'] = _removeUnderscore(ucfirst($fieldName)) . " field is already exists.";
                    endif;

                endforeach;
            endforeach;
        endif;

        return $errors;

    }

    function isEmptyFieldRequired($input, $fieldName) 
    {
        return $input[$fieldName] == "" || empty($input[$fieldName]);
    }

    function isLessThanMin($input, $fieldName, $value) 
    {
        return strlen($input[$fieldName]) < $value; 
    }

    function isMoreThanMax($input, $fieldName, $value) 
    {
        return strlen($input[$fieldName]) > $value;
    }

    function isRecordUnique($input, $fieldName, $value) 
    {   
        // Connect to database
        $db = connectDB();

        // SQL Statement
        $sql = "SELECT * FROM ".$value." WHERE ".$fieldName."='".$input[$fieldName]."'";

        // Process the query
        $results = $db->query($sql);

        // Fetch Associative array
        $row = $results->fetch_assoc();

        // Close db connection
        $db->close();

        // If the result is not array so the record is unique
        return !is_array($row);
    }

    function isEmailValid($input, $fieldName) 
    {
        $email = $input[$fieldName];

        if(!empty($email) || $email != ""):
            return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $email)) ? FALSE : TRUE;
        else:
            return TRUE;
        endif;
    }


    function _removeUnderscore($string) 
    {
        return str_replace("_", " ", $string);
    }

    function _removeRuleSuffix($string) 
    {
        $arr = explode(":", $string);

        return $arr[0];
    }

    function _getRuleSuffix($string) 
    {
        $arr = explode(":", $string);

        return isset($arr[1])?$arr[1]:null;
    }

?>

Třetí , implementace kódu

<?php
    // include config file
    require_once 'config.php';

    // Validate the data
    $validation = validate($_REQUEST, [
        'email' => 'required|email|unique:employees|min:2|max:100',
        'first_name' => 'required|min:2|max:100',
        'last_name' => 'required|min:2|max:100',
        'address' => 'required|min:2|max:250'
    ]);

    // Defined $result as array
    $result = [];

    // Check if no validation errors
    if(!count($validation)):
       //do something here
    else:
       //do something here to display the errors
       $result['has_error'] = 1;
       $result['errors'] = $validation;
    endif;

    // Encode array into json format (this is useful if your using ajax)
    echo json_encode($result);
?>

Čtvrté , Výsledek, kdy došlo k chybě.

To je vše. Doufám, že tato základní funkce může dynamicky pomoci při ověřování formulářů. Doufám, že vám tento tutoriál může pomoci. Pokud si chcete tento kód stáhnout, navštivte prosím https://codeanddeploy.com/blog/php/simple-dynamic-form-validation-function-using-php.

POZNÁMKA:V tomto tutoriálu používám ajax, takže jen upravte svůj kód tak, aby vyhovoval funkcím, které nejsou Ajax.

Děkuji za přečtení. Hodně štěstí při kódování :)