PHP / HTML - функция isset - PullRequest
       7

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

1 голос
/ 02 марта 2009

Я довольно новичок в 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. Что-то явно не так с моим кодом?

Ответы [ 5 ]

4 голосов
/ 02 марта 2009

Возможно, вы ожидаете, что 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;
1 голос
/ 02 марта 2009

Если $ 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 для вас, так что вы знаете, что данные в переменной - это текст, отправленный пользователем. Просто не забудьте очистить его снова при отправке обратно пользователю или в базу данных.

1 голос
/ 02 марта 2009

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

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

$id = isset($id) ? $id : 0;
0 голосов
/ 02 марта 2009

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

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

if (!is_numeric($_GET['id']) {
  setdefault($_GET['id'], 0);
}
0 голосов
/ 02 марта 2009

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

...