Wymuszenie zmiany ciastka

0

Witam,
Kilka lat temu pisałem pewny skrypt. Nigdy nie działał zadowalająco.

Idea jest taka, że użytkownik wybiera sobie szablon strony - ciastka o wartości 1, 2, 3, 4
I chodzi mi o to, że okolicznościowo np. święta - chciałbym domyslnie zmienić każdemu wartość ciastka na ustaloną wartość np. 3.

Tylko ten skrypt nigdy dobrze nie działał ...
U części userów działa u części nie.

  1. Jeśli ciastko nie ustawione ustal X
  2. Jeśli ciastko ma inną wartość niż X zmień na X

if (!isset($_COOKIE['zmieniony'])){
if (isset($_COOKIE['CSS']))
		@setcookie('CSS',3, time()+60*60*24*30*36); 
	else 
		@setcookie('CSS',3, time()+60*60*24*30*36);
		}

require 'config.php';

$css = isset($_COOKIE['CSS']) ? $_COOKIE['CSS'] : 3;
if(!isset($_COOKIE['CSS'])) $_COOKIE['CSS'] = 3;

To ktoś ma pomysł jak to zrobić? XD aby działało? zawsze ...

Kod nad require wyłączam gdy nie chce zmienić userom. I włączam gdy chcę, podając jako parametr pożądaną wartość.

0

if (!isset($_COOKIE['zmieniony'])
Ustawiaj też to ciastko i przy każdym nowym 'evencie' zmień je (nazwę lub dodatkowo sprawdzaj i zmieniaj wartość).

if (isset($_COOKIE['CSS']))
        @setcookie('CSS',3, time()+60*60*24*30*36); 
    else 
        @setcookie('CSS',3, time()+60*60*24*30*36);
        }

to możesz skrócić do:

 @setcookie('CSS',3, time()+60*60*24*30*36);

Lub właściwie zamiast całego skryptu tylko @setcookie('CSS',3, time()+60*60*24*30*36); w czasie trwania świąt.

0
youmound napisał(a):

Witam,

Idea jest taka, że użytkownik wybiera sobie szablon strony - ciastka o wartości 1, 2, 3, 4
I chodzi mi o to, że okolicznościowo np. święta - chciałbym domyslnie zmienić każdemu wartość ciastka na ustaloną wartość np. 3.

User ma wybór 1-4 a Ty w konkretnej dacie wymusic chcesz ustawienie konkretnego szablonu. Dobrze zrozumialem ?

0

Moze to byc np. tak jak ponizej. Plik z formularzem ustawia cookies i wstawia je jako nazwe pliku *.css. To robi użytkownik.
Na poczatek pliki *.css w katalogu 'css'. Ich nazwy to 1.css, 2.css, 3.css, 4.css i default.css

Plik 1.css


body {
	background-color: green;
}

itd dla każdego pliku ze zmienionym kolorem tła


<?php



           if(!function_exists('Form')){
			  function Form($arg) {
				
			  $arg  =  "<form action=" . $_SERVER['SCRIPT_NAME'] . " method=\"POST\">";
			  $arg .=  "<select name=\"opcje\">";
			  $arg .= "<option value=\"1\">opcja z wartoscia 1</option>";		
			  $arg .= "<option value=\"2\">opcja z wartoscia 2</option>";		
			  $arg .= "<option value=\"3\">opcja z wartoscia 3</option>";		
			  $arg .= "<option value=\"4\">opcja z wartoscia 4</option>";	
           $arg .= "</select><input type=\"submit\" value=\"Zmien szablon\" /></form>";
				
			  return $arg;	
				
				}	
				}
				
				
				if(!function_exists('SetUpNewUserCookie')){
				function SetUpNewUserCookie($input) {
				
				date_default_timezone_set('Europe/Warsaw');
				
				if($input) {
				if($_SERVER['REQUEST_METHOD'] === 'POST') {
				
            setcookie( 'CookieUsera', $input, time() +  3600*24*30*12*10  );
				
				header('location: ' . $_SERVER['SCRIPT_NAME']);
				
				}

				}else {
				
				Form(@$arg);
				
				}
				
				}
				}
				
			   print Form($arg = true);
			   SetUpNewUserCookie(@$_POST['opcje'])

?>

<LINK REL="stylesheet" HREF="<?php if(isset($_COOKIE['CookieUsera'])){echo 'css/' . $_COOKIE['CookieUsera'].'.css';}elseif(isset($_COOKIE['depends'])){echo 'css/' .$_COOKIE['depends'].'.css';}else{echo 'css/default.css';}?>" TYPE="text/css">




Teraz plik który powinieneś includnąć gdzieś na samej górze lub action z formularza niech leci do osobnego pliku a potem headerem przejdz na index. Powino to byc w każdym "odwiedzanym" pliku przez użytkowników jesli wybierasz rozwiazanie 1


<?php
date_default_timezone_set('Europe/Warsaw');

if(!isset($_COOKIE['CookieUsera'])){
setcookie( 'CookieUsera', '1', time() + 3600*24*30*12*10  );
}
/*
pierwsze dwie zmienne $od_1 && $do_1:
poczatek; format: godzina, minuta, sekunda, miesiac , dzien, rok [23,59,59, miesi±c luty, drugi luty, 2019]
koniec; format: godzina, minuta, sekunda, miesiac , dzien, rok [23,59,59, miesi±c luty, czwarty luty, 2019]
**/

$od_1 = mktime(0,0,0, 2, 2, 2019);
$do_1 = mktime(23,59,59, 2, 4, 2019);

$od_2 = mktime(0,0,0, 12, 24, 2019);
$do_2 = mktime(23,59,59, 12, 26, 2019);



if($od_1 <= $do_1 && (time() >= $od_1 && time() <= $do_1))
{
setcookie( 'CookieUsera', $_COOKIE['CookieUsera'], time() -  3600*24*30*12*10  );
setcookie( 'depends', '1', time() + ($do_1 - time()) );

}elseif($od_2 <= $do_2 && (time() >= $od_2 && time() <= $do_2))
{
setcookie( 'CookieUsera', $_COOKIE['CookieUsera'], time() -  3600*24*30*12*10  );
setcookie( 'depends', '2', time() +  ($do_2 - time()) );

}else
{
setcookie( 'CookieUsera', $_COOKIE['CookieUsera'], time() +  3600*24*30*12*10  );
}



?>
<LINK REL="stylesheet" HREF="<?php if(isset($_COOKIE['CookieUsera'])){echo 'css/' . $_COOKIE['CookieUsera'].'.css';}elseif(isset($_COOKIE['depends'])){echo 'css/' .$_COOKIE['depends'].'.css';}else{echo 'css/default.css';}?>" TYPE="text/css">



funkcje setcookie() ustawiaja ciastka z ważnością od momentu ustawienia do maks daty $do_1 i $do_2.
Najpierw wywołaj plik z formularzem i ustaw jakies ciacho. Potem przejdz do pliku 2 i F5 zmieniajac wartosci w funkcjach mktime()


$od_1 = mktime(0,0,0, 2, 2, 2019); // drugi luty 2019
$do_1 = mktime(23,59,59, 2, 4, 2019); czwarty luty 2019

$od_2 = mktime(0,0,0, 12, 24, 2019); // wigilia 2019
$do_2 = mktime(23,59,59, 12, 26, 2019); // drugi dzien swiat 2019

Jesli aktualna data z serwera "miesci sie" pomiedzy tymi wyzej wymienionymi nastąpi ustawienie konkretnego cookies. Jesli nie np bedzie to 23 kwiecien lub jakakolwiek inna data nastapi nadpisanie cookies ktore wybral wczesniej user. Trzebaby jeszcze sprawdzic czy user wybral cos. Jesli nie wyswietlac mu plik 'default.css'

0
$default_css = '3';

$css = 
    (isset($_POST['selected_css']) ? $_POST['selected_css'] : // from user (form)
    (isset($_COOKIE['CSS']) ? $_COOKIE['CSS'] :	// from cookie
    $default_css
    ));

setcookie("CSS", $css, time() + 60 * 60 * 24 * 30 * 36);

require 'config.php';

$event_times = [
    [
        'start' => mktime(0, 0, 0, 2, 2, 2019),
        'stop' => mktime(23, 59, 59, 2, 4, 2019),
        'css' => '3'
    ],
    [
        'start' => mktime(0, 0, 0, 12, 24, 2019),
        'stop' => mktime(23, 59, 59, 12, 26, 2019),
        'css' => '3'
    ],
];

foreach ($event_times as $event) {
    if (time() >= $event['start'] && time() <= $event['stop']) {
        $css = $event['css'];
        break;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1