PHP / HTML – функция isset

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

У меня есть переменная, $ id , которая идентифицирует тип категории продукта для отображения на странице. Сначала мне нужно проверить, что переменная id установлена, а если нет, по умолчанию переменная в категорию 0.

Код, который у меня есть, следующий:

setdefault($id, 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } } 

Таким образом, с адресом www.website.com/browse.php, я ожидал бы его по умолчанию $ id = 0; с адресом www.website.com/browse.php?id=3, я ожидаю, что он установит $ id в 3 и отобразит соответствующие продукты. Однако, несмотря на установку $ id, он по умолчанию равен 0. Есть ли что-то явно неправильное с моим кодом?

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

Вы можете попробовать следующее:

 setdefault($_GET['id'], 0); function setdefault(&$var, $default="") { if (!isset($var)) { $var = $default; } } 

или даже проще (с использованием тернарного оператора):

 $id = array_key_exists('id', $_GET) ? $_GET['id'] : 0; 

Во-первых, если это PHP 5.XI, настоятельно рекомендуем не передавать переменные по ссылке с помощью &. Что, как говорится. вызов функции isset всегда будет true с функцией. Но вы получите предупреждение неопределенной переменной на setdefault ($ id, 0);

Попробуйте это вместо этого.

 $id = isset($id) ? $id : 0; 

Если $ id не установлен, вызов setdefault ($ id, 0) генерирует предупреждение. Функция, такая как setdefault, не работает в PHP. Используйте это вместо этого.

 if (!isset($id)) $id = 0; 

Если вы делаете это для переменных массива, например $ _GET и $ _POST, вы можете сделать это:

 function getuservar($A, $index, $default = '') { if (!isset($A[$index])) return $default; if (get_magic_quote_gpc()) return stripslashes($A[$index]); return $A[$index]; } $clean_id = getuservar($_GET, 'id', 0); 

Эта форма возврата лучше, потому что вы немедленно прекратите использование массива $ _GET и используете только переменные, которые очищаются в остальной части кода. Вы очищаете свои внешние переменные один раз и никогда не касаетесь внешних переменных в своем коде. $ A может быть $ _GET, $ _POST, $ _REQUEST или $ _COOKIE.

Он также обрабатывает раздражающий материал magic_quote для вас, поэтому вы знаете, что данные в переменной – это текст, посланный пользователем. Просто не забудьте очистить его снова, отправив его пользователю или в базу данных.

Как установить $id ? Если register_globals выключен (и он отключен по умолчанию в PHP 4.2 и новее), вам нужно вместо $_GET['id'] или $_POST['id'] (или $_REQUEST['id'] , но там являются причинами, чтобы избежать этого).

Необходимо также включить код для установки $id из строки запроса ( browse.php?id=3 ). Возможно, вы думаете о настройках register_globals , которые PHP создает, автоматически создавая переменные, если они включены в строку запроса. НЕ повторно активируйте эту функцию, вот уже несколько лет, как было показано, это действительно плохая идея.

Любая переменная, которую вы вытаскиваете из строки запроса, должна быть проверена для типа / безопасности перед ее использованием. Так, например, вы можете вытащить переменную из $_GET , проверьте, является ли она числовой, если она не задана по умолчанию:

 if (!is_numeric($_GET['id']) { setdefault($_GET['id'], 0); }