Coockies juste ou pas ?

Résolu
qpzmg Messages postés 17 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 20 octobre 2006 - 20 août 2006 à 12:51
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 21 août 2006 à 00:54
bonjour,


J'ai déja été aider sur ce forum pour la mise au poins de ce script :


<?

 if(!isset($_COOKIE['mckay38_themes'])){

  $theme = "themes/stargate/theme.php";

  include($theme);

 } else {

  $theme = "themes/".$_COOKIE['mckay38_themes']."/theme.php";

  include($theme);

 }

?>


Ce script me permet de chancher le thème via une page de mon site, ou
d'ouvrir le thème que je veut si le visiteur n'a pas changé le thème
donc n'a pas créé de coockies.

Jusque la ça marche .


Mais je suis confronté a un problème :


Si je supprime le dossier stargate ($theme =
"themes/stargate/theme.php";) et que le visiteur a créé un coockies
ayant pour valeurs stargate en changeant de thème, le script ne va pas
trouver le dossier et le fichier thème, et va donc afficher une page
d'erreur.

 comment faire pour parer cela ?


Je suis débutant et je ne sait pas trop comment faire.


Si vous avez une solution

je suis ouvert a toutes propositions !


Merci d'avance !

14 réponses

audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
20 août 2006 à 15:11
Salut,
Guillemouze cela ne sert à rien de vérifier l'existence du thème puisque qpzmg n'autorisera que ces thèmes grâce au "switch" : "
<?php
if (isset($_COOKIE['mckay38_themes']))
 switch ($_COOKIE['mckay38_themes']){
  case 'stargate': require_once('./themes/stargate/theme.php'); break;
  case 'farscape': require_once('./themes/farscape/theme.php'); break;
  default: require_once('./themes/defaut/theme.php'); break;
 }
?>
"
Sauf si biensur il fait un système automatique dans ce cas il faut mieux utiliser "is_file" car cette fonction est plus rapide que "file_exists" : "
<?php
if (isset($_COOKIE['mckay38_themes']))
 if (is_file('./themes/'.$_COOKIE['mckay38_themes'].'/theme.php') require_once('./themes/'.$_COOKIE['mckay38_themes'].'/theme.php');
 else require_once('./themes/defaut/theme.php');
?>
"

For every choice, a consequence (Fable)
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 août 2006 à 16:39
Je trouve qu'il y a des quiproquo dans cette discussion... lol
Bon mais si au final t'as ta solution c'est ce qui compte.
à+
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 août 2006 à 13:40
Bonjour,

et bien dans ton script tu fais :

switch (valeur de ton cookie){
    case 'stargate' :     script qui load la skin stargate;
                                break;
    case 'farscape' :     echo 'c\'est bien mieux cette série ;^)';
                                 script qui load la skin farscape;

                                break;
    default : script de la skin par défaut;
}

pour plus d'infos : va voir sur php.net et cherche switch dans les fonctions.
à+
0
qpzmg Messages postés 17 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 20 octobre 2006
20 août 2006 à 14:15
Si j'ai bien compris, je fait ça :


<?

switch ($_COOKIE['mckay38_themes']){

    case 'stargate' :     $theme = "themes/stargate/theme.php";

                                include($theme);

           
           
        break;

    case 'farscape' :    $theme = "themes/farscape/theme.php";


                                include($theme);

           
           
        break;

    default
:               
$theme = "themes/defaut/theme.php";


                                include($theme);

}

?>


je vais essayer
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 août 2006 à 14:47
en fait je crois pas que ce soit ca ton pb. a mon avis tu devrai plutot faire ca :

<?
$theme_par_defaut = "themes/bob_leponge/theme.php";
$theme = $theme_par_defaut;
 if( isset($_COOKIE['mckay38_themes'])){
  $theme = "themes/".$_COOKIE['mckay38_themes']."/theme.php";
  include($theme);
 }

if (file_exists($theme)) {
    include($theme);
} else {
    include($theme_par_defaut);
}
?>

par contre il faut bien que ton theme par defaut existe, sinon tu aura un message d'erreur. si tu veu qu'il n'inclu pas de fichier si ton theme par defaut n'esiste pas, tu a juste a ajouter la ligne en rouge:

if (file_exists($theme)) {

    include($theme);

} else {
    if (file_exists($theme_par_defaut)) {


        include($theme_par_defaut);
    }

}

dans ce cas la, il essayera de charger le themle du cookie si il existe et qu'il est valide, sinon il chargera le theme par defaut si il est valide.

                
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 août 2006 à 14:49
heuuuu rectification :

<?
$theme_par_defaut = "themes/bob_leponge/theme.php";
$theme = $theme_par_defaut;
 if( isset($_COOKIE['mckay38_themes'])){
  $theme = "themes/".$_COOKIE['mckay38_themes']."/theme.php";
//  include($theme); //ne pas mettre cette ligne
 }
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 août 2006 à 15:49
QPZMG : pour ne pas que tu t'embrouilles, je résume :

tu fais ce que j'ai dit (c'est bien ce que tu as compris) et quand tu supprimes par exemple le thème farscape, tu dois juste effacer cette partie :

    case 'farscape' :    $theme = "themes/farscape/theme.php";
                                include($theme);
                                break;
à+
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
20 août 2006 à 16:21
Heu...
pour moi, la seule solution valable et valide est celle de [auteurdetail.aspx?ID=559514 qpzmg]
l
les autres vont fonctionner...maos niveau securité, aie aie aie  !!
ca :
if( isset($_COOKIE['mckay38_themes'])){
  $theme = "themes/".$_COOKIE['mckay38_themes']."/theme.php";
c'es vraiment pas securisée du tout !!

enfin c'est mon avis...

-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
qpzmg Messages postés 17 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 20 octobre 2006
20 août 2006 à 16:24
Merci pour toutes ces réponces...


Je retiens l'idée de audayls :

<?php
if (isset($_COOKIE['mckay38_themes']))

 switch ($_COOKIE['mckay38_themes']){
  case 'stargate': require_once('./themes/stargate/theme.php'); break;

  case 'farscape': require_once('./themes/farscape/theme.php'); break;

  default: require_once('./themes/defaut/theme.php'); break;
 }
?>

Je pence même qu'en faisant un include :

<?php
if (isset($_COOKIE['mckay38_themes']))

 switch ($_COOKIE['mckay38_themes']){
include('listetheme.php');

  default: require_once('./themes/defaut/theme.php'); break;
 }
?>

et le fichier listetheme.php

<?

  case 'stargate': require_once('./themes/stargate/theme.php'); break;


  case 'farscape': require_once('./themes/farscape/theme.php'); break;
?>
Je retiens cette idée car j'aime bien l'idée de liste.

Encore MERCI
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 août 2006 à 16:32
audayls, c vrai ce que tu dis, mais le but de ma methode etait d'etre un maximum generique, et ainsi qu'il n'ai pas a modifier toutes ses sources pour ajouter un theme.

Par contre, c vrai que ce n'est pas tout a fait securisé. :s
0
qpzmg Messages postés 17 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 20 octobre 2006
20 août 2006 à 16:52
En fait j'ai essayer ta solution mais ça na pas marché...


Ai je fait une erreur, est ce a cause de Free ???


J'ai donc préférer l'idée de liste ce que est en plus plus pratique pour moi


Merci quant même


@+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 août 2006 à 17:49
Pas de souci
Non, le pb ne peut pas venir de Free.
Mais en fait ce qui me faisait rire, c'est qu'Audayls et moi t'avons donné exactement la même réponse ! lol car
$theme = "themes/farscape/theme.php"; include($theme);
c'est la même chose que
require_once( "themes/farscape/theme.php"); (sauf si tu appelles le script de thèmes plusieurs fois, ce qui ne devrait pas être le cas).
Donc s'il y a un pb dans le code que tu as écrit à partir de ma suggestion et pas celle d'Audayls, c'est juste que tu as dû faire une petite coquille quelque part, mais c'est pas grave, du moment que tu as pu appliquer la solution c'est cool.
Voilà, bonne chance pour la suite .
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
20 août 2006 à 21:55
Mais pourquoi faire compliquer pour si peu ?

40 switchs, 20 if ... faites des while tant qu'on y est :)

if( isset($_COOKIE['mckay38_themes']) ) {
$theme = $_COOKIE['mckay38_themes'];
if ( is_dir('./themes/'.$theme) ) {
include './themes/'.$theme.'/index.php';
} else {
include './themes/default/index.php';
}
} else {
include './themes/default/index.php';
}

C'est où le compliqué la dedand ? ;)
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
21 août 2006 à 00:54
Pour retirer une skin du site sans la supprimer, c'est plus sympa de la retirer d'une liste que de changer le nom de son répertoire, tu penses pas Fhx? et en plus au moins là, aucune possibilité d'y accéder pour un visiteur.
et moi les switchs, tu vas crier mais moi je les verrais bien générés par une boucle à partir d'une simple liste s'il y en a beaucoup

Mais quand même, on en est à 13 posts pour une question aussi simple, c'est fort lol (je sais, j'ai participé à ce flood lol)
0