оператор if — Php if ($ var) работал

У меня есть сом-код для веб-сайта, который раньше работал нормально. Я хочу проверить, установлена ​​ли переменная или сессия. Я использовал следующий код:

if ($_GET['something']){ //Do something }

Теперь я пытаюсь установить его на локальном сервере, при этом я получаю код ошибки, говорящий о наличии неопределенного индекса.

Это требует от меня сделать:

if (isset($_GET['']) { //Do something }

Могу ли я сделать быстрое решение для этого, так как я не хочу менять код так много мест?

-6

Решение

Вы не получили ошибку раньше, потому что ваши настройки error_reporting и / или display_error были слишком простыми. Ваш первый фрагмент является попытка получить доступ к значению в массиве, который может не существовать. Если это не PHP всегда выдает уведомление.
Это только после было выпущено уведомление о том, что его можно замять (отключив display_errors или настройка error_reporting не сообщать об уведомлениях (~E_NOTICE).

Вы просите быстрого исправления:

if (isset($_GET['something']))

требуется только добавить isset(), Это быстро, и это решает проблему. Кроме того: использование isset это то, что ты должен делать. Всегда.


Не по теме, но, возможно, полезно:
Как я объяснил в комментариях: лучший способ действий для вас сейчас — это решить проблему самостоятельно, а не игнорировать уведомления. С этой целью простой скрипт, который сканирует каталоги ваших проектов для файлов .php (используя glob), читает их и ищет шаблон, который может оказаться полезным:

foreach ($phpFiles as $file)
{
$code = file_get_contents($file);//read the file
if (preg_match_all('/if\s*\(\$[^[]+\[[^]]+\]\s*\)/',$code, $matches))
{//find all usages of "if ($rawVar['offset'])" in code
echo 'Expressions to check or fix in file: ', $file,':', PHP_EOL, '=>';
echo implode(PHP_EOL.'=>', $matches[0]), PHP_EOL;
}
}

запустите скрипт, возможно, запишите результат во временный файл и установите для работы. Вывод должен выглядеть примерно так:

Expressions to check or fix in file: scriptname.php:
=> if ($_GET['something'])
=> if ($var[123])

И так далее. Это работоспособный формат, и со временем вы можете написать скрипт для автоматического рефакторинга кода.
Возможно, более полное (как в полном) регулярное выражение для использования здесь будет что-то вроде:

/if\s*\((\|\||&&|\()?\$[^[]+\[[^]]+\]\s*(\|\||&&|\))?/

Но здесь тоже есть некоторые оговорки, но это только начало.


Добавление назначений — я сделаю вам еще одну услугу: добавление кода, который устраняет проблемы, возникающие в выражениях назначений, таких как $var = $_GET['something'];, Это можно сделать автоматически, и довольно просто:

foreach ($phpFiles as $file)
{
$code = file_get_contents($file);//read the file
$clean = preg_replace(
'/(\$[^\s]+\s*={1}\s*)(\$[^[]+[^]]+\])\s*;/',
'$1isset($2) ? $2 : null;',
$code
);
file_put_contents($file, $clean);
}

Я проверил этот код так:

$code = '$foo = 123;
$foo = $_GET["bar"];';
$clean = preg_replace(
'/(\$[^\s]+\s*={1}\s*)(\$[^[]+[^]]+\])\s*;/',
'$1isset($2) ? $2 : null;',
$code
);
echo $clean, PHP_EOL;

И это дало ожидаемый результат:

$foo = 123;
$foo = isset($_GET["bar"]) ? $_GET["bar"] : null;

Объедините эти два регулярных выражения, и вы должны быть на пути к рефакторингу кода, который у вас есть …

3

Другие решения

Проверьте, есть ли у вас параметр

что-то

если это не так, передайте некоторые фиктивные значения для проверки.

1

Есть два способа исправить или скрыть это.

Первый вариант лучше и может быть сделан с isset() функция, и это лучшее решение.

Другой способ — скрыть ошибки уведомления, с которыми вы можете сделать это. error_reporting(E_ALL & ~E_NOTICE); Я не рекомендую это решение

1

Будет работать без уведомления, если у вас есть значение $_GET['something'] при проверке или это уже определено. Также у вас есть сообщение об ошибке на на вашем локальном сервере, а не на втором сервере, поэтому вы будете получать уведомления на локальном сервере.

if ($_GET['something']){

если не определено, вам нужно использовать isset() или же empty() чтобы избежать php уведомлений.

if (isset($_GET['something'])){ // will check variable is already set
if (!empty($_GET['something'])){ // will check variable value is not blank or 0

или вам нужно инициализировать переменную с пустым или с некоторыми предопределенными значениями.

0

использовать это может быть полезно, если (isset (@ $ _ GET [»])) {}

0
По вопросам рекламы [email protected]