PHP: Это плохая практика — использовать неустановленную переменную?

Например, если я хочу использовать код:

$foo = $_POST['foo']. $_GET['foo'];

чтобы получить значение, переданное POST или GET, это приемлемо или плохая практика?


person Bob    schedule 02.01.2014    source источник
comment
очевидно.. Вместо этого используйте $_REQUEST, будет работать для обоих..!!   -  person Harshal Mahajan    schedule 02.01.2014
comment
... в отличие от чего?   -  person deceze♦    schedule 02.01.2014
comment
Лучше заранее знать, является ли запрос POST или GET.   -  person Mark Baker    schedule 02.01.2014


Ответы (6)


Не видите в своем ответе ничего, что должно быть сброшено, хотя вы можете использовать $_REQUEST['foo'], так как это будет учитывать $_POST, а также $_GET, но опять же, ваш код будет грязным, скажем, например, я изменил значение method для формы входа , пользователи могут легко атаковать ваш сайт...

Так что будьте мудры, используйте $_GET[] и $_POST[] вместо свободного $_REQUEST[]

Если для каких-либо средств вы используете $_REQUEST, спасибо, убедитесь, что вы используете условия, чтобы проверить, является ли запрос GET или POST с использованием $_SERVER['REQUEST_METHOD']

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
   //Do something
}
person Mr. Alien    schedule 02.01.2014
comment
Отличное решение, но оно не будет работать должным образом при POST data в http://xxx/index.php?data=x - person Daniel W.; 02.01.2014
comment
Спасибо за все отклики. Я не знал о $_REQUEST. - person Bob; 02.01.2014
comment
@Mr.Alien Кто из них будет принят? $_POST['data'] или $_GET['data'] будет в $_REQUEST['data']? - person Daniel W.; 02.01.2014
comment
@Mr.Alien Нет. Когда у вас есть GET и POST с одной и той же переменной, REQUEST заполняется данными POST! - person Daniel W.; 02.01.2014

Я бы пошел с:

$foo = isset($_REQUEST['foo']) ? $_REQUEST['foo'] : null;

Подробнее: http://php.net/manual/pt_BR/reserved.variables.request.php

person thicolares    schedule 02.01.2014

чтобы получить значение, передается ли через POS или GET, используйте это

$foo = $_REQUEST['foo'];
person Abdelhadi Tawil    schedule 02.01.2014

Если вы настроите свой сервер разработки PHP для выдачи всех предупреждений, вы узнаете.

person Alexander    schedule 02.01.2014

почему вы используете . оператор, если я не ошибаюсь, это объединит результат, так как предложенное выше использование $_REQUEST было бы лучшим подходом.

person Nabeel Bape    schedule 02.01.2014
comment
Подразумевалось использование конкатенации одной существующей переменной и одной несуществующей переменной для получения только существующей переменной - person Bob; 02.01.2014

Да, это ужасно. Есть две проблемы:

  1. Это вызовет предупреждение
  2. Конкатенация не подходит для этого варианта использования

Если вы хотите получить ключ либо от $_POST, либо от $_GET, и вам все равно, в каком из них присутствует ключ, вы можете использовать суперглобальную переменную $_REQUEST со следующей идиомой:

$var = isset($_REQUEST['foo']) ? $_REQUEST['foo'] : null;

$_REQUEST — это союз $_GET и $_POST.

person K. Norbert    schedule 02.01.2014