Style Switcher avec un cookie

Style Switcher avec un cookie - PHP - Programmation

Marsh Posté le 25-10-2004 à 01:36:14    

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
Reply

Marsh Posté le 25-10-2004 à 01:36:14   

Reply

Marsh Posté le 25-10-2004 à 02:36:52    

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
Reply

Marsh Posté le 25-10-2004 à 10:20:27    

+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
Reply

Sujets relatifs:

Leave a Replay

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