@Kashin1337

Как исправить ошибку Trying to access array offset on value of type null при проверке не существующих логина и пароля?

У меня есть форма авторизации, где получают пароль по введеному $_POST['telegram_id'],
если пароль равен введенному $_POST['password'] то все ок.
Но если ввести telegram_id которого нет в ДБ, выходит ошибка Trying to access array offset on value of type null
Как исправить?
Код:
<?php
session_start();
require_once '../admin/connection.php';
include '../admin/tg_token.php';
//текста ошибки по стандарту нет
$id_error = '';
$pass_error = '';
if (isset($_POST['auth'])) {

$telegram_id = filter_var(trim($_POST['telegram_id']), FILTER_SANITIZE_STRING);
$password = filter_var(trim($_POST['password']), FILTER_SANITIZE_STRING);

//проверка длины
if(strlen($telegram_id) < 5 || strlen($telegram_id) > 15 ) {
	$id_error = "Недопустимая длина ID";
}

if(strlen($password) < 5 || strlen($password) > 20 ) {
	$pass_error = "Недопустимая длина пароля";
}

	$query = "SELECT * FROM `workers` WHERE telegram_id='$telegram_id'";
  $result = $mysql->query($query);
  $result = $result->fetch_assoc();
if ($telegram_id == $result["telegram_id"] and $password == $result["password"])   {
echo "пароль верный";
}
else {
	echo "пароль неверный";
}
}
?>
  • Вопрос задан
  • 13294 просмотра
Пригласить эксперта
Ответы на вопрос 1
nowm
@nowm
fetch_assoc вместо массива возвращает null, если запрос вернул пустой результат. У вас переменная $result равна null. Об этом прямо написано в ошибке.

if (
    is_array($result)
    && $telegram_id === $result["telegram_id"]
    && $password === $result["password"]
) {
    echo "пароль верный";
}


Кстати, советую эту статью почитать: https://habr.com/ru/post/148701/. К слову, рано или поздно вы с автором этой статьи тут столкнётесь (если он не забанен сейчас), потому что он мимо такого кода не проходит, и у него большая практика тыкания лицом в какашки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы