大家好!我一直在努力弄清楚为什么我的表单验证无法识别空字段并将其作为错误返回。
这是我用来检查字段的函数:
function check_required_fields($required_array) {
$field_errors = array();
foreach($required_array as $fieldname) {
if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) {
$field_errors[] = $fieldname;
}
}
return $field_errors;
}
然后,我的表单是这样的过程:
if (isset($_POST['submit'])) { // Form has been submitted.
$errors = array();
// perform validations on the form data
$required_fields = array('client', 'banner', 'district', 'store', 'position', 'first_name', 'last_name', 'email', 'password');
$errors = array_merge($errors, check_required_fields($required_fields, $_POST));
和IF语句检查错误:
if ( empty($errors) ) {
$query =
问题是,即使我的字段为空(我用var_dump($ _ POST)检查它们)PHP执行$查询。我觉得这个功能有问题。我希望有人可以帮我发现错误!
以下是我的HTML代码的要点:
<form action="registration.php" method="post">
<label for="first_name" class="medium">First Name</label>
<input type="text" name="first_name" class="textbox short_field">
<button type="submit" name="submit" value="submit" class="form-submit-button">SUBMIT</button>
</form>
我还使用以下函数来验证字符串长度,它可以正常工作:
function check_max_field_lengths($field_length_array) {
$field_errors = array();
foreach($field_length_array as $fieldname => $maxlength ) {
if (strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) { $field_errors[] = $fieldname;
}
}
return $field_errors;
}
和
$fields_with_lengths = array('first_name' => 30, 'last_name' => 30, 'email' => 50, 'password' => 30);
$errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST));
答案 0 :(得分:1)
“问题是,即使我的字段为空(我用var_dump($ _ POST)检查它们),PHP执行$查询。”
你的问题是由这个条件引起的:$ var!= 0. Php可以在彼此之间转换不同类型的变量,所以空字符串等于0.证明:
<?php
$var = '';
var_dump($var == 0);
输出:bool(true)
现在看一下这个样本,模仿php如何处理你的情况:
<?php
$var = '';
var_dump(empty($var));
var_dump((empty($var) && $var != 0));
输出:
bool(true)
bool(false)
在第二种情况下,布尔函数返回false,因此,该变量不会被添加到错误数组中。
我不知道,你想用这个来实现什么:$var != 0
。但条件是:
if (!isset($_POST[$fieldname]) ||
(empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) {
$field_errors[] = $fieldname;
}
可以轻松切换到:
if (empty($_POST[$fieldname])) {
$field_errors[] = $fieldname;
}