【问题标题】:Why program show error with : array_key_exists()?为什么程序显示错误:array_key_exists()?
【发布时间】: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) 可能有助于解决问题。

标签: php oop


【解决方案1】:

$this-&gt;data为NULL,不是构造函数填充,构造函数声明有错别字,漏了一个_

【讨论】:

    【解决方案2】:
    public function __construct($post_data)
    {
        $this->data = $post_data;
    }
    

    构造函数声明有错别字,请更正

    【讨论】:

    • 好的。第一个错误消失了。但是为什么要告诉我用户名不存在于数据中?
    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多