将错误消息存储在一个数组中

时间:2018-08-14 23:28:19

标签: php html

我想创建一个检查每个字段的函数,如果为空,则为该字段添加错误消息。

如果我具有以下格式:

<form method="post">
    <input type="text" name="name" placeholder="Name">
    <input type="email" name="email" placeholder="Email">
    <input type="submit" name="submit" value="Submit">
</form>

我尝试过:

$errors = array();
function empty_check($var, $fieldName){
    if( empty($var) ){
        $error = $fieldName . ' can\'t be empty';
        array_push($errors, $error);
    }
}

if (isset($_POST['form_submit'])) {
    empty_check( $_POST['name'], 'Name' );
    empty_check( $_POST['email'], 'Email' );
    print_r($errors);
}

因此,如果我提交表单并且两个字段都为空,我应该得到:

Array(
    [0] => Name can't be empty 
    [1] => Email can't be empty 
)

但是我收到错误消息,说$errors函数中的empty_check没有定义。

当我将其添加到参数中时:

function empty_check($var, $fieldName, $errors){
    ..
}

然后,我每次运行该函数时都需要添加该参数,然后我得到一个空数组:

empty_check( $_POST['name'], 'Name', $errors );
empty_check( $_POST['email'], 'Email', $errors );

返回:

Array()

我尝试了return,但是却收到错误消息[] can't be used for reading

function empty_check($var, $fieldName){
    if( empty($var) ){
        $errors[] = $fieldName . ' can\'t be empty';
        return $errors[];
    }
}

应该如何?

3 个答案:

答案 0 :(得分:2)

我个人将编写一个SpamChecker()类,该类检查不良数据和空数据并验证电子邮件。您要找的内容可以通过验证在前端处理,无论如何您都应该拥有。

function check_for_empty_form_values($frm)
{
    $keys = array_keys($frm);
    if (empty($keys)) {
        return array("No data set");
    }
    $errors = array();
    foreach ($keys as $field) {
        if (empty($frm[$field])) {
            $errors[] = " Field : " . $field . " not set";
        }
    }
    return $errors;
}


$_POST["first_name"] = "Mike";
$_POST["last_name"] = "Q";
$_POST["middle"] = "";

$res = check_for_empty_form_values($_POST);

if (count($res) > 0) {
    echo " Errors Found " . count($res) . "\n";
}
var_dump($res);

示例命令行输出:

Errors Found 1
array(1) {
  [0]=>
  string(23) " Field : middle not set"
}

答案 1 :(得分:1)

在函数范围内使用之前,必须使用global声明全局范围内的变量。参考:Variable scope

因此:

function empty_check() {
  global $errors;

  // ..
}

这类似于使用extern关键字在C中的函数作用域中声明全局变量。这不同于JavaScript之类的许多较新语言,后者的函数可以从全局作用域继承变量。

答案 2 :(得分:0)

function empty_check($var, $fieldName,&$errors) {
 if( empty($var) ){
    $error = $fieldName . ' can\'t be empty';
    array_push($errors, $error);
   }
}