Базовая навигация с PHP не работает

0

У меня есть следующая страница PHP:

index.php

   if( isset($_POST['location']) ) {
            $location = $_POST['location'];

   } else {
        $location = 'home';
    }

require 'header.php';

switch ($location) {
    case "home": require 'home.php'; break;
    case "about": require 'about.php'; break;
    case "products": require 'products.php'; break;
    case "budget": require 'budget.php'; break;
    case "contact": require 'contact.php'; break;
    case "help": require 'help.php'; break;
    default: require 'home.php';
}

require 'footer.php';

?>

Внутри HEADER у меня есть:

header.php

<body class="<?php echo $location; ?>">

<div id="navmenu">
    <ul id="menu">
        <li><a id="page_item_1" href="?location=home">Home</a></li>
        <li><a id="page_item_2" href="?location=about">About</a></li>
        <li><a id="page_item_3" href="?location=products">Products</a></li>
        <li><a id="page_item_4" href="?location=budget">Budget</a></li>
        <li><a id="page_item_5" href="?location=contacto">Contact</a></li>
        <li><a id="page_item_6" href="?location=help">Help</a></li>
    </ul>
</div>

Но ничего не работает... Значение POST изменяется, но класс тела не изменяется. И требуется либо содержание тела (не загружается домой/о/и т.д.).

Что я делаю не так? Благодарю.

  • 1
    К вашему сведению, <body class="<?php echo $location ?>"> открыт для XSS
  • 0
    вы пропустили точку с запятой в классе тела
Показать ещё 3 комментария
Теги:
post
classname

3 ответа

1
Лучший ответ

Вы передаете материал через GET, а не POST.

if( isset($_GET['location']) ) {
    $location = $_GET['location'];
} else {
    $location = 'home';
}

Для справок в будущем вы можете распечатать переменные GET и POST чтобы увидеть, что содержит:

print_r($_GET);

И хотя по этому вопросу $_REQUEST содержит их оба:

print_r($_REQUEST);

Чтобы отправить данные POST, вы должны отправить их с формой - здесь неактуальны. То, что вы видите в строках запросов URL, - это данные GET, а не POST.

0

Измените свой пост, чтобы получить.. т.е.

if( isset($_GET['location']) ) {
    $location = $_GET['location'];
} else {
   $location = 'home'; 
}
-1

Вы используете GET not POST +, почему не используете $ location + "php"? :

if( isset($_GET['location']) ) {
            $location = $_GET['location'];

} else {
        $location = 'home';
    }
require 'header.php';
require $location . '.php';
require 'footer.php';
  • 0
    НО проблема в том, что браузер попытается открыть все, что пользователь вводит вручную на навигационной панели ... так что, если он ошибется, он получит крушение страницы с 2 большими черными ошибками и больше ничего не загружается ... Любой способ избежать этого?
  • 0
    Хорошо, я понял это, я использовал file_exists (); проверить, существует ли файл перед загрузкой требуемого. Большое спасибо.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню