我想创建一个检查每个字段的函数,如果为空,则为该字段添加错误消息。
如果我具有以下格式:
<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[];
}
}
应该如何?
答案 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);
}
}