CSS-чейнджер с использованием PHP не работает

0

Эй. Я новичок на 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), это было бы очень оценено. Заранее спасибо!

  • 0
    Это должно быть в печенье? Это можно сделать гораздо проще.
  • 0
    Да, не могли бы вы использовать переменные сеанса?
Теги:

2 ответа

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

Если вам не нужно использовать файлы cookie, вы можете сделать это довольно легко несколькими способами:

1. Используйте переменные сеанса

Отправьте свое сообщение формы на страницу с кодом:

<?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" />

2. Используйте переменные $ _GET

Ваш скрипт формы:

<?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.

  • 0
    Хм, похоже, это близко (вариант 2), спасибо! Единственная проблема, которую я, похоже, обнаружил, заключается в том, что при переключении на другой CSS (маленький) он вообще не загружает CSS: /
  • 0
    Проверьте мое редактирование сценария. Тернарные операторы привередливы; Я бы избежал их, если это вообще возможно.
Показать ещё 7 комментариев
0

Это может быть скрипт, который загружает форма.

<?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, поэтому просто скажите мне, допустил ли я какие-либо ошибки в своем ответе.

Ещё вопросы

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