8792 sujets

Développement web côté serveur, CMS

Bonjour,
Pour permettre de faire un choix de style (fluide ou fixe) pour mon site, je place un cookies. Le choix du style est fait grace à un formulaire qui envoie la valeur de la variable style. Cette variable est récupérée après validation et utilisée pour définir le cookie. En simplifié cela donne ça :


<?php 
if(isset($_POST['switcher']))   
{
	$style= $_POST['style'];
	setcookie("moncookie", $style, time()+(365*24*3600));
}

?>
<html>
<body>

<?php 
echo $HTTP_COOKIE_VARS["moncookie"];
?>
	<form method="post" action="testform.php">
	<input type="radio" name="style" value="standard" 
	<?php if($style=="standard"  or !$style){echo "checked" ;} ?> > Standard (1024x768 minimum)<br>
	<input type="radio" name="style" value="fluide"
	<?php if($style=="fluide"){echo "checked" ;} ?>> Fluide(s'adapte à 100% de la largeur)<br><br>
	<input type="submit" name="switcher" value="Changer le style" /><br><br>
	</form>
</body>
</html>


ca fonctionne bien MAIS avec un décalage : il faut que je valide DEUX fois pour que les valeurs envoyées par le formulaire s'affichent.
1) est ce normal ?
2) si non, que faut-il modifier ?
Tel quel c'est gênant, en appliquant ce code "en vrai", les visiteurs ne voient pas le design du site se modifier après validation (bien sur quand on récupère la valeur du cookie pour choisir la feuille CSS adéquate).
Merci du dépannage.
Modifié par Misange (02 Jun 2007 - 22:07)
Salut,

Oui c'est normal car au chargement de ta page le cookie est bien écrit mais il ne sera disponible par $HTTP_COOKIE_VARS["moncookie"] qu'au prochain rechargement (en passant, on utilise plutôt $_COOKIE['moncookie'].

Une solution serait de faire comme cela :
<?php
// Choix du style
if (isset($_POST['style']))	// est-ce que le visiteur a demandé un changement de style ?
{	// Si oui on change le style et on écrit un cookie pour la prochaine visite
$style = $_POST['style'];	
$expire = 365*24*3600;  // on définit la durée du cookie, (ici 1 an)
setcookie("moncookie",$style,time()+$expire);  // on l'écrit
}
elseif (isset($_COOKIE['moncookie']))	// Sinon est-ce qu'il existe déjà un cookie ?
{
$style = $_COOKIE['moncookie'];
}
else	// Sinon valeur par défaut
{
$style = 'standard';
}?>

<html>
<body>
<?php 
echo $style;
?>
	<form method="post" action="testform.php">
	<input type="radio" name="style" value="standard" 
	<?php if($style=="standard"  or !$style){echo "checked" ;} ?> > Standard (1024x768 minimum)<br>
	<input type="radio" name="style" value="fluide"
	<?php if($style=="fluide"){echo "checked" ;} ?>> Fluide(s'adapte à 100% de la largeur)<br><br>
	<input type="submit" name="switcher" value="Changer le style" /><br><br>
	</form>
</body>
</html>

A+ Smiley cligne
Salut,

Je me doutais bien de l'explication mais sans trouver la façon de faire avec. Mille mercis, tu me rends vraiment service ça faisait un moment que je coinçais là dessus.
Bonsoir,

Une autre solution pour ces problème d'effectivité au prochain rechargement de page, ca serais d'utiliser une redirection php par les header.
Modifié par Super_baloo8 (02 Jun 2007 - 23:09)
Salut,
Super_baloo8 a écrit :
Une autre solution pour ces problème d'effectivité au prochain rechargement de page, ca serais d'utiliser une redirection php par les header.
Sans doute, mais alors ça ne pourra fonctionner que si le serveur n'a encore rien renvoyé Smiley cligne
Thomas D. a écrit :
Salut,Sans doute, mais alors ça ne pourra fonctionner que si le serveur n'a encore rien renvoyé Smiley cligne


Oui bien sur, tant que le serveur n'envoie pas de html, après il peut très bien créer un cookie, renvoyer des info en base de donnée, créer une session et puis après rediriger.