PHP автоматически & # 8220; GET & # 8221; переменные
-
06-07-2019 - |
Вопрос
Я создаю новый веб-сайт для своей компании и пытаюсь внедрить навигацию по коммутаторам, которую я использовал на всех своих сайтах в прошлом.
<?php
switch($x) {
default:
include("inc/main.php");
break;
case "products":
include("inc/products.php");
break;
}
?>
По какой-то причине, когда я захожу в index.php? x = products ничего не происходит, он по-прежнему отображает inc / main.php, другими словами, он не обнаружил переменную X из URL. Это как-то связано с глобальными переменными?
Решение
Да, в вашей конфигурации PHP правильно отключено register_globals
, потому что это невероятно небезопасно.
Просто положите:
$x = Да, в вашей конфигурации PHP правильно отключено register_globals
, потому что это невероятно небезопасно.
Просто положите:
<*>
вверху вашего скрипта.
Вы также можете использовать $ _ GET
, если хотите, чтобы это работало только для HTTP-метода GET
. Я видел, как некоторые люди утверждают, что $ _ REQUEST
как-то небезопасно, но нет никаких доказательств, подтверждающих это.
REQUEST['x']
вверху вашего скрипта.
Вы также можете использовать $ _ GET
, если хотите, чтобы это работало только для HTTP-метода GET
. Я видел, как некоторые люди утверждают, что $ _ REQUEST
как-то небезопасно, но нет никаких доказательств, подтверждающих это.
Другие советы
Похоже, что все ваши предыдущие веб-хосты использовали register_globals , и ваш код полагается на это. Это опасный параметр, который был по праву удален в PHP 6.0! Вместо этого используйте переключатель ($ _ GET ['x']) {
.
Вы должны использовать $ _GET для считывания этих переменных. Существует устаревшая функция, которая называется register_globals , но я определенно не советую использовать ее, поскольку это потенциальный риск безопасности.
Вы можете использовать http://php.net/manual/es/function.extract .php для извлечения переменных, если вы хотите это сделать, но имейте в виду, что это позволяет любому пользователю устанавливать переменные с содержимым, которое они хотят, в вашем скрипте, что делает его таким же небезопасным, как использование register_globals