design aléatoire

eric1
Invité n'ayant pas de compte PHPfrance

04 août 2005, 10:00

bonjour à vous toutes et tous,

Voilà,je souhaiterais réaliser un design aléatoire grâce au CSS sans utiliser les cookies, voilà mon code :
<?php
$design = array("rouge","vert","bleu","violet");
shuffle($design);
?>

<html>
<head>

<?php

echo "<style type=\"text/css\">";
echo "@import url(".$design[0].".css);";
echo "</style>";

?>

</head>
<body>

</body>
</html>
Le problème est que lorsque je navigue d'une page à une autre, je change de design à chaque fois !!! Or ce n'est pas ce que je veux !! Je veux qu'il y ait un design DIFFERENT seulement lorsque je suis dans la même session !!

Mais je ne sais pas comment et où mettre la variable de session pour que cela marche.

J'espère avoir été clair au niveau de ma demande, pourriez -vous corriger mon code pour que clea marche svp ?. Merci pour vos aides.

Eric

P.S. : j'ai utilisé la fonction shuffle() pour mélanger de façon aléatoire mon tableau $design[/u]

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 10:04

tu testes : si la variable de session $tableau n'existe pas, tu la crées avec ta méthode
sinon tu n'y touches plus

Mammouth du PHP | 19672 Messages

04 août 2005, 10:05

Salut,
déjà, il faut savoir que la session en général utilise des cookies, même si tu ne les définis pas toi-même.

Ceci dit, pour avoir le même design d'une page sur l'autre, il faut que tu fixes la valeur de ta variable de session. Donc ce que tu peux faire, c'est à l'arrivée de l'internaute vérifier si une valeur de style est définie dans la variable de session:
- si oui, tu gardes la même;
- si non, tu mélanges le tout, tu secoues bien et tu définis un style aléatoire, et pour les autres pages, retour ligne précédente.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

eric1
Invité n'ayant pas de compte PHPfrance

04 août 2005, 10:44

sniff sniff ,cela ne marche pas,j'ai écrit cela ( oui oui je sais,je suis nul avec les variables de session :

<?php
$design = array("rouge","vert","bleu","violet");
if(isset($_SESSION['design'])){
session_start();
$css = $_SESSION['design'];
}
else
{
shuffle($design);
$css=$design[0];
}
?>

<html>
<head>

<?php

echo "<style type=\"text/css\">";
echo "@import url(".$css.".css);";
echo "</style>";

?>

</head>
<body>

</body>
</html>


que faire?

Eric

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 10:49

il te faut initialiser la session avec session_start() dans ta page :)

regarde ce tuto qui pourrait t'aider : http://www.phpdebutant.org/article69.php

eric1
Invité n'ayant pas de compte PHPfrance

04 août 2005, 10:57

cela marche toujours pas, en fait question bete :

j'ai ecrit ce code seulement pour ma page index.php (qui contient un menu par include() ) :
<?php
$design = array("rouge","vert","bleu","violet");
if(isset($_SESSION['design'])){
session_start();
$css = $_SESSION['design'];
}
else
{
shuffle($design);
$css=$design[0];
}
?>
Mais quand j'appelle les autres pages par le biais des variables par URL GET, dois-je également mettre ce bout de code ci-dessue à toutes mes pages pour que cela marche?

Pouvez vous me confirmer?

Si ce n'est pas le cas,alors,je ne comprends plus rien...

Eric ( je suis un peu perdu là... )

ouckileou, aides moi stp !

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 11:01

le session_start() doit être en tout premier (c'est marqué dans le tuto)
<?php
session_start();

if(isset($_SESSION['design'])) {
   $css = $_SESSION['design'];
} else {
   $design = array("rouge","vert","bleu","violet");
   shuffle($design);
   $css=$design[0];
}
?>
oui tu dois mettre ce code dans toutes tes pages, si un utilisateur ne passe pas par la page d'accueil sinon, il n'aura pas de style défini

Tho
Invité n'ayant pas de compte PHPfrance

04 août 2005, 11:08

à rajouter dans le else :

Code : Tout sélectionner

$_SESSION['design'] = $css;

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 11:09

à rajouter dans le else :

Code : Tout sélectionner

$_SESSION['design'] = $css;
exact ! :pouce:

eric1
Invité n'ayant pas de compte PHPfrance

04 août 2005, 11:17

merci ouckileou, mais cela ne marche toujours pas et pourtant j'ai mis ce code sur toute mes pages,je ne comprends plus RIEN ..
et meme avec start_session(); devant tout code !!

sniff sniff ,il change sans cesse de design...

Eric

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 11:20

pense à rajouter la modification signalée par l'invité aussi

affiche ta variable pour voir ce qu'il y a dedans, et éventuellement rajoute un test :
<?php
session_start();
echo 'design='.$_SESSION['design'];
if(isset($_SESSION['design']) && !empty($_SESSION['design'])) {
   $css = $_SESSION['design'];
} else {
   $design = array("rouge","vert","bleu","violet");
   shuffle($design);
   $css=$design[0];
   $_SESSION['design'] = $css;
}
?>
Modifié en dernier par ouckileou le 04 août 2005, 11:41, modifié 1 fois.

eric1
Invité n'ayant pas de compte PHPfrance

04 août 2005, 11:34

voilà j'ai recopié exactement le meme code que tu m'as donné et voilà ce qui est marqué :


sur la page index.php , j'ai :

Code : Tout sélectionner

design=
et sur les autres pages quand je navigue,cela me donne :

Code : Tout sélectionner

design=design=

comprends-tu ce qui se passe ?

Eric

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 août 2005, 11:42

non pas vraiment

j'ai corrigé le code avec la remarque de l'invité, je l'avais oublié, retente on en sait jamais...

et en passant : plutôt que de mélanger le tableau et de prendre la première cellule, ne serait-il pas plus simple de le garder fixe et de choisir un indice au hasard ? :roll:
à mon avis c'est plus optimisé ;)

eric1
Invité n'ayant pas de compte PHPfrance

04 août 2005, 12:05

cela marche,c'est ma faute,j'ai mal recopié ton code final !! MILLE EXCUSES.

Merci ouckileou pour ta patience et ton aide hyper précieuse !!