FrodoPLM
Sat 23 June 2007, 08:37 am GMT +0200
Does anyone know of a free php form processing script that would allow me to set some fields as required, can both send to an email address and populate a flat file (something I could export to Excel) AND is easy to set up?
olaf
Sat 23 June 2007, 10:49 am GMT +0200
its not so hard for someone with moderate php skills
Nikolas
Sat 23 June 2007, 11:23 am GMT +0200
I've always wanted to release a class for form processing, but I guess you will have to wait a little for this :)
olaf
Sat 23 June 2007, 11:30 am GMT +0200
I've always wanted to release a class for form processing, but I guess you will have to wait a little for this :)
me too, I have a lot of methods finished but providing a class is a lot of work :(
redredred
Fri 20 July 2007, 02:25 am GMT +0200
Here's a *very* basic class to validate forms. Please make suggestions for improving and extending it. Thanks in advance for your answers!
<?php
define('RULE_MIN_LENGTH', 0);
define('RULE_MAX_LENGTH', 1);
define('RULE_IS_EMPTY', 2);
define('RULE_NOT_VALID_EMAIL', 3);
define('RULE_IS_EQUAL', 4);
define('RULE_NOT_EQUAL', 5);
define('RULE_NOT_VALID_URL', 6);
define('RULE_NOT_INT', 7);
class formValidation
{
public $rules;
public function addRule($fieldName, $rule, $message, $value = '')
{
$this->rules[] = array($fieldName, $rule, $message, $value);
}
private function checkEMail($email)
{
if ((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',
$email)))
{
if (!function_exists('checkdnsrr'))
{
function checkdnsrr($hostName, $recType = '')
{
return true; //does not work properly on Windows
if (strlen($hostName) > 0)
{
if ($recType == '')
$recType = "MX";
exec("nslookup -type=$recType $hostName", $result);
//check each line to find the one that starts with the host
//name. If it exists then the function succeeded.
foreach ($result as $line)
{
if (eregi("^$hostName", $line))
{
return true;
}
}
//otherwise there was no mail handler for the domain
return false;
}
return false;
}
}
$host = substr(strrchr($email, '@'), 1);
if (checkdnsrr($host . '.', 'MX'))
return true;
if (checkdnsrr($host . '.', 'A'))
return true;
if (checkdnsrr($host . '.', 'CNAME'))
return true;
}
return false;
}
public function validateForm($requestArray = array())
{
if (!is_array($requestArray) || (count($requestArray) == 0))
{
$requestArray = $_REQUEST;
}
$messages = array();
foreach ($this->rules as $item)
{
$fieldname = $item[0];
$rule = $item[1];
$message = $item[2];
$value = $item[3];
switch ($rule)
{
case RULE_MIN_LENGTH:
if (!isset($requestArray[$fieldname]) || (strlen($requestArray[$fieldname]) < $value))
{
$messages[] = $message;
}
break;
case RULE_MAX_LENGTH:
if (!isset($requestArray[$fieldname]) || (strlen($requestArray[$fieldname]) > $value))
{
$messages[] = $message;
}
break;
case RULE_IS_EMPTY:
if (!isset($requestArray[$fieldname]) || ($requestArray[$fieldname] == ''))
{
$messages[] = $message;
}
break;
case RULE_NOT_VALID_EMAIL:
if (!isset($requestArray[$fieldname]) || !$this->checkEMail($requestArray[$fieldname]))
{
$messages[] = $message;
}
break;
case RULE_IS_EQUAL:
if (!isset($requestArray[$fieldname]) || ($requestArray[$fieldname] == $requestArray[$value]))
{
$messages[] = $message;
}
break;
case RULE_NOT_EQUAL:
if (!isset($requestArray[$fieldname]) || ($requestArray[$fieldname] != $requestArray[$value]))
{
$messages[] = $message;
}
break;
case RULE_NOT_VALID_URL:
if (!isset($requestArray[$fieldname]) || !$this->checkEMail($requestArray[$fieldname]))
{
$messages[] = $message;
}
break;
case RULE_NOT_INT:
if (!isset($requestArray[$fieldname]) || !$this->checkEMail($requestArray[$fieldname]))
{
$messages[] = $message;
}
break;
}
}
return $messages;
}
}
?>