Using the PEAR library HTML_QuickForm2 to create a simple authentication form with a custom validation callback
In this code snippet tutorial, I’ll show how you can use the PEAR library HTML_QuickForm2 to create a simple authentication form with a custom validation callback.
<?php
// start session
session_start();
// check if user needs to authenticate
if (empty($_SESSION['accountID'])) {
// show form
require_once('HTML/QuickForm2.php');
// NOTE: have the form submit to itself
$form = new HTML_QuickForm2('login', 'post', array('action' => $_SERVER['REQUEST_URI']));
// add username field
$username = $form->addElement('text', 'username')->setLabel('username:');
$username->addRule('required', 'username is required.');
// add password field
$password = $form->addElement('password', 'password')->setLabel('password:');
$password->addRule('required', 'password is required.');
// add submit button
$form->addElement('submit', null, array('value' => 'submit'));
// add filter to trim all elements
$form->addRecursiveFilter('trim');
// add custom validation rule
$form->addRule(
'callback',
'authentication failed.',
array(
'callback' => 'portal_authentication_validation',
)
);
// check if form validates
if ($form->validate()) {
// at this point, the form has validated, set session data as authentication
// NOTE: at this point, the account ID should be fetched from the database, etc
$_SESSION['accountID'] = 'some_val';
// redirect user (reload url)
header("Location: " . $_SERVER['REQUEST_URI']);
die;
}
// form did not pass validation, display form
else {
// display form
echo $form;
}
}
// user is already authenticated..
else {
// do something here!
echo "Hello Auth User!";
}
// defines custom validation callback function
function portal_authentication_validation($form_args) {
/*
Args..
$form_args['username']
$form_args['password']
*/
// At this point, query the database to validate username/password, etc
if ($user_and_password_validates) {
return TRUE:
}
return FALSE;
}
?>
The above code will result in the following form: