JavaScript >> Javascript tutorial >  >> Tags >> PHP

Simpel dynamisk formularvalideringsfunktion ved hjælp af PHP

Oprindeligt indsendt @ https://codeanddeploy.com besøg og download prøvekoden:https://codeanddeploy.com/blog/php/simple-dynamic-form-validation-function-using-php

I denne tutorial koder jeg en simpel dynamisk formularvalideringsfunktion ved hjælp af PHP der har samme syntaks som Laravel-validering. Vi ved, at validering er en af ​​de vigtigste, før du gemmer den i vores database. For eksempel, hvis din kolonne kun har en størrelse på 100 tilladte tegn, men du ikke har kontrolleret det maksimale antal tegn, og din bruger indtastede mere end 100 tegn, vil de gemte data blive skåret.

Dette er mine grundlæggende funktioner i denne funktion:

  • Påkrævet - Indstil feltet som påkrævet og fortsæt ikke, hvis der ikke er indtastet værdi
  • E-mail - Marker feltet, hvis en gyldig e-mail
  • Unik - Marker feltet, om det er en unik værdi for din databasetabel (Nyttig til at kontrollere, om værdien endnu ikke findes i din tabel)
  • Maks – Tjek feltets maksimale længde
  • Min – Tjek feltets minimumlængde

Hvordan bruger man denne funktion?

Tjek venligst nedenstående kode om, hvordan du bruger denne funktion:

// 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'
]);

Som du kan se ovenfor kalder vi validate()-funktionen disse parametre:

function validate($input, $rules) {}

$input - Dette er en matrixtype, og den er velegnet til $_REQUEST og $_POST Super Global variabel. Nedenfor er eksempelformatet for et array.

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

$regler - Dette er en matrixtype med feltvalideringsværdi. Nedenfor er sample array værdien.

[
    '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'
]

Valideringssyntaks

Matrixnøglenavnet, som er feltnavnet fra $input parameter og matrixnøglenavnet for $rules parameter skal være den samme. Som du kan se ovenstående eksempel for $input &$regler parametre.

Påkrævet syntaks - hvis dit felt skal kræves, skal du tilføje "påkrævet" til parameteren $rules med dit feltnavn for eksempel:

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

E-mail-syntaks - hvis dit felt skal valideres, om e-mailen er gyldig, skal du tilføje "e-mail" til parameteren $rules med dit feltnavn for eksempel:

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

BEMÆRK: Som du kan se, har vi påkrævet og e-mail-validering nu for e-mail-feltet. Så du skal have en separator "|" (bjælkelinje)

Unik syntaks - hvis dit felt skal være en unik værdi for din tabel, så skal du tilføje "unique:{table_name}", så hvis dit tabelnavn er "brugere", skal det være sådan her:

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

Min. syntaks - hvis dit felt har et minimum antal tegn, skal du tilføje "min:{minimum_number}". Her er eksempelkoden nedenfor:

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

Maksimal syntaks - hvis dit felt har et maksimum antal tegn, skal du tilføje "max:{maximum_number}". Her er eksempelkoden nedenfor:

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

Fuldfør formularvalideringsfunktioner

Nu har du den grundlæggende validering af din formular. Nu vil jeg give den komplette funktionskildekode, som du kan bruge.

Først , 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();
?>

Anden , 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;
    }

?>

Tredje , kodeimplementering

<?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);
?>

Fjerde , Resultat, da fejlen opstod.

Det er det, jeg håber, at denne grundlæggende funktion kan hjælpe din formularvalidering dynamisk. Jeg håber, at denne vejledning kan hjælpe dig. Besøg venligst her https://codeanddeploy.com/blog/php/simple-dynamic-form-validation-function-using-php, hvis du vil downloade denne kode.

BEMÆRK:I dette selvstudie bruger jeg ajax, så bare juster din kode, så den passer til ikke ajax-funktionalitet.

Tak fordi du læste. God kodning :)