Эй. Я новичок на PHP, но я хотел сделать чейнджер CSS для своего сайта (tbex.info). Я нашел красивый сценарий на about.com, который в основном говорит, что я должен поместить это в заголовки:
<link rel="stylesheet" type="text/css" href="<?php echo (!$style)?'main':$style ?>.css" />
А затем форму на странице, которая выглядит так:
<form action="changestyle.php" method="post">
<select name="choice">
<option value="main" selected>Classic View</option>
<option value="small">Smaller (for smaller resolutions)</option>
</select>
<input type="submit" value="Go">
</form>
И тогда форма загружает этот скрипт:
<?php
$Year =31536000 + time();
setcookie('style', $_GET['choice'], $year);
header('Location: ' . $_SERVER['HTTP_REFERER']);
?>
В настоящее время я работаю в Dreamweaver. Когда я набрал все это, стиль в Dreamweaver исчез (как и ожидалось, с его PHP), то я загрузил его на свой сервер для бета-тестов. Предполагается, что код загружает CSS по умолчанию, а затем, когда пользователь меняет его с помощью формы, PHP-скрипт должен писать cookie, а затем перезагружать страницу. Затем код в тегах заголовка будет читать cookie и соответствующим образом изменить CSS. До сих пор все SEEMS работали, кроме написания файлов cookie. Я зашел в настройки браузера (Google Chrome) и просмотрел все файлы cookie. На моем веб-сайте не было ни одного. Я проверил различные форумы и не нашел реальной помощи. Если кто-нибудь может помочь мне исправить это или даже помочь мне написать код смены CSS (я ищу что-то вроде того, что на 4Chan.org), это было бы очень оценено. Заранее спасибо!
Если вам не нужно использовать файлы cookie, вы можете сделать это довольно легко несколькими способами:
Отправьте свое сообщение формы на страницу с кодом:
<?php
session_start();
$_SESSION["css"] = $_POST["choice"];
?>
А затем, чтобы получить его в заголовке:
<link rel="stylesheet" type="text/css" href="<?php
session_start();
if(isset($_SESSION["css"]))
$style = $_SESSION["css"];
else
$style = "main";
echo $style; ?>.css" />
Ваш скрипт формы:
<?php
header("Location:".$_SERVER["HTTP_REFERER"]."?css=".$_POST["choice"]);
?>
И затем, чтобы получить к нему доступ:
<link rel="stylesheet" type="text/css" href="<?php
$style = $_GET["css"];
echo (!$style)?'main':$style ?>.css" />
Вариант №1 сохраняет строку, выбранную в форме, в так называемом "сеансе". Это краткосрочная переменная, поддерживаемая вашим сервером в течение периода активности пользователя. Большинство серверов имеют сеансы, срок действия которых истекает через ~ 20 минут бездействия, но это может быть изменено на любое число.
Следует отметить, что сеансы являются врожденными файлами cookie, но PHP управляет им для вас, и все, что вам нужно сделать для доступа или изменения переменной в сеансе, - $_SESSION["var_name"]
. Самое замечательное в сеансах заключается в том, что они распространяются на любую страницу PHP на вашем веб-сайте, которая реализует session_start();
, Не очень большой (в вашем случае) аспект заключается в том, что они являются временными и не будут оставаться на пользовательском устройстве после периода бездействия.
При использовании переменных $ _GET, как и в опции №2, вы отправляете каждую страницу отдельно переменной. Это то, что вы видите, когда вы получаете такой URL:
http://www.example.com/index.php?someVar=blah
Это дает вашей странице index.php
переменную $ _GET с именем "someVar" со значением "blah". Чтобы получить это, вы просто используете $_GET["someVar"]
. Самое замечательное в том, что его можно отправлять и извлекать относительно легко, посредством прямых URL-адресов или вызовов AJAX, но плохо то, что он должен указываться на каждом URL-адресе. Это не автоматически разделяется между всеми страницами PHP. Во многих случаях это хорошо, например, если вы хотите указать разные CSS на каждой странице или идентификационный номер, характерный для каждой страницы, но в вашем случае это не самый простой вариант для реализации.
Я бы использовал переменные сеанса. Они легко доступны, изменяются и распределяются между всеми страницами.
Печенье - это животное, с которым нужно иметь дело. Если бы я был вами, я бы придерживался чего-то более простого. Если вам нужно сохранить выбор в долгосрочной перспективе, например между сеансами, я бы использовал базу данных SQL для хранения данных, а не cookie.
Это может быть скрипт, который загружает форма.
<?php
session_start();
$_SESSION['choice'] = $_GET['choice'];
header('Location: ' . $_SERVER['HTTP_REFERER']);
?>
И это может быть ваша связь.
<?php session_start(); ?>
<link rel="stylesheet" type="text/css" href="<?php echo (!isset($_SESSION['choice']))?'main':$_SESSION['choice'] ?>.css" />
Я также являюсь новичком в php, поэтому просто скажите мне, допустил ли я какие-либо ошибки в своем ответе.