2010-09-07 3 views
2

я форма проверяемого следующим образом:Наиболее эффективный способ проверки формы в массиве?

//Clear all variables 
$formCheck = ''; 
$rep = ''; 
$name = ''; 
$department = ''; 
$location = ''; 
$email = ''; 
$phone = ''; 
$type = ''; 
$drink = ''; 
$notes = ''; 
$lastVisited = ''; 
$nextVisit = ''; 

$clean_formCheck = ''; 
$clean_rep = ''; 
$clean_name = ''; 
$clean_department = ''; 
$clean_location = ''; 
$clean_email = ''; 
$clean_phone = ''; 
$clean_type = ''; 
$clean_drink = ''; 
$clean_notes = ''; 
$clean_lastVisited = ''; 
$clean_nextVisit = ''; 

function validateRep($rep){ 
...some code... 
} 

$formCheck = $_POST["formCheck"]; 
$rep = $_POST["rep"]; 
$name = $_POST["name"]; 
$department = $_POST["department"]; 
$location = $_POST["location"]; 
$email = $_POST["email"]; 
$phone = $_POST["phone"]; 
$type = $_POST["type"]; 
$drink = $_POST["drink"]; 
$notes = $_POST["notes"]; 
$lastVisited = $_POST["lastVisited"]; 
$nextVisit = $_POST["nextVisit"]; 

if (validateRep($rep)){ 
    $clean_rep = $rep; 
}else{ 
    echo "Invalid Rep"; 
    exit(); 
} 
//.....and so on...... 

было интересно, если это было бы более эффективным/очиститель для проверки с использованием массива вместо индивидуальной переменной? Если да, как бы я это сделал, и как бы я мог написать разные функции проверки в одном (например, сейчас у меня есть отдельная функция для проверки каждого поля), возможно ли это с помощью цикла через массив? я экспериментировал, и до сих пор это то, что у меня есть:

$unclean['formCheck'] = $_POST["formCheck"]; 
$unclean['rep'] = $_POST["rep"]; 
$unclean['name'] = $_POST["name"]; 
$unclean['department'] = $_POST["department"]; 
$unclean['location'] = $_POST["location"]; 
$unclean['email'] = $_POST["email"]; 
$unclean['phone'] = $_POST["phone"]; 
$unclean['type'] = $_POST["type"]; 
$unclean['drink'] = $_POST["drink"]; 
$unclean['notes'] = $_POST["notes"]; 
$unclean['lastVisited'] = $_POST["lastVisited"]; 
$unclean['nextVisit'] = $_POST["nextVisit"]; 


$clean = array(
     'rep', 'name', 'department', 'location', 'email', 'phone', 'type', 'drink', 'lastVisited', 'nextVisit', 
); 

, но я не уверен, как это исходить.

+1

Как именно вы «очищаете» эти переменные? – NullUserException

ответ

1

Я бы использовал что-то в этих строках ... Просто закодировал это очень быстро, в основном вы создаете функции проверки, соответствующие постовым полям, и возвращаете true или false, если проверка прошла. например validate_department, validate_type, validate_drink и т.д. Будет ли работать, если ваше сообщение данных не имеет каких-либо странных символов (которые до сих пор он не делает)

$post_fields = array('rep', 
         'name', 
         'department', 
         'location', 
         'email', 
         'phone', 
         'type', 
         'drink', 
         'lastVisited', 
         'nextVisit' 
       ); 

$validate = new Validate(); 

foreach ($post_fields as $post_var) 
{ 
    if (isset($_POST[$post_var])) 
    { 
     $validate->validate_data($post_var, $_POST[$post_var]); 
    } 
} 

if ($validate->all_fields_valid() === true) 
{ 
    echo 'congrats, all validation passed!'; 
} 
else 
{ 
    echo 'oh no! error in validation process. please see below errors: <p>' . 
     $validate->get_error_msg() . '</p>'; 
} 

И в VALIDATE класс ... Используйте $ ErrorMsg, чтобы увидеть сообщения об ошибках должны возникать в любых проблемах

class Validate 
{ 
    var $valid = 0, 
     $error = 0, 
     $errorMsg = ''; 

    function validate_data($var, $data) 
    { 
    if (method_exists($this, 'validate_'.$var)) 
    { 
     if (call_user_func(array($this, 'validate_'.$var), $data) === true) 
     { 
     $this->valid++; 
     } 
     else 
     { 
     $this->throwError('validation for: "'.$var.'" was not considered valid'); 
     } 
    } 
    else 
    { 
     $this->throwError('validation function for: "'.$var.'" does not exist'); 
    } 
    } 

    function throwError($msg = '') 
    { 
    if ($msg) $this->errorMsg .= $msg . '<br/>'; 
    $this->error++; 
    } 

    function all_fields_valid() 
    { 
    if (!$this->error) return true; 
    return false; 
    } 

/*********************************************** 
************************************************* 
Custom validation functions go below here 
    Function format: validate_<postFieldName> 
    Returns: true or false if the data passed is valid or not 
************************************************* 
*************************************************/ 

    function validate_type($type) 
    { 
    if (is_numeric($type)) return true; 
    return false; 
    } 

    function validate_lastVisited($data) 
    { 


    } 

    //etc............... 

} 
+0

Я получаю сообщение об ошибке «$ this-> error ++;», должна ли быть точка с запятой в строке выше? – Mankind1023

+0

Да, извините, это была моя ошибка. Я исправлю это, когда вернусь на свой компьютер. Помимо этого все работает? :) Рад, что я мог бы помочь –

+0

У меня действительно возникли проблемы с его работой, я пытался изменить код, чтобы посмотреть, смогу ли я это понять, но это займет больше времени, чем ожидалось :), в любом случае, вот некоторые ошибки: цикл for должен быть foreach, вероятно, есть также «Предупреждение: Отсутствует аргумент 1 для Validate :: validate_type() в /home/compudat/public_html/vt/scripts/validation.php в строке 48" ошибка, на данный момент скрипт останавливается. – Mankind1023

1

use filter_input.

$rep = filter_input(INPUT_POST, "rep", FILTER_SANITIZE_STRING); 
$name = filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING); 
$department = filter_input(INPUT_POST, "department", FILTER_SANITIZE_STRING); 
$location = filter_input(INPUT_POST, "location", FILTER_SANITIZE_STRING); 

if (filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)) 
{ 
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING); 
} 

Нравится это.

Смежные вопросы