我有一个带有隐私同意复选框的联系表,用户必须检查它。如果他们不这样做,则应出现必需的错误消息,就像其他字段一样。
问题是如果Undefined index: privacy复选框未选中,我会收到通知。如果我提交表单并检查它,那么它就可以工作。
我知道如果未选中该复选框,PHP 基本上不知道它存在,因此它不会将数据发送到 $_POST。
我读过的所有论坛帖子都提到了使用isset()或empty()解决这个问题,但我已经在使用它并以不同的方式使用它来尝试。
这可能是显而易见的,但在过去的几个小时里我无法弄清楚。
这是验证类的一部分:
class ValidateContactForm
{
private $data;
private $file;
private static $fields = [
'name',
'email',
'subject',
'message',
'privacy'
];
private static $fileInput = 'file';
private $errors = [];
public function __construct($postData, $fileData)
{
$this->data = $postData;
$this->file = $fileData;
}
public function validateForm()
{
// foreach (self::$fields as $field) {
// if (!array_key_exists($field, $this->data)) {
// trigger_error('An input key does not have a match in the array', E_USER_NOTICE);
// return;
// }
// }
if (!array_key_exists(self::$fileInput, $this->file)) {
trigger_error('The file input key does not match', E_USER_NOTICE);
}
$this->validateName();
$this->validateEmail();
$this->validateSubject();
$this->validateMessage();
$this->validatePrivacy();
$this->validateFile();
return $this->errors;
}
private function validatePrivacy()
{
$val = $this->data['privacy'];
if (empty($val)) {
$this->addError('privacy', 'The privacy checkbox is required.');
}
}
该validatePrivacy()方法检查是否$_POST['privacy']为空。
我也试过isset($_POST['privacy'])和$_POST['privacy'] != ''。
如果我使用vard_dump它,它会返回null,但我认为这是预期的行为,因为除非选中复选框,否则它不存在。
我知道我可以使用 HTMLrequired属性(我也会使用它)或 JavaScript,但我想更多地依赖服务器验证。我也想学习这些东西,而不是屈服于变通方法。
呼唤远方
侃侃尔雅
心有法竹