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

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

Пример:

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

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

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

Скорее всего, это не ошибка, а предупреждение. Вы можете установить 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> 

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

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

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

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

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

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

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

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

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

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

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

 /sbin/service httpd restart 

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

Поэтому лучше проверить переменную не empty .

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

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

 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