Избегать использования isset в PHP при доступе к $ _POST, $ _GET и другим переменным? - PullRequest
3 голосов
/ 10 октября 2010

как я могу предотвратить возвращение PHP ошибки Undefined variable каждый раз, когда я пытаюсь проверить переменную, если она имеет содержимое и эта определенная переменная еще не использовалась?В моей предыдущей настройке я могу проверить $ _POST ['email'], даже если я еще ничего не вложил в него.Он просто возвращает пустой или пустой результат.Вот как я хочу, чтобы мои настройки PHP работали, но, судя по всему, я не могу понять, как их настроить.: (

Пример:

<?php
if ($_POST['info'] != '') {
  // do some stuff
}
?>
<form method="post">
<input type="text" name="info" />
<input type="submit" />
</form>

Когда вы используете вышеупомянутый скрипт на одной странице PHP и запускаете его на моей текущей установке, он возвращает ошибку Undefined variable На моей предыдущей установке этот скрипт работал как шарм. Может кто-нибудь поделиться с вами некоторыми проблемами в моей проблеме. Если вам нужны дополнительные детали, просто скажите об этом, и я постараюсь добавить больше подробностей в этот пост.

Я знаю о проверке isset () , но я не хочу использовать его во всех моих сценариях. Я хочу, чтобы не было таковым ограничительный о переменных.

Ответы [ 6 ]

4 голосов
/ 10 октября 2010

Вы можете использовать функцию empty, которая возвращает true, если переменная либо не установлена, либо пуста (то есть строка нулевой длины, 0, NULL, FALSE и т. Д.):

if(!empty($_POST['variable'])){
    /* ... */
}

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

3 голосов
/ 10 октября 2010

Скорее всего, это не ошибка, а предупреждение. Вы можете установить PHP, чтобы не отображать ошибки / предупреждения, если хотите. Просто добавьте это в начало вашего кода:

ini_set('display_errors', 0);

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

И предпочтительный способ сделать то, что вы хотите сделать, это

<?php
if (isset($_POST['info'])) {
  // do some stuff
}
?>
<form method="post">
<input type="text" name="info" />
<input type="submit" />
</form>
0 голосов
/ 28 октября 2017

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

if (isset($_POST['info']))
  $info = $_POST['info'];
... etc....

Как насчет этого?

function setPostVar( &$v ) {
    $trace = debug_backtrace();
    $vLine = file( __FILE__ );
    $fLine = $vLine[ $trace[0]['line'] - 1 ];
    preg_match( "#\\$(\w+)#", $fLine, $match ); 
    eval("\$v = isset(\$_POST[\"$match[1]\"])?\$_POST[\"$match[1]\"]:'';");
}

Теперь, пока вы счастливы, называя переменные, похожие на ваши POST-переменные

ie. $Foo = $_POST['Foo'];

Вы можете просто сделать это:

setPostVar($Foo); // equivalent to if(isset($_POST['Foo']) $Foo = $_POST['Foo'];
setPostVar($Bar); // ditto
setPostVar($Baz); // ditto
0 голосов
/ 15 января 2014

Переменная будет всегда установлена, пока вы отправите form.

Так что лучше проверять переменную не empty.

if(!empty($_POST['var']))

0 голосов
/ 02 июня 2013

Вы используете свой собственный сервер? Если это так, вы можете изменить error_reporting через PHP.INI. Выше линии

"error_reporting = E_ALL;" (может не быть E_ALL) Будет небольшая документация, объясняющая, какой тип ошибок вы можете показать.

Если вы используете общий сервер от компании веб-хостинга, я думаю, что некоторые могут предложить быстрое управление PHP под вашей учетной записью веб-хостинга.

Надеюсь, я помог; /

ps- Если у вас есть собственный сервер, вам придется перезапустить Apache. Я не уверен, как это делается в Ubunto (если это то, что вы используете), но для CentOS это:

/sbin/service httpd restart
0 голосов
/ 04 апреля 2013

Иногда я делал следующее, чтобы сделать сравнение и избежать предупреждения о неустановленной переменной:

if( @$_POST['variable'] == 'value' )
{
     ...
}

Хотя PHP все равно будет вызывать пользовательские обработчики ошибок, поэтому, возможно, мне нужно пересмотреть эту стратегию.

...