Coockies juste ou pas ? [Résolu]

Signaler
Messages postés
17
Date d'inscription
jeudi 4 août 2005
Statut
Membre
Dernière intervention
20 octobre 2006
-
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
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

Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

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)
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.
à+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.
à+
Messages postés
17
Date d'inscription
jeudi 4 août 2005
Statut
Membre
Dernière intervention
20 octobre 2006

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
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
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.
                        
                
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
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
 }
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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;
à+
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
17
Date d'inscription
jeudi 4 août 2005
Statut
Membre
Dernière intervention
20 octobre 2006

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
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
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
Messages postés
17
Date d'inscription
jeudi 4 août 2005
Statut
Membre
Dernière intervention
20 octobre 2006

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


@+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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 .
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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 ? ;)
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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)