У меня есть раскрывающийся список, где пользователи могут выбрать тему для сайта. Единственная проблема заключается в том, что я не совсем уверен, как правильно загружать тему, когда они нажимают «Применить». Я новичок в PHP. Я знаю, что если я использую GET, он передаст переменные через текущую страницу и добавит их в конец URL-адреса. Я бы очень хотел этого избежать. Итак, я думаю, мой вопрос: как я могу избежать использования GET для обновления темы? Спасибо.
Вот мой код для загрузки правильной темы:
<?php $stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red'); if(isset($_GET['theme']) && in_array($_GET['theme'], $stylesArr)) { $style = $_GET['theme']; setcookie("theme", $style, time()+(60*60*24*30)); } else { if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) { $style = 'CSS/' . $_COOKIE['theme'] . '.css'; } else { $style = 'CSS/Default.css'; } } ?>
Вот мой раскрывающийся список, чтобы выбрать тему:
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post"> <p>Site Theme: <select name="theme"> <option value="Default">Default</option> <option value="Black">Black</option> <option value="Pink">Pink</option> <option value="Green">Green</option> <option value="Red">Red</option> </select> <input type="submit" value="Apply" /> </form>
Обменять $ _GET за $ _POST. И если бы это был я, я бы либо опубликовал отдельный файл, например theme_manager.php, затем сохранил его в сеансе или в cookie, а затем перезагрузил другую страницу
header("Location: xxxxx.php"); exit(); # exit is important as page needs to exit and reload for cookie to work.
Надеюсь, это поможет!
вот что вам нужно:
choose_style.php
<? $stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red'); if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) { $style = 'CSS/' . $_COOKIE['theme'] . '.css'; } else { $style = 'CSS/Default.css'; } ?> <link rel="stylesheet" href="<? echo $style; ?>"> ## drop down code with form posting to theme_switch.php
<? $stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red'); if(isset($_POST['theme']) && in_array($_POST['theme'], $stylesArr)) { $style = $_POST['theme']; setcookie("theme", $style, time()+(60*60*24*30)); } header("Location: choose_style.php"); # this will reload your theme selector exit(); # this will make sure the cookie gets loaded next time. ?>
Вы используете POST как метод для своей формы, а не GET, поэтому ничего не будет добавлено к URL-адресу, просто измените все $ _GET на $ _POST в вашем php-коде.
Ну, метод = «пост» – это правильный шаг, я думаю.
Однако код PHP, который у вас есть, заставляет мои будильники отключиться. Вы не должны доверять пользовательскому вводу от $ _GET, $ _POST, $ _COOKIE и т. Д.! Никогда!
Поэтому я бы предложил следующее:
Без этих мер безопасности ваш сайт будет открыт для атак XSS: http://en.wikipedia.org/wiki/Cross-site_scripting
сделайте POST
на страницу (скажем, themewitcher.php).
Там вы читаете тему, которую пользователь выбрал с помощью $_POST["theme"]
но тема в сеансе (или, возможно, даже в базе данных)
а затем направьте пользователя обратно туда, откуда он пришел, используя
header("Location: xxxxx.php"); exit();