【发布时间】:2020-08-05 17:08:10
【问题描述】:
我想验证表单注册并创建类 UserValidator 并尝试检查用户名字段是否存在。在我看来一切都是正确的,但告诉我 2 个错误
警告:array_key_exists() 期望参数 2 为数组,在第 22 行的 C:\xampp\htdocs\class\index.php 中给出 null 注意:第 24 行 C:\xampp\htdocs\class\index.php 中的数据中不存在用户名。
<?php
if(isset($_POST['submit']))
{
$validation = new UserValidator($_POST);
$errors =$validation->validateForm();
}
<?php
class UserValidator
{
private $data;
private $errors =[];
private static $fields =['username', 'email'];
public function _construct($post_data)
{
$this->data = $post_data;
}
public function validateForm()
{
foreach(self::$fields as $field)
{
if(!array_key_exists($field, $this->data))
{
trigger_error("$field is not present in data");
return;
}
}
$this->validateUsername();
return $this->errors;
}
private function validateUsername()
{
$val = trim($this->data['username']);
if(empty($val))
$this->addError('username', 'username cannot be empty');
else
{
if(!preg_match('/^[a-zA-Z-0-9]{6,12}$/', $val))
{
$this->addError('username', 'username must me 6-12 characters');
}
}
}
private function addError($key, $val)
{
$this->errors[$key] = $val;
}
}
?>
<div id="register">
<h1>REJESTRACJA</h1>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<div class="row">
<div class="col-25">
<label for="loginRe">Login</label>
</div>
<div class="col-75">
<input type="text" name="username" placeholder="Login...">
<div class="error">
<?php echo $errors['username'] ?? '' ?>
</div>
</div>
</div>
<div class="row">
<div class="col-25">
<label for="email">Email</label>
</div>
<div class="col-75">
<input type="text" name="email" placeholder="Email...">
</div>
</div>
<div class="button">
<input type="submit" name="submit" value="Utwórz konto">
</div>
<div class="displayCenter">
<div class="display">
</div>
</div>
</form>
</div>
【问题讨论】:
-
您可能需要使用
in_array而不是array_key_exists。 $this->data 是什么样的? -
没有任何改变。继续显示这 2 个错误。
-
我刚刚粘贴了您的确切代码,在修复构造函数语法后我没有第二个错误。所以一定有一些你没有向我们展示的东西。做
print_r($_POST)可能有助于解决问题。