[Résolu]Changement de style, cookie, path

Changement de style, cookie, path [Résolu] - PHP - Programmation

Marsh Posté le 19-04-2005 à 11:20:32    

Bonjour à tous,  
 
Je viens de créer quelques lignes de codes permettant aux visiteurs de mon site de chosir leurs feuilles de style parmis celles que j'ai créer.
 
Voici donc ces quelques lignes :  

Code :
  1. if (isset($_GET['style'])) {
  2. /* Je regarde d'abord si on à changé le style */
  3. setcookie ('style', '',time()-86400);
  4. /*comme c'est la cas, j'éfface le cookies si il y en a un */
  5. setcookie('style', $_GET['style'],1147483647);
  6. /*Je mets le cookies avec la valeur de la feuille de style*/
  7. $fstyle = $_GET['style'];
  8. /*J'assigne la valeur du style à la variable $fstyle qui me servira dans pour la suite
  9. $chaine=str_replace("style", "ok", $REQUEST_URI);  
  10. header("Refresh: 1;".$chaine);*/
  11. }
  12. if (isset($_COOKIE['style'])) {
  13. /*Dans ce cas, la personne n'a pas changer de style donc j'éssaye de récuperer la valeur du cookies*/
  14. $fstyle = $_COOKIE['style'];
  15. }
  16. if (!isset($_GET['style']) && !isset($_COOKIE['style'])) {
  17. /*Dans ce cas, la personne n'a pas changé de style et n'a pas de valeur dans ces cookies*/
  18. $fstyle = "noir";
  19. }


et voici le code mon formulaire :  

Code :
  1. <form action="/?style=change" method="get" id="style">
  2.     <p><label for="styles">Choisir un style :</label>
  3.     <select id="styles" name="style">
  4.      <option value="rouge">rouge</option>
  5.      <option value="rien">rien</option>
  6.      <option value="noir">noir</option>
  7.     </select>
  8.     <input type="submit" value="Ok" /> Appuyer ensuite sur la touche F5
  9.    </p></form>


 
Pour en arriver au problème suivant :  
Lorsque je change de style, le changement ne s'applique pas immédiatement. L'utilisateur est obligé d'actualiser la page. Comment y remédier ? J'ai essayer avec header() refresh, mais ça  déconne avec IE...
 
Merci d'avance.


Message édité par yoyo354 le 22-04-2005 à 18:11:11

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 19-04-2005 à 11:20:32   

Reply

Marsh Posté le 19-04-2005 à 13:59:27    

Faudrait-t-il mieux éssayeravec un POST plutôt qu'un GET ?


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 19-04-2005 à 14:01:33    

http://www.nexen.net/docs/php/anno [...] cookie.php
 

Citation :

Erreurs communes :
 
    * Les cookies ne seront accessibles qu'au chargement de la prochaine page, ou au rechargement de la page courante. Pour tester si un cookie a été défini avec succès, vérifiez la présence du cookie au prochain chargement de la page avant que le cookie n'expire. Le délai d'expiration est défini en utilisant le paramètre expire . Une façon simple de vérifier le positionnement du cookie est d'utiliser print_r($_COOKIE); .


 
Lis un peu la doc quand tu as des comportements étranges...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-04-2005 à 14:08:34    

Merci, ça m'apprendra à regarder plus souvent la doc et à lacher de temps en temps mes bouqins...  
 
Cependant, je réitère ma demande...


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 19-04-2005 à 14:12:09    

+1 skeye
et il manque des else pour eviter ce genre de problème, un exemple un peu plus propre :

Code :
  1. if (isset($_GET['style']))
  2. {
  3. $fstyle = $_GET['style']; // attention aux pbs de securité
  4. setcookie('style', $fstyle, time()+3600); // 3600 est juste un exemple
  5. }
  6. else if (isset($_COOKIE['style']))
  7. {
  8. $fstyle = $_COOKIE['style']; // attention aux pbs de securité
  9. }
  10. else
  11. {
  12. $fstyle = "noir"; // style par défaut
  13. }

Reply

Marsh Posté le 19-04-2005 à 14:14:45    

Salut !  
Voici un bout de code que j'ai écrit que est semblable au tien. Moi j'utilise les feuilles de style pour changer de résolution, mais le principe reste le meme.
 
if (isset($ChangeResolution)) {
 setcookie("resolution",$ChangeResolution,time()+(60*60*24*15));
 $resolution=$ChangeResolution;
} elseif ( $resolution=="" ) {
 setcookie("resolution","800",time()+(60*60*24*15));
 $resolution=800;
} else {
 setcookie("resolution",$resolution,time()+(60*60*24*15));
}
?>
 
et voici le formulaire:
 
<form name="resolution" method="post" action="Index.php">
R&eacute;solution: <br>
<input type="radio" name="ChangeResolution" value="800" <? if ($resolution=="800" ) echo "checked" ?> >
            800*600<br>
<input type="radio" name="ChangeResolution" value="1024" <? if ($resolution=="1024" ) echo "checked" ?> >
1024*768
<br>
<input type="submit" name="Submit" value="Changer">
         </form>

Reply

Marsh Posté le 19-04-2005 à 14:22:15    

Merci.  
Le résulat est très bien. Il ne me reste plus qu'à régler le problème du formulaire qui me renvoie à l'index du site, mais c'est un autre post...
 
EDIT : Il n'y aura point lieu d'ourvir un nouveau post... J'ai utilisé POST comme yakob59 et $SERVER[REQUEST_URI] pour l'action= du formulaire qui lui même se voit ajouté if ($fstyle == $enCours) { print " selected=\"selected\""; }...  
 
De nouveau merci pour vos réponses.


Message édité par yoyo354 le 19-04-2005 à 14:39:02

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 20-04-2005 à 16:43:05    

Trop beau pour être vrai...
 
ça ne fonctionne plus.... Je remet donc mon code en éspérant qu'une bonne âme trouve se qui cloche...
 
Le formulaire :  

Code :
  1. <form action="" method="post" id="style">
  2.     <p><label for="styles">Choisir un style :</label>
  3.     <select id="styles" name="style">
  4.      <option value="rouge">rouge</option>
  5.      <option value="rien">rien</option>
  6.      <option value="noir" selected="selected">noir</option>
  7.     </select>
  8.     <input type="submit" value="Ok" />
  9.    </p></form>


 
Le code php :

Code :
  1. if (isset($_POST[style])){
  2.   setcookie('style', $_POST[style], time()+131400); // 3600 est juste un exemple
  3.   $fstyle = $_POST[style]; // attention aux pbs de securité
  4. } elseif (isset($_COOKIE[style])) {
  5.   $fstyle = $_COOKIE[style]; // attention aux pbs de securité
  6. else {
  7.   setcookie('style', 'noir', time()+131400);
  8.   $fstyle = "noir"; // style par défaut
  9. }



---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 20-04-2005 à 16:49:04    

Il te manque les '
=> $_POST['style'], $_COOKIE['style']


Message édité par skeye le 20-04-2005 à 16:49:36

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-04-2005 à 16:52:58    

[:atog] Merci


Message édité par yoyo354 le 20-04-2005 à 16:54:59

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 20-04-2005 à 16:52:58   

Reply

Marsh Posté le 20-04-2005 à 17:00:22    

Sinon il y a IOTBS


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-04-2005 à 17:11:39    

:pt1cable:  
 
EDIT : ça fonctionne defois un peu...:ouch:  
 
Bref, ça déconne... Vous pouvez tester par vous même http://yoyo.eurotchat.net/index.php.  
 
Masklinn, IOTBS utilise du javascript et je ne veux pas en utiliser vue le nombre de personne qui le déscative.


Message édité par yoyo354 le 20-04-2005 à 17:12:55

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 20-04-2005 à 17:13:35    

yoyo354 a écrit :

:pt1cable:  
 
EDIT : ça fonctionne defois un peu...:ouch:  
 
Bref, ça déconne... Vous pouvez tester par vous même http://yoyo.eurotchat.net/index.php.  
 
Masklinn, IOTBS utilise du javascript et je ne veux pas en utiliser vue le nombre de personne qui le déscative.


chez moi ça marche très bien sous firefox et IE.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-04-2005 à 17:14:29    

Ça marche bien ton truc... mais aïe les yeux quand on passe en rouge ou en rose...
Sinon c'est vraiment pas mal..

Reply

Marsh Posté le 20-04-2005 à 17:23:15    

En effet, cela fonctionne defois...  
Voici la procédure qui permet de le faire déconner ce petit monde :  
- Effacer les cookies du domaine yoyo.eurotchat.net ;
- Aller sur la page d'accueil : http://yoyo.eurotchat.net/index.php ;
- Changer le style en rose :love: et faire ok ;
(là, la page devient bien rose)
- Aller sur "mes potes" ;
- Changer le style en rouge et faire ok ;
(là, la page devient bien rouge)
- Aller sur la page "accueil" ;
 :pt1cable:  ET LA : la page est rose et NON rouge... :cry:
 
EDIT : J'avais oublié de dire merci pour avoir tester les styles sur mon site  :ange:  
       - Sinon babar9160, je te l'accorde, les couleurs sont à chier  :lol: ( le rose c'est pour une copine..) (le rouge, c'est pour montrer mes talents de graphiste :bounce:...)


Message édité par yoyo354 le 20-04-2005 à 17:34:04

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 21-04-2005 à 08:57:47    

J'ai encore mieux...
 
J'arrive sur ton site : il est en noir.
Je le mets en rouge...
Je vais dans une rubrique peu importe, et je mets en rose.
Ben quand je reviens sur l'accueil... tadaaa c'est noir :p
 
Doit il y avoir un soucis. D'autant plus que si je vais sur une autre rubrique c'est bien en rose. A ne plus rien y comprendre.

Reply

Marsh Posté le 21-04-2005 à 10:45:12    

Surtout que tout presque toute les rubriques mène à l'accueil->index.php, les autres rubriques sont des includes dans index.php (pour les adresses -> url-rewriting)
 
Là, je suis pommé


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 22-04-2005 à 15:32:58    

[:atreyu]


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 22-04-2005 à 15:47:57    

Reply

Marsh Posté le 22-04-2005 à 15:55:38    

merci pour le lien mais je l'avais déjà vue.
J'utilise uniquement des feuilles de style et je ne veux pas de javascript :whistle:


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 22-04-2005 à 16:55:42    

Juste une idee comme ca, ce serait pas un probleme lie au cache ?
 
Enfait le probleme viens de ton cookie.
J'ai efface tes cookies, je vais sur ton site, un cookie est cree "style noir", le path de ce cookie est "/".
 
Si maintenant je vais dans une rubrique, et que je change le style, un autre cookie sera cree avec un autre path.
Donc du coup quand tu reviens sur la page d'accueil il reprends le premier cookie avec le path "/" .
 
Donc regarde la gestion de ton cookie, est il faut que tu lui indique "/" comme path tout le temps.


Message édité par cerel le 22-04-2005 à 17:00:37
Reply

Marsh Posté le 22-04-2005 à 17:43:00    

J'avoue ne pas très bien comprendre le changement de path...  

Code :
  1. setcookie('cookie_name', 'blablabla', (time() + 3600), 'yoyo.eurotchat.net/');

:??:  
 
Mais sinon, il faudrait effacé tout les cookies avant den créer un autre ?
EDIT :  :pfff:
 
Edit 2 :  :jap:  :love:  

Code :
  1. if (isset($_POST['style'])){
  2.   setcookie('style', $_POST['style'], time()+131400, '/'); // 3600 est juste un exemple
  3.   $fstyle = $_POST['style']; // attention aux pbs de securité
  4. } elseif (isset($_COOKIE['style'])) {
  5.   $fstyle = $_COOKIE['style']; // attention aux pbs de securité
  6. else {
  7.   $fstyle = "noir"; // style par défaut
  8. }


 
Voilà, en effet Cerel, il s'agissait bien d'un problème de path.


Message édité par yoyo354 le 22-04-2005 à 18:10:08

---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed