187 lines
6.0 KiB
PHP
187 lines
6.0 KiB
PHP
<?php
|
|
/**
|
|
* @package Campsite
|
|
*/
|
|
|
|
/**
|
|
* @var array $g_inputErrors Used to store error messages.
|
|
*/
|
|
global $g_inputErrors;
|
|
$g_inputErrors = array();
|
|
|
|
|
|
/**
|
|
* @package Campsite
|
|
*/
|
|
class Input {
|
|
/**
|
|
* Please see: {@link http://ca.php.net/manual/en/function.get-magic-quotes-gpc.php
|
|
* this PHP.net page specifically the user note by php at kaiundina dot de},
|
|
* for why this is so complicated.
|
|
*
|
|
* @param array $p_array
|
|
* @return array
|
|
*/
|
|
function CleanMagicQuotes($p_array)
|
|
{
|
|
$gpcList = array();
|
|
|
|
foreach ($p_array as $key => $value) {
|
|
$decodedKey = stripslashes($key);
|
|
if (is_array($value)) {
|
|
$decodedValue = Input::CleanMagicQuotes($value);
|
|
} else {
|
|
$decodedValue = stripslashes($value);
|
|
}
|
|
$gpcList[$decodedKey] = $decodedValue;
|
|
}
|
|
return $gpcList;
|
|
} // fn CleanMagicQuotes
|
|
|
|
|
|
/**
|
|
* Get an input value from the $_REQUEST array and check its type.
|
|
* The default value is returned if the value is not defined in the
|
|
* $_REQUEST array, or if the value does not match the required type.
|
|
*
|
|
* The type 'checkbox' is special - you cannot specify a default
|
|
* value for this. The return value will be TRUE or FALSE, but
|
|
* you can change this by specifying 'numeric' as the 3rd parameter
|
|
* in which case it will return '1' or '0'.
|
|
*
|
|
* Use Input::IsValid() to check if any errors were generated.
|
|
*
|
|
* @param string $p_varName
|
|
* The index into the $_REQUEST array.
|
|
*
|
|
* @param string $p_type
|
|
* The type of data expected; can be:
|
|
* "int"
|
|
* "string"
|
|
* "array"
|
|
* "checkbox"
|
|
* "boolean"
|
|
*
|
|
* Default is 'string'.
|
|
*
|
|
* @param mixed $p_defaultValue
|
|
* The default value to return if the value is not defined in
|
|
* the $_REQUEST array, or if the value does not match
|
|
* the required type.
|
|
*
|
|
* @param boolean $p_errorsOk
|
|
* Set to true to ignore any errors for this variable (i.e.
|
|
* Input::IsValid() will still return true even if there
|
|
* are errors for this varaible).
|
|
*
|
|
* @return mixed
|
|
*/
|
|
function Get($p_varName, $p_type = 'string', $p_defaultValue = null, $p_errorsOk = false)
|
|
{
|
|
global $g_inputErrors;
|
|
$p_type = strtolower($p_type);
|
|
|
|
if ($p_type == 'checkbox') {
|
|
if (strtolower($p_defaultValue) != 'numeric') {
|
|
return isset($_REQUEST[$p_varName]);
|
|
} else {
|
|
return isset($_REQUEST[$p_varName]) ? '1' : '0';
|
|
}
|
|
}
|
|
if (!isset($_REQUEST[$p_varName])) {
|
|
if (!$p_errorsOk) {
|
|
$g_inputErrors[$p_varName] = 'not set';
|
|
}
|
|
return $p_defaultValue;
|
|
}
|
|
// Clean the slashes
|
|
if (get_magic_quotes_gpc()) {
|
|
if (is_array($_REQUEST[$p_varName])) {
|
|
$_REQUEST[$p_varName] = Input::CleanMagicQuotes($_REQUEST[$p_varName]);
|
|
} else {
|
|
$_REQUEST[$p_varName] = stripslashes($_REQUEST[$p_varName]);
|
|
}
|
|
}
|
|
switch ($p_type) {
|
|
case 'boolean':
|
|
$value = strtolower($_REQUEST[$p_varName]);
|
|
if ( ($value == "true") || (is_numeric($value) && ($value > 0)) ) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
break;
|
|
case 'int':
|
|
if (!is_numeric($_REQUEST[$p_varName])) {
|
|
if (!$p_errorsOk) {
|
|
$g_inputErrors[$p_varName] = 'Incorrect type. Expected type '.$p_type
|
|
.', but received type '.gettype($_REQUEST[$p_varName]).'.'
|
|
.' Value is "'.$_REQUEST[$p_varName].'".';
|
|
}
|
|
return $p_defaultValue;
|
|
}
|
|
break;
|
|
case 'string':
|
|
if (!is_string($_REQUEST[$p_varName])) {
|
|
if (!$p_errorsOk) {
|
|
$g_inputErrors[$p_varName] = 'Incorrect type. Expected type '.$p_type
|
|
.', but received type '.gettype($_REQUEST[$p_varName]).'.'
|
|
.' Value is "'.$_REQUEST[$p_varName].'".';
|
|
}
|
|
return $p_defaultValue;
|
|
}
|
|
break;
|
|
case 'array':
|
|
if (!is_array($_REQUEST[$p_varName])) {
|
|
// Create an array if it isnt one already.
|
|
// Arrays are used with checkboxes and radio buttons.
|
|
// The problem with them is that if there is only one
|
|
// checkbox, the given value will not be an array. So
|
|
// we make it easy for the programmer by always returning
|
|
// an array.
|
|
$newArray = array();
|
|
$newArray[] = $_REQUEST[$p_varName];
|
|
return $newArray;
|
|
// if (!$p_errorsOk) {
|
|
// $g_inputErrors[$p_varName] = 'Incorrect type. Expected type '.$p_type
|
|
// .', but received type '.gettype($_REQUEST[$p_varName]).'.'
|
|
// .' Value is "'.$_REQUEST[$p_varName].'".';
|
|
// }
|
|
// return $p_defaultValue;
|
|
}
|
|
}
|
|
return $_REQUEST[$p_varName];
|
|
} // fn get
|
|
|
|
|
|
/**
|
|
* Return FALSE if any calls to Input::Get() resulted in an error.
|
|
* @return boolean
|
|
*/
|
|
function IsValid()
|
|
{
|
|
global $g_inputErrors;
|
|
if (count($g_inputErrors) > 0) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
} // fn isValid
|
|
|
|
|
|
/**
|
|
* Return a default error string.
|
|
* @return string
|
|
*/
|
|
function GetErrorString()
|
|
{
|
|
global $g_inputErrors;
|
|
ob_start();
|
|
print_r($g_inputErrors);
|
|
$str = ob_get_clean();
|
|
return $str;
|
|
} // fn GetErrorString
|
|
|
|
} // class Input
|
|
|
|
?>
|