Почему программа показывает ошибку: array_key_exists ()? - PullRequest
0 голосов
/ 05 августа 2020

Я хочу проверить регистрацию формы, я создал класс UserValidator и пытаюсь проверить, существует ли поле имени пользователя. На мой взгляд, все правильно, но покажите мне 2 ошибки

Предупреждение: array_key_exists () ожидает, что параметр 2 будет массивом, значение null задано в C: \ xampp \ htdocs \ class \ index. php в строке 22 Примечание: имя пользователя отсутствует в данных в C: \ xampp \ htdocs \ class \ index. php в строке 24.

<?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>

Ответы [ 2 ]

0 голосов
/ 05 августа 2020
public function __construct($post_data)
{
    $this->data = $post_data;
}

В объявлении конструктора есть опечатка, исправьте

0 голосов
/ 05 августа 2020

$this->data имеет значение NULL, не заполняется конструктором, в объявлении конструктора есть опечатка, одна отсутствует _

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...