Page 1 sur 1

changement d'affichage en php

Posté : 09 févr. 2008, 19:43
par x@v
Bonjour,
j'essaie de gérer le style de mes pages avec un formulaire

Code : Tout sélectionner

<form action="switcher.php" method="post"> <select name="set"> <option value="./styles/style_ff_1" selected="true">Affichage de Default</option> <option value="./styles/style_ff_2">Rouge</option> <option value="./styles/style_ff_3">Vert</option> </select> <input type="submit" value="Changer l'affichage"> </form>
Ma page switcher.php installe un cookie sur le poste client :
et accessoirement m'affiche le cookie à l'aide d'un foreach()
<?php 
setcookie ('sitestyle', $_REQUEST['set'], time()+31536000);
     //bool setcookie  ( string $name  [, string $value  [, int $expire  [, string $path  [, string $domain  [, bool $secure  [, bool $httponly  ]]]]]] )
     //http://fr.php.net/setcookie
     //echo $sitestyle.'dfghjkhgfd'.$_COOKIE[0].$_COOKIE[0];

     // Après avoir rechargé la page : 
//if (isset($_COOKIE['sitestyle'])) {
   foreach ($_COOKIE['sitestyle'] as $name => $value) {
      echo $name .':'. $value .'<br />';
      }
      //header('location:'.$_SERVER['HTTP_REFERER']);
  // }
?>
L'ennuie c'est que je n'ai ni de cookie enregistrer et un warning ?

Code : Tout sélectionner

Warning: Invalid argument supplied for foreach() in /var/www/agenda_d_or/switcher.php on line 9
Merci d'avance :)

Posté : 09 févr. 2008, 20:18
par titerm
quand tu fais un setcookie, tu prépares dans la réponse un header qui placera un cookie lorsque le client lira la réponse. Donc si tu fais un setcookie('toto',...) le cookie toto n'est pas dispo au moment ou tu le définies mais seulement la fois suivante. Donc avant de faire ton foreach, il faut vérifier si le cookie est présent ou pas avec un empty() ou isset(), et tu fais ton foreach seulement si c'est le cas.

Posté : 09 févr. 2008, 20:37
par x@v
j'avais omis de mettre :
<?php if(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) {?>
	<link rel="stylesheet" type="text/css" media="screen" href="./*.css" />';
<?php } else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"])) {?>
	<link rel="stylesheet" type="text/css" media="screen" href="<?php echo  (!$sitestyle)?'./styles/style_ff_1':$sitestyle ?>.css" />
<?php } else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"])) {?>
	<link rel="stylesheet" type="text/css" media="screen" href="./*.css" />
<?php } else {?>
	<link rel="stylesheet" type="text/css" media="screen" href="./*.css" />
<?php }
si j'ai bien compris
if (isset($_COOKIE['sitestyle'])) 
{
//foreach ($_COOKIE['sitestyle'] as $name => $value) 
	//echo $name .':'. $value .'<br />';
      header('location:'.$_SERVER['HTTP_REFERER']);
}
effectivement quand je fait un for_dump() sur le cookie la valeur s'affiche + clé
Mais alors pourquoi
(!$sitestyle)?'./styles/style_ff_1':$sitestyle ?>.css" />
mon cookie ne s'affiche pas avec la variable $sitestyle ?

edit
j'ai trouvé c'est bêtement
$_COOKIE["sitestyle"]
quand global machin est à off on ne peux qu'utiliser des superglobales et pas $sitestyle
:)
Merci