Search code examples
phpformssanitizationformvalidation-plugin

Validating Data using GUMP PHP class


Please note, there is a question on stackoverflow "Validating Data using GUMP on Slimphp" but this question I ask is not a duplicate.

I want to use the GUMP PHP input validation class to validate my form data (available here on https://github.com/Wixel/GUMP) but could not figure out how to append it to my form.

Here is an example of the GUMP which is pretty straight forward

<?php
require "../gump.class.php";
$validator = new GUMP();

// Set the data
$_POST = array( 
    'username' => 'Sisi', 
    'password' => 'mypassword', 
    'email'    => 'sean@wixel.net', 
    'gender'   => 'm', 
    'bio'      => 'This is good! I think I will switch to another language');

$_POST = $validator->sanitize($_POST); // You don't have to sanitize, but it's safest to do so.

// Let's define the rules and filters
$rules = array( 
'username' => 'required|alpha_numeric|max_len,100|min_len,6',
'password' => 'required|max_len,100|min_len,6',
'email'    => 'required|valid_email',
'gender'   => 'required|exact_len,1',
'bio'      => 'required');

$filters = array( 
'username'    => 'trim|sanitize_string',
'password'    => 'trim|base64_encode',
'email'       => 'trim|sanitize_email',
'gender'      => 'trim');

$_POST = $validator->filter($_POST, $filters);

// You can run filter() or validate() first
$validated = $validator->validate($_POST, $rules);

// Check if validation was successful
if($validated === TRUE)
{
    echo "Successful Validation\n\n";
    print_r($_POST); // You can now use POST data safely
    exit;

}else{
    // You should know what form fields to expect, so you can reference them here for custom messages
    echo "There were errors with the data you provided:\n";
    // Or you can simply use the built in helper to generate the error messages for you
    // Passing a boolean true to is returns the errors as html, otherwise it returns an array
    echo $validator->get_readable_errors(true);
}

Now, a demo form that I created for testing purpose, which collects the username and password and prints it

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user_name = $_POST["user_name"];
$user_password = $_POST["user_password"];

echo $user_name;
echo $user_password;
}

I know I need to replace this

$_POST = array('username' => 'Sisi', 'password' => 'mypassword', 'email' => sean@wixel.net', 'gender' => 'male', 'bio' => 'This is good! I think I will switch to another language');

with

$user_name = $_POST["user_name"]; $user_password = $_POST["user_password"];

but simply am unable to.

Can you help?


Solution

  • Try this

    <?php
    require "../gump.class.php";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
    
    $validator = new GUMP();
    
    $user_name = $_POST['user_name'];
    $user_password = $_POST['user_password'];
    
    $_POST = array(
        'username' => $user_name,
        'password' => $user_password);
    
    $_POST = $validator->sanitize($_POST); // You don't have to sanitize, but it's safest to do so.
    
    // Let's define the rules and filters
    $rules = array( 
    'username' => 'required|alpha_numeric|max_len,100|min_len,6',
    'password' => 'required|max_len,100|min_len,6');
    
    $filters = array( 
    'username'    => 'trim|sanitize_string',
    'password'    => 'trim|base64_encode');
    
    $_POST = $validator->filter($_POST, $filters);
    
    // You can run filter() or validate() first
    $validated = $validator->validate($_POST, $rules);
    
    // Check if validation was successful
    if($validated === TRUE)
    {
        echo $user_name;
        echo $user_password;
    
        exit;
    }else{
        // You should know what form fields to expect, so you can reference them here for custom messages
        echo "There were errors with the data you provided:\n";
        // Or you can simply use the built in helper to generate the error messages for you
        // Passing a boolean true to is returns the errors as html, otherwise it returns an array
        echo $validator->get_readable_errors(true);
    }