Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 6

Переключение между таблицами стилей на сайте через PHP

11.02.2016, 10:23. Показов 3509. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Хотелось бы узнать, можно ли как-то переключаться между CSS на странице сайта? Я в php новичок, потому не ругайтесь, если задал тупой вопрос, если что. Хочу добавить на сайт кнопку, что бы менялась подключаемая таблица стилей и название ссылки, с помощью которой переключаю их. Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2016, 10:23
Ответы с готовыми решениями:

Переключение между страницами php
Всем привет, подскажите как правильно сделать переключение между страницами. Мне нужно чтобы при нажатии на кнопку перекидывало на другую...

Изменение стилей через php
Добрый день. У меня есть отдельный файл css, в котором описан некий класс, у которого есть поле content, которое по умолчанию не...

Подключение стилей через php
Доброго времени суток! В .htaccess файле прописал следующее RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond...

15
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
11.02.2016, 10:30
Можно, но это немного сложный механизм для новичка, главное продумать алгоритм подключения стиля, и хранения его текущего значения (отличающий от варианта по умолчанию)
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
11.02.2016, 10:55
Лучший ответ Сообщение было отмечено sparrow6616 как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?
    $style_num = isset($_COOKIE['style']) ? $_COOKIE['style'] : 1;
    
    if(isset($_POST['change_style']))
    {
        if(isset($_POST['style1']))
            $style_num = 1;
        if(isset($_POST['style2']))
            $style_num = 2;
        if(isset($_POST['style3']))
            $style_num = 3;
 
        setcookie('style', $style_num, time()+60*60*24*30, '/');
    }
?>
 
<head>
<link rel="stylesheet" href="/<?=$style_num?>.css">
 
<head>
<body>
    <form method="post">
        <input type="hidden" name="change_style" />
        <input type="submit" name="style1" value="Стиль1" />
        <input type="submit" name="style2" value="Стиль2" />
        <input type="submit" name="style3" value="Стиль3" />
    </form>
</body>
Наслаждайтесь.
3
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
11.02.2016, 10:58
Цитата Сообщение от Jodah Посмотреть сообщение
Наслаждайтесь.
Это даже проще чем я думал (про алгоритм реализации), возьму себе на заметку, просто и со вкусом
0
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 6
11.02.2016, 11:14  [ТС]
Браузер выдаёт вот это:
Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\test.ru\index.php: 2) in C:\OpenServer\domains\test.ru\index.php on line 14
Может я что-то не так сделал? У меня таблицы со стилями называются style.css и style2.css. Если я правильно понял, мне надо их имена вводить в if(isset($_POST['style1'])) вместо того, что написано в апострофах?
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
11.02.2016, 11:20
Цитата Сообщение от sparrow6616 Посмотреть сообщение
Может я что-то не так сделал? У меня таблицы со стилями называются style.css и style2.css. Если я правильно понял, мне надо их имена вводить в if(isset($_POST['style1'])) вместо того, что написано в апострофах?
Судя по коду выше файлы стилей должны быть следующие:
style1.css style2.css style3.css
Логику кода менять не нужно, без особой необходимости.

Добавлено через 1 минуту
Цитата Сообщение от sparrow6616 Посмотреть сообщение
Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\test.ru\index.php: 2) in C:\OpenServer\domains\test.ru\index.php on line 14
Код строк под номером 2 и 14 в студию

Добавлено через 48 секунд
А вообще ошибка говорит о том что типа заголовок (headers) передан уже.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
11.02.2016, 11:24
sparrow6616, до setcookie не должно быть никакого вывода данных. У меня setcookie на 13-ой строчке, а у вас, судя по ошибке, на 14-ой. У вас в начале кода нет никаких пробелов, переносов строк до открывающего тега <? ? Если нет, попробуйте поменять кодировку файла на utf8 without BOM.

Добавлено через 1 минуту
Если не поможет, читайте эту тему. В целом ошибка стандартная, причины её давно известны.
0
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 6
11.02.2016, 11:25  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!doctype html>
<?
    $style_num = isset($_COOKIE['style']) ? $_COOKIE['style'] : 1;
    
    if(isset($_POST['change_style']))
    {
        if(isset($_POST['style1']))
            $style_num = 1;
        if(isset($_POST['style2']))
            $style_num = 2;
        if(isset($_POST['style3']))
            $style_num = 3;
 
        setcookie('style', $style_num, time()+60*60*24*30, '/');
    }
?>
<html>
    <head>
        <meta charset="windows-1251">
        <title>Компьютерное моделирование</title>
        <link rel="stylesheet" href="/<?=$style_num?>.css">
    </head>
    <body>
        <form method="post">
            <input type="hidden" name="change_style" />
            <input type="submit" name="style1" value="Стиль1" />
            <input type="submit" name="style2" value="Стиль2" />
            <input type="submit" name="style3" value="Стиль3" />
        </form>
        <a>Стиль 1</a>
    </body>
</html>
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
11.02.2016, 11:49
Рабочий вариант (не забываем в notepad++ конвертировать текст в UTF-8 кодировку)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php 
header ("Content-Type:text/html; charset=UTF-8");
ini_set ('display_errors', 1); 
error_reporting (E_ALL); 
?> 
<!DOCTYPE HTML>
<html> 
<head> 
    <meta charset="utf-8">
    <title>Компьютерное моделирование</title>
<?php
    $style_num = isset($_COOKIE['style']) ? $_COOKIE['style'] : 1;
    
    if(isset($_POST['change_style']))
    {
        if(isset($_POST['style1']))
            $style_num = 1;
        if(isset($_POST['style2']))
            $style_num = 2;
        if(isset($_POST['style3']))
            $style_num = 3;
 
        //setcookie('style', $style_num, time()+60*60*24*30, '/');
    }
?>
    <link rel="stylesheet" href="/<?=$style_num?>.css">
</head>
<body>
    <form method="post" action = "setCSS1.php">
        <input type="hidden" name="change_style" />
        <input type="submit" name="style1" value="Стиль1" />
        <input type="submit" name="style2" value="Стиль2" />
        <input type="submit" name="style3" value="Стиль3" />
    </form>
    <a>Стиль 1</a>
</body>
</html>
1
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
11.02.2016, 11:57
sparrow6616, перенесите doctype, любой HTML код должен находиться после функции setcookie.
1
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 6
11.02.2016, 12:08  [ТС]
Спасибо всем. С горем пополам разобрался. Теперь можно ли как-то все это дело переделать, что бы это происходило при нажатии на ссылку? Было бы не плохо, если бы ссылка меняла название при нажатии. Например Ссылка называется "Стиль2", нажимаем, подключается стиль 2, а ссылка называется "Стиль1". И наоборот.
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
11.02.2016, 12:11
Цитата Сообщение от sparrow6616 Посмотреть сообщение
Теперь можно ли как-то все это дело переделать, что бы это происходило при нажатии на ссылку? Было бы не плохо, если бы ссылка меняла название при нажатии. Например Ссылка называется "Стиль2", нажимаем, подключается стиль 2, а ссылка называется "Стиль1".
А если есть "Стиль3" тогда что? Более шире смотрите на задачу и думайте о ее реализации.

Добавлено через 1 минуту
Как вариант лучше реализовать через выпадающий список (в котором помещен список стилей) выбрал стиль, нажал на кнопку, стиль применялся
0
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 6
11.02.2016, 12:12  [ТС]
Gcom, а у меня всего 2 стиля по-идее будет.
Список стилей тоже как вариант, спасибо)
0
11.02.2016, 12:13

Не по теме:

Цитата Сообщение от sparrow6616 Посмотреть сообщение
Gcom, а у меня всего 2 стиля по-идее будет.
Это сейчас два, потом захотите третий, четвертый... десятый...

0
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 6
11.02.2016, 12:18  [ТС]
Jodah, скажите пожалуйста, а можно ли как-то ограничить действие cookie до закрытия окна браузера?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,912
11.02.2016, 12:48
sparrow6616, как вариант, заменить куки сессиями. Но не все браузеры их убивают после закрытия страницы.

Либо через JS каким-то образом убивать куку перед выходом со страницы... фз, не знаю однозначного кроссбраузерного решения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2016, 12:48
Помогаю со студенческими работами здесь

Установка связи между таблицами MySQL с помощью PHP
Как ето зделать в PHP

PHP Devel Studio - как сделать переключение между формами
Сразу извиняюсь если закинул тему не туда. Делаю приложение в PHP Devel Studio. Требуется, чтобы после запуска программы открывалась...

Переключение между таблицами Word
Обращаюсь к первой таблице документа: Table:= MSWORD.ActiveDocument.Tables.Item(1); Далее заполняю таблицу.. все проходит успешно. Затем...

Переключение стилей при нажатии через css, без javascript
Необходимо реализовать смену стилей при выборе элемента input type=&quot;radio&quot; c id=&quot;list&quot; Есть html-ка там в блоке article много однотипных...

Переключение между блоками div через js
помогите разобраться, есть следующий код(сам вижу что говнокод): &lt;!doctype html&gt; &lt;html&gt; &lt;head&gt; &lt;meta...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru