Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1443 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Style Switcher avec un cookie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Style Switcher avec un cookie

n°881665
Surfoo
Ça va ? ok.
Posté le 25-10-2004 à 01:36:14  profilanswer
 

Bonjour tout le monde,  
 
voilà j'ai réalisé un style switcher en passant la variable par l'URL, qui fonctionne nickel, mais j'ai voulu le changer en utilisant un cookie mais j'ai quelques petits problèmes...  
 
Quand je veux changer le style CSS par mon menu déroulant je suis obligé de le valider 2 fois...
je ne sais pas d'ou viens le problème, j'ai du faire une erreur quelque part mais je ne sais pas trop ou (j'ai jamais utilisé les cookies avant ce soir)  
 
Voilà le code : (si vous avez des améliorations à proposer n'hésitez pas surtout ;))
 
Avant l'entête :

Code :
  1. if (isset($css)) {
  2. setcookie('src3b14', $css, time()+(365*24*3600));
  3. }
  4. elseif (isset($_COOKIE['src3b14'])) {
  5. setcookie('src3b14', $_COOKIE['src3b14'], time()+(365*24*3600));
  6. }
  7. //sinon si le style css n'a pas été trouvé :
  8. //selectionne le style par défaut et mettre la valeur par défaut du CSS au cookie
  9. else {
  10. $req=mysql_query("SELECT css_id FROM work_css WHERE css_default=1 LIMIT 0,1", $cx) or die("Problème de CSS !<br />".mysql_error());
  11. $data=mysql_fetch_object($req);
  12. setcookie('src3b14', $data->css_id, time()+(365*24*3600));
  13. }


 
Affichage des liens des styles CSS :

Code :
  1. $req=mysql_query("SELECT css_id, css_titre, css_url FROM work_css ORDER BY css_default DESC", $cx) or die("Problème de CSS !<br />".mysql_error());
  2. while ($data=mysql_fetch_object($req)) {
  3. if ($_COOKIE['src3b14']==$data->css_id) {
  4.  $rel="stylesheet";
  5.  $css_affiche=$data->css_titre;
  6. }
  7. else
  8.  $rel="alternate stylesheet";
  9. $css_titre=$data->css_titre;
  10. echo " <link rel=\"".$rel."\" type=\"text/css\" href=\"./css/".$data->css_url."\" media=\"screen\" title=\"".$css_titre."\" />\n";
  11. }


 
Le formulaire :

Code :
  1. $fichier=basename($_SERVER["PHP_SELF"]);
  2. echo "  <form action=\"".$fichier."\" method=\"post\" id=\"themes\">\n    <p>\n";
  3. if (isset($matiere))
  4. echo "<input type=\"hidden\" name=\"matiere\" value=\"".$matiere."\" />\n";
  5. $req=mysql_query("SELECT css_id, css_titre FROM work_css ORDER BY css_id", $cx) or die("Problème de requête<br />".mysql_error());
  6. $id=$data->css_id;
  7. echo "      <select name=\"css\" id=\"css\">\n";
  8. while ($data=mysql_fetch_object($req)) {
  9.  echo "        <option value=\"".$data->css_id."\"";
  10.   if ($data->css_id==$_COOKIE['src3b14'])
  11.    echo " selected=\"selected\"";
  12.  echo ">".$data->css_titre."</option>\n";
  13. }
  14. echo "      </select>\n";
  15. // Libération des résultats
  16. mysql_free_result($req);
  17. echo "      <input type=\"submit\" value=\"Ok\" accesskey=\"o\" />
  18.     </p>
  19.   </form>


 
Merci.


Message édité par Surfoo le 25-10-2004 à 02:59:10
mood
Publicité
Posté le 25-10-2004 à 01:36:14  profilanswer
 

n°881668
naceroth
Posté le 25-10-2004 à 02:36:52  profilanswer
 

Bon, d'abord les cookies, c'est pas trop ma tasse de thé non plus, je m'excuse déjà pour les conneries que je pourrais dire :D
 
Ceci dit, vu les symptômes que tu décris, je dirais que c'est simplement du au fait qu'un cookie est envoyé au chargement d'une page (en gros) et pas modifié en temps réel. Le setcookie modifie le cookie présent sur ta machine, pas la version qu'a le serveur au moment de l'execution de la page.
 
Dans ton cas, je te suggère plutôt de créer une variable prennant la valeur du cookie tel qu'il devrait être à l'execution de ta page et de te servir de cette variable pour sélectionner la bonne css :)


Message édité par naceroth le 25-10-2004 à 02:37:23
n°881763
Xav_
The only one...
Posté le 25-10-2004 à 10:20:27  profilanswer
 

+1 pour qqun qui dis ne pas trop connaitre les cookies, tu t'en sors plutot bien.
En effet les pb de synchro vis à vis des cookies, sont classique, c'est pas vraiment que tu doit renvoyer ton formulaire, mais seulement que le serveur à besoin d'un raffraichissement de la page pour que le cookie soit effectivement présent et/ou à jour.
La soluce t'a été donnée, moi je chek l'existance des cookie et leur valeur à l'ouverture du site pour initialiser les variables de ce genre (pseudo, skin choisit...etc...), et si le cookie n'existe pas ben, valeur par défaut.
Si l'utilisateur change ses propriété, tu renvoie le cookie avec les nouvelles valeurs, mais tu continue de bosser avec tes variables, et tu lira le cookie (mis à jour d'ici là) à l'initialisation, la prochaine fois que le mec passera sur le site ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Style Switcher avec un cookie

 

Sujets relatifs
Utiliser 2 feuilles de style dans une même pagepb php -> appel d'un style css
Session, cookie et warningChoisir une feuille de style suivant le navigateur
Pourquoi je ne peux pas créer mon cookie ?Style de sites ...
2 feuilles de style "principales" (pas alternatives) sur une pageIE ne veut pas créer le cookie
[Cookie] Bug avec IE6 sur l'utilisation de cookie tiers ?Cookie illisible ?
Plus de sujets relatifs à : Style Switcher avec un cookie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR