Ошибка при создании заказа trying to access array offset on value of type null

Ответили на вопрос 1 человек. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.

У меня есть форма авторизации, где получают пароль по введеному $_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 "пароль неверный";
}
}
?>


  • Вопрос задан

    более двух лет назад

  • 7260 просмотров

Пригласить эксперта

fetch_assoc вместо массива возвращает null, если запрос вернул пустой результат. У вас переменная $result равна null. Об этом прямо написано в ошибке.

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

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


  • Показать ещё
    Загружается…

12 февр. 2023, в 02:07

2000 руб./за проект

12 февр. 2023, в 00:06

1000 руб./в час

11 февр. 2023, в 22:57

25000 руб./за проект

Минуточку внимания

Today We are Going To Solve Message: Trying to access array offset on value of type null in Php. Here we will Discuss All Possible Solutions and How this error Occurs So let’s get started with this Article.

  1. How to Fix Message: Trying to access array offset on value of type null Error?

    To Fix Message: Trying to access array offset on value of type null Error just Use isset(). This error occurs only when your index 'char_data' does not exist.
    So first of all you have to check if the index exists or not. So for to check this you can use isset(). So just run the below command to check it : isset($cOTLdata['char_data']) So you can try this into your final code. And your error will be removed.

  2. Message: Trying to access array offset on value of type null

    To Fix Message: Trying to access array offset on value of type null Error just check $guest value. To solve this error just try this:
    Just check $guest value by given command: foreach((array)$result as $guests) { if (!is_array($guests)) { continue; }

Solution 1 : Use isset()

This error occurs only when your index 'char_data' does not exist.

So first of all you have to check if the index exists or not. So for to check this you can use isset(). So just run the below command to check it :

isset($cOTLdata['char_data'])

So you can try this into your final code. And your error will be removed.

Solution 2 : check $guest value

To solve this error just try this:

Just check $guest value by given command:

foreach((array)$result as $guests)
{
    if (!is_array($guests)) {
        continue;
    }

Conclusion

So these were all possible solutions to this error. I hope your error has been solved by this article. In the comments, tell us which solution worked? If you liked our article, please share it on your social media and comment on your suggestions. Thank you.

Also Read This Solutions

  • Plugin “react” was conflicted between “package.json » eslint-config-react-app »
  • Solving environment: failed with initial frozen solve. Retrying with flexible solve
  • How to downgrade python version from 3.10 to 3.9
  • “Uncaught SyntaxError: Cannot use import statement outside a module” when importing ECMAScript 6
  • vTools failed to load SourceMap: Could not load content for chrome-extension

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

condor2 opened this issue

Dec 22, 2019

· 9 comments

Comments

@condor2

What version of OpenCart are you reporting this for?
Master Branch

Describe the bug
This warning message is displayed on Error log using Php 7.4

PHP Notice: Trying to access array offset on value of type null in admin/controller/marketplace/extension.php on line 48

Same in vendor/leafo/scssphp/src/Compiler.php on line 5230

Server / Test environment (please complete the following information):

  • PHP 7.4

@elanclarkson

@elanclarkson

Not sure if there are other issues in PHP 7.4 yet but I managed to fix this error (which for me was occurring in storage/vendor/scss.inc.php) by changing this line:

$key = $key[1];

To this:

$key = isset($key[1]) ? $key[1] : null;

rajkarthick, luismaf, dtying, slimzc, andreylarionovdev, ibrahim-brumate, alaksandarjesus, babalakk, sanmugamks, MahmmoudSabri, and 9 more reacted with thumbs up emoji
klebinhopk reacted with hooray emoji
luismaf, prosenjeet123, AWC-Software, annaluk23, jorangedres, and klebinhopk reacted with heart emoji

@condor2



Copy link


Contributor

Author

No missing column_left icons for you? :)
Because somehow in 7.4 space has no effect.

#7778

Screenshot_2020-03-06_14-42-37

@elanclarkson

Yes actually I realised the icons in the admin menu disappeared, and then ran into that problem with spacing which was causing css class names to merge together in some of the twig templates.

Ended up here twigphp/Twig#3248 and then decided attempting to cradle Opencart into PHP 7.4 wasn’t a good idea when they obviously just don’t support it yet (or at least not in the version I’m using — v3.0.2.0).

@condor2



Copy link


Contributor

Author

From system/library/template/Twig/Lexer.php

Change this (line 164)
$text = rtrim($text);

Replace with:
Screenshot_2020-03-09_11-27-49

@wguerram

@condor2 your if and elseif conditions evaluate the same?

@condor2



Copy link


Contributor

Author

@rodrigomanara

I have found the same issue and I just done what @elanclarkson done as well and fixed the issue,
I don’t if this fix was sugest to the verndor as well.
$Key = $Key[1] ?? null;

@condor2



Copy link


Contributor

Author

@condor2 your if and elseif conditions evaluate the same?

I think the best solution is this: (and not from screenshot)

    if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) {
        $text = rtrim($text);
    }

instead of this:

    if (isset($this->positions[2][$this->position][0])) {
        $text = rtrim($text);
    }

Work just fine

Миграция с PHP5 на PHP7 и PHP8: что чаще всего приходится править в исходниках

Если не считать необходимого теперь перехода с MySQL на MySQLi и борьбы с Warning: A non-numeric value encountered, есть ещё несколько типовых проблем при миграции скриптов с PHP 5.X (особенно если исходная версия ниже 5.3) на PHP 7.3 — 7.4, а позднее и на PHP 8. Попробую приспособить для описания решений эту заметку, если ещё всплывёт подобное.

Для проверки фрагментов кода предполагалось, что в его начале указана директива

 error_reporting (E_ALL);
Уведомление Trying to access array offset on value of type null/bool/int

Часто возникает при использовании синтаксиса обращения к элементу массива на других типах данных. Пример:

$a = false;
var_dump($a['somekey']);
// PHP 7.3: 
// NULL
// 
// PHP 7.4:
// Notice: Trying to access array offset on value of type bool in Command line code on line ...

Так бывает, например, если функция может возвращать массив в нормальном случае и false/null в случае ошибки, а дальше вверх по стеку информация о false/null теряется и этот случай не обрабатывается отдельно.

Решение — проверять с помощью is_array, является ли объект массивом.

Применение функции mysql_real_escape_string

…которой традиционно «обезопасивали» хранимые в базе данных строки от SQL-инъекций.

было: mysql_real_escape_string($s)

надо: mysqli_real_escape_string ($id,$s), где $id — идентификатор соединения MySQLi. Или хотя бы addslashes($s) — если нужно только экранировать «опасные» для SQL-запроса кавычки.

Перебор массива с помощью list и each

было: while (list(,$var) = each($params)) {

надо: foreach ($params as $var) {

или же: while (list($num,$var) = each($params)) {

а теперь: foreach ($params as $num=>$var) {

— если массив перебирается как ассоциативный и/или нужны ключи его элементов.

Модификатор /e функции preg_replace

было:

$text = preg_replace('~([0-9]+)^([0-9]+)~e', 'pow("\1", "\2")', $text); //вычислить a^b

надо:

$text = preg_replace_callback('~([0-9]+)^([0-9]+)~',

function ($m) { return pow($m[1], $m[2]); }, $text); //вычислить a^b

— то есть, через callback-функцию.

Проблема с подключаемыми графическими шрифтами GD

было:

$bbox=imagettfbbox ($f,0,'arial.ttf','String');

надо:

$font = dirname(__FILE__) . '/arial.ttf';

$bbox=imagettfbbox ($f,0,$font,'String');

— если фонт лежит в папке скрипта, как обычно и бывает.

То же самое с imageTtfText, например:

$font = dirname(__FILE__) . '/Roboto-Bold.ttf';
imageTtfText($myimg, $size, $angle, $j, 30, $c, $font, $z);
error_reporting(0) и подобное

Многие разработчики привыкли решать проблему с предупреждениями и даже сообщениями об ошибках просто выключая сообщения о них. При миграции скриптов это приводит к «загадочным белым экранам» вместо содержимого. Лучше всего вообще не трогать включённое в новых версиях протоколирование ошибок по умолчанию, а все вызовы функции error_reporting приводить к виду, указанному в начале статьи.

Строковые функции

Начиная с версии PHP 5.6 кодировкой по умолчанию стала кодировка Юникода UTF-8, соответственно, вместо прежних «си-подобных» строковых функций теперь лучше использовать их многобайтовые аналоги.

Наиболее часто приходится менять:

  • вместо strlen($s) писать mb_strlen($s,'UTF-8');
  • вместо strpos ($haystack,$needle,0) писать mb_strpos ($haystack,$needle,0,'UTF-8');
  • вместо strstr ($haystack,$needle,false) писать mb_strstr ($haystack,$needle,false,'UTF-8');
  • вместо substr ($string,$start,$length) писать mb_substr ($string,$start,$length,'UTF-8')

…и т.д., принцип, думаю, понятен. Будьте внимательны, проверяя, есть ли для функции многобайтовый аналог.

Для «бинарно безопасных» функций strcmp / strcasecmp, к примеру, таковых нет, а сравнение всё равно не работает:

<?php
 $s1="Привет";
 $s2="привет";
 echo strcasecmp($s1,$s2); //-32
?>

и нужно делать так:

<?php
 function mb_strcasecmp($str1, $str2, $encoding = null) {
  if (null === $encoding) { $encoding = mb_internal_encoding(); }
  return strcmp(mb_strtoupper($str1, $encoding), mb_strtoupper($str2, $encoding));
 }

 $s1="Привет";
 $s2="привет";
 echo mb_strcasecmp($s1,$s2,'UTF-8'); //0
?>

С другой стороны, как видно из примера, для strtoupper и strtolower эти аналоги есть.

Применение array_key_exists к объекту, а не к массиву

Теперь нельзя применять array_key_exists к объектам классов (а можно только к массивам). Неправильно:

 class foo {
  public $a, $b;
 };
 $bar = new foo();
 echo (array_key_exists('a',$bar) ? 'yes' : 'no'); //deprecated

Правильно:

  echo (property_exists($bar,'a') ? 'yes' : 'no'); //yes

Итак, 8-я версия, вышедшая в ноябре-2020, теперь есть и в составе XAMPP, ниже, вероятнее всего, будут добавляться исправления для PHP8, хотя и для версии 7 всё написанное выше остаётся в силе.

Отмечу, что в сборке PHP 8.0.0 с сайта XAMPP в файле php.ini ( диск:xamppphpphp.ini ) была по умолчанию отключена библиотека gd:

;extension=gd

Соответственно, все функции imagecreatetruecolor,
imagecreatefromgif,
imagecreatefromjpeg,
imagecreatefrompng и т.д. «вдруг перестали работать».

Решение — убрать точку с запятой из первой позиции указанной выше строки,
сохранить изменённый php.ini, перезагрузиться.

Функция get_magic_quotes_gpc удалена (PHP8)

Любые упоминания о функции get_magic_quotes_gpc теперь придётся исключить из кода, она просто удалена. При этом нужно учесть, что начиная с версии 5.4 она всё равно всегда возвращала 0.

Почему нельзя было оставить в реализации пустое имя функции, а надо заставлять людей переделывать кучу кода — совершенно неясно.

И так у них всё :(

Функция each удалена (PHP8)

Удалена в PHP8 и функция each. В общем случае можно попытаться заменить на next
или array_shift, но однозначного рецепта нет из-за возможности использования функции не только в цикле, как показано выше, но и, например, в рекурсивных построениях.

Фигурные скобки и литералы без кавычек для индексов массива (PHP8)

В PHP8 больше нельзя писать $a{$i} вместо $a[$i] или $foo[bar] вместо $foo['bar']. Просто исправьте это.

Разумеется, если ключ является числовой константой или берётся из переменной, заключать его в апострофы не нужно, $i = 1; $a[$i] или $a[1] — это верный синтаксис.

13.02.2020, 17:35 [15114 просмотров]


К этой статье пока нет комментариев, Ваш будет первым

Понравилась статья? Поделить с друзьями:
  • Ошибка при создании документа xml
  • Ошибка при создании вопроса попробуйте позже wildberries
  • Ошибка при создании вопроса валберис попробуйте позже что это
  • Ошибка при создании вопроса валберис попробуйте позже что делать
  • Ошибка при создании виртуальной сети internal error failed to initialize a valid firewall backend