Вопрос

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

У меня есть переменная, $идентификатор, который определяет тип категории продукта, отображаемый на странице.Сначала мне нужно проверить, установлена ​​ли переменная 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.X, я настоятельно рекомендую не передавать переменные по ссылке с помощью оператора &.Что, как говорится.вызов функции isset всегда будет истинным внутри этой функции.Но вы получите предупреждение о неопределенной переменной в 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top