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

  FORUM HardWare.fr
  Programmation
  PHP

  Formulaire de personnalisation de la page

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Formulaire de personnalisation de la page

n°1491959
teycir
Posté le 15-12-2006 à 16:27:40  profilanswer
 

Bonjour;
Je suis débutant en programmation.
J'ai fait une tentative de petit système de personnalisation du design d'une page web.
J'ai des doutes au niveau de send_design.php (voir le code ci-joint) au niveau du cookie (je ne suis pas sûr qu'on puisse faire plusieurs posts au sein d'un même cookie) et j'ai des doutes an niveau du html (voir la fin: <p> et </p> sont-ils bien placés?).  
J'envoie le code et pour correction ou de l'amélioration si certains veulent bien. Merci.
 
La page design.php permet de tester la valeur du cookie afin d'utiliser le bon design, et s'il n'est pas présent, d'utiliser le design par défaut.  
 
On aura alors le code suivant (pour la page design.php):  
<?php  
// on teste si le cookie est declare (si il n'est pas déclaré, on applique la couleur verte ; image1.jpg et titre1 par défaut)  
if (!isset($_COOKIE['DESIGN']))  
{  
$background = "#badbb7";  
$image = "image1.jpg";  
$titre = ""titre1"";  
}  
else  
    {  
 
// cas où le site sera bleu avec image 1 et titre 1  
if ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#aac5f4";  
$image = "image1.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera bleu avec image 2 et titre 1  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#aac5f4";  
$image = "image2.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera bleu avec image 3 et titre 1  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#aac5f4";  
$image = "image3.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera bleu avec image 1 et titre 2  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#aac5f4";  
$image = "image1.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera bleu avec image 1 et titre 3  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#aac5f4";  
$image = "image1.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera bleu avec image 2 et titre 2  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#aac5f4";  
$image = "image2.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera bleu avec image 2 et titre 3  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#aac5f4";  
$image = "image2.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera bleu avec image 3 et titre 2  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#aac5f4";  
$image = "image3.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera bleu avec image 3 et titre 3  
elseif ($_COOKIE['DESIGN'] == "bleu" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#aac5f4";  
$image = "image3.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera rouge avec image 1 et titre 1  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#fbbda8";  
$image = "image1.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera rouge avec image 2 et titre 1  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#fbbda8";  
$image = "image2.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera rouge avec image 3 et titre 1  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#fbbda8";  
$image = "image3.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera rouge avec image 1 et titre 2  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#fbbda8";  
$image = "image1.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera rouge avec image 1 et titre 3  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#fbbda8";  
$image = "image1.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera rouge avec image 2 et titre 2  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#fbbda8";  
$image = "image2.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera rouge avec image 2 et titre 3  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#fbbda8";  
$image = "image2.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera rouge avec image 3 et titre 2  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#fbbda8";  
$image = "image3.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera rouge avec image 3 et titre 3  
elseif ($_COOKIE['DESIGN'] == "rouge" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#fbbda8";  
$image = "image3.jpg" ;  
$titre = ""titre3"";  
}  
 
 
// cas où le site sera vert avec image 1 et titre 1  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#badbb7";  
$image = "image1.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera vert avec image 2 et titre 1  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#badbb7";  
$image = "image2.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera vert avec image 3 et titre 1  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre1" )  
{  
$background = "#badbb7";  
$image = "image3.jpg" ;  
$titre = ""titre1"";  
}  
 
// cas où le site sera vert avec image 1 et titre 2  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#badbb7";  
$image = "image1.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera vert avec image 1 et titre 3  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image1" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#badbb7";  
$image = "image1.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera vert avec image 2 et titre 2  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#badbb7";  
$image = "image2.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera vert avec image 2 et titre 3  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#badbb7";  
$image = "image2.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le site sera vert avec image 3 et titre 2  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre2" )  
{  
$background = "#badbb7";  
$image = "image3.jpg" ;  
$titre = ""titre2"";  
}  
 
// cas où le site sera vert avec image 3 et titre 3  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image3" && $_COOKIE['DESIGN'] == "titre3" )  
{  
$background = "#badbb7";  
$image = "image3.jpg" ;  
$titre = ""titre3"";  
}  
 
// cas où le visite n'a pas choisi de couleur/image/titre (on affiche alors une par    défaut : le vert ; image1.jpg ; titre 1)  
else  
{  
$background = "#badbb7";  
$image = "image1.jpg";  
$titre = ""titre1"";  
}  
    }  
?>  
 
 
 
Un petit formulaire permettant de personnaliser le design du site, nous le ferons dans la page index.php  
 
Voici alors le code de la page index.php contenant ce formulaire:  
<?php  
// on inclut notre fichier de design  
include ('design.php');  
?>  
<html>  
<head>  
<title>Index du site</title>  
</head>  
 
<?php  
// on utilise les variables du fichier design.php pour pouvoir afficher le bon design suivant le cookie  
echo '<body bgcolor = "',$background,'">';  
echo '<img src = "',$image,'">';  
echo '$titre';  
 
?>  
<br /><br />  
Voici un formulaire permettant de personnaliser le design du site :<br />  
<!-- on affiche notre formulaire permettant de choisir le design du site -->  
<form action = "send_design.php" method = "post">  
<p><select name = "couleur">  
<option>bleu</option>  
<option>rouge</option>  
<option>vert</option></p>  
</select>  
<input type = "submit" value = "Modifier">  
<p><select name = "image">  
<option>image1</option>  
<option>image2</option>  
<option>image3</option></p>  
</select>  
<input type = "submit" value = "Modifier">  
<p><select name = "titre">  
<option>titre1</option>  
<option>titre2</option>  
<option>titre3</option></p>  
</select>  
<input type = "submit" value = "Modifier">  
</form>  
 
</body>  
</html>  
 
 
 
send_design.php enverra le cookie chez le client :  
<?php  
// on inclut toujours notre fichier de design  
include ('design.php');  
 
$expire=365*24*3600;  
// on envoie notre cookie de nom DESGIN (donc il sera utilisable via la variable $DESIGN) contenant la couleur, image et titres et  choisis (c'est-à-dire le contenu de la variable $couleur)  
setcookie ("DESIGN", $_POST['couleur'], $_POST['image'], $_POST['titre'] time() + $expire);  
?>  
<html>  
<head>  
<title>Changement de design</title>  
</head>  
 
<?  
// on utilise les variables du fichier design.php pour pouvoir afficher les bonnes couleurs suivant la couleur du cookie (ou bien la couleur par défaut si le cookie n'existe pas)  
echo '<body bgcolor = "',$background,'">';  
echo '<img src = "',$image,'">';  
echo '$titre';  
?>  
<br /><br />  
Vous avez choisi un site de couleur, image et titre :  
<?  
echo $_POST['couleur'];  
echo $_POST['image'];  
echo $_POST['titre'];  
?>  
<br /><br />  
<!-- on affiche notre formulaire permettant de revenir à l'accueil du site -->  
<form action = "index.php" method = "post">  
<input type = "submit" value = "Retour accueil">  
</form>  
 
</body>  
</html>


Message édité par teycir le 15-12-2006 à 16:45:07
mood
Publicité
Posté le 15-12-2006 à 16:27:40  profilanswer
 

n°1491962
skeye
Posté le 15-12-2006 à 16:28:38  profilanswer
 

ouch.[:pingouino]
je refuse de lire ça.[:roane]


Message édité par skeye le 15-12-2006 à 16:28:45

---------------
Can't buy what I want because it's free -
n°1491971
teycir
Posté le 15-12-2006 à 16:46:55  profilanswer
 

Donc là je corrige comme cela?
Est-ce qu'on peut faire plusieurs posts au sein d'un cookie?
 
<?php  
// on inclut toujours notre fichier de design  
include ('design.php');  
$expire=365*24*3600;  
// on envoie notre cookie de nom DESGIN (donc il sera utilisable via la variable $DESIGN) contenant la couleur, image et titres et  choisis (c'est-à-dire le contenu de la variable $couleur)  
setcookie ("DESIGN1", $_POST['couleur'], time() + $expire);  
setcookie ("DESIGN2", $_POST['image'], time() + $expire);  
setcookie ("DESIGN3", $_POST['titre'], time() + $expire);  
?>


Message édité par teycir le 15-12-2006 à 17:05:27
n°1491973
skeye
Posté le 15-12-2006 à 16:47:55  profilanswer
 

http://fr3.php.net/manual/fr/function.setcookie.php


---------------
Can't buy what I want because it's free -
n°1491975
skeye
Posté le 15-12-2006 à 16:52:57  profilanswer
 

(non parce-que c'est absolument n'importe-quoi, ce que tu fais là, hein...[:pingouino])


---------------
Can't buy what I want because it's free -
n°1491978
teycir
Posté le 15-12-2006 à 17:00:50  profilanswer
 

skeye a écrit :

(non parce-que c'est absolument n'importe-quoi, ce que tu fais là, hein...[:pingouino])


 
Comment faire donc pour transporter plusieurs posts au sein d'un cookie?
Faut-t-il faire un cookie par post (je veux obtenir couleur titre et image)?


Message édité par teycir le 15-12-2006 à 17:02:39
n°1491979
skeye
Posté le 15-12-2006 à 17:02:32  profilanswer
 

Plusieurs setcookie.
Et tu ne "transportes pas plusieurs posts", tu stockes des valeurs dans un cookie.


---------------
Can't buy what I want because it's free -
n°1491982
teycir
Posté le 15-12-2006 à 17:05:50  profilanswer
 

skeye a écrit :

Plusieurs setcookie.
Et tu ne "transportes pas plusieurs posts", tu stockes des valeurs dans un cookie.


 
Donc là je corrige comme cela?  
 
 
<?php    
// on inclut toujours notre fichier de design    
include ('design.php');    
$expire=365*24*3600;    
// on envoie notre cookie de nom DESGIN (donc il sera utilisable via la variable $DESIGN) contenant la couleur, image et titres et  choisis (c'est-à-dire le contenu de la variable $couleur)    
setcookie ("DESIGN1", $_POST['couleur'], time() + $expire);    
setcookie ("DESIGN2", $_POST['image'], time() + $expire);  
setcookie ("DESIGN3", $_POST['titre'], time() + $expire);  
?>


Message édité par teycir le 15-12-2006 à 17:06:01
n°1491986
skeye
Posté le 15-12-2006 à 17:10:11  profilanswer
 

...et pourquoi pas  

Code :
  1. setcookie ("couleur", $_POST['couleur'], time() + $expire);    
  2. setcookie ("image", $_POST['image'], time() + $expire);  
  3. setcookie ("titre", $_POST['titre'], time() + $expire);


 
tant qu'à faire? au moins ce serait un poil plus compréhensible...:o


---------------
Can't buy what I want because it's free -
n°1491988
vanadium
N° Atomique : 23
Posté le 15-12-2006 à 17:10:53  profilanswer
 

pourquoi ne pas serialiser ?
 

Code :
  1. $expire = 365 * 86400;
  2. $titre = isset($_POST['titre']) ? $_POST['titre'] : '';
  3. $couleur = isset($_POST['couleur']) ? $_POST['couleur'] : '';
  4. $image = isset($_POST['image']) ? $_POST['image'] : '';
  5. $designs = serialize(array('couleur' => $couleur, 'image' =>$image, 'titre' => $titre));
  6. setcookie('designs',$designs,time() + $expire);


 
Et pour récupérer le contenu du cookie :

Code :
  1. $designs = isset($_COOKIE['designs']) ? unserialize($_COOKIE['designs']) : array();
  2. // Affichage du titre par exemple
  3. echo $designs['titre'];


Message édité par vanadium le 15-12-2006 à 17:12:27
mood
Publicité
Posté le 15-12-2006 à 17:10:53  profilanswer
 

n°1491992
skeye
Posté le 15-12-2006 à 17:13:46  profilanswer
 

Pourquoi pas...mais il a pas intérêt à vouloir rajouter un truc dans son $designs un jour, sinon les gens qui ont un cookie valide vont avoir des surprises...[:dawa]
Je vois pas vraiment l'intérêt de sérialiser, là, autant faire un cookie pour chaque, mais si c'est plus verbeux...


---------------
Can't buy what I want because it's free -
n°1492003
teycir
Posté le 15-12-2006 à 17:26:12  profilanswer
 

skeye a écrit :

Pourquoi pas...mais il a pas intérêt à vouloir rajouter un truc dans son $designs un jour, sinon les gens qui ont un cookie valide vont avoir des surprises...[:dawa]
Je vois pas vraiment l'intérêt de sérialiser, là, autant faire un cookie pour chaque, mais si c'est plus verbeux...


 
Donc si fais 3 setcookie, la partie du code suivante n'est plus valable :
// cas où le site sera vert avec image 2 et titre 1  
elseif ($_COOKIE['DESIGN'] == "vert" && $_COOKIE['DESIGN'] == "image2" && $_COOKIE['DESIGN'] == "titre1" )    
{  
$background = "#badbb7";  
$image = "image2.jpg" ;  
$titre = ""titre1"";  
}  
 
Et il faudra la remplacer par? :
elseif ($_COOKIE['COULEUR'] == "vert" && $_COOKIE['IMAGE'] == "image2" && $_COOKIE['TITRE'] == "titre1" )
{  
$background = "#badbb7";  
$image = "image2.jpg" ;  
$titre = ""titre1"";  
}  
Je ne sais pas si la logique et la syntaxe est bonne?

n°1492005
vanadium
N° Atomique : 23
Posté le 15-12-2006 à 17:27:17  profilanswer
 

L'interêt de serialiser est que si jamais tu as envie de rajouter des choses dans le cookie et que tu ne serialises pas, tu vas devoir rajouter un nouveau setcookie.
 
Alors que si tu serialises, meme si ton array que tu serialises n'est pas forcément initialisé ici, il te suffit de rajouter clef => valeur dans l'array pour que la valeur soit automatiquement placée dans le cookie puisque l'array est serialisé.
 

n°1492006
skeye
Posté le 15-12-2006 à 17:31:16  profilanswer
 

Le reste de ton code est très laid...:(
Vraiment.[:pingouino]
 
On ne fera JAMAIS une suite de if/else de ce genre. Je ne comprends pas pourquoi tu ne mets pas directement tes valeurs dans tes cookies pour les relire ensuite...bref, tu aurais manifestement besoin pour commencer d'apprendre un peu à programmer...[:pingouino]


---------------
Can't buy what I want because it's free -
n°1492008
skeye
Posté le 15-12-2006 à 17:32:55  profilanswer
 

vanadium a écrit :

L'interêt de serialiser est que si jamais tu as envie de rajouter des choses dans le cookie et que tu ne serialises pas, tu vas devoir rajouter un nouveau setcookie.
 
Alors que si tu serialises, meme si ton array que tu serialises n'est pas forcément initialisé ici, il te suffit de rajouter clef => valeur dans l'array pour que la valeur soit automatiquement placée dans le cookie puisque l'array est serialisé.


 
oui, mais à la désérialisation il se passe quoi si dans le cookie sérialisé auparavant il te manque une valeur?[:pingouino]
Tu vas vouloir utiliser un indice de tableau qui n'existe pas, derrière...il faut rajouter des contrôles un peu partout, dans ce cas, c'est le bordel...:o


---------------
Can't buy what I want because it's free -
n°1492012
vanadium
N° Atomique : 23
Posté le 15-12-2006 à 17:36:52  profilanswer
 

Je te retourne la question :  
il se passe quoi si le cookie que tu es censé avoir mis n'existe pas ?
 
Il se passe exactement la meme chose que si ton cookie specifique à la valeur n'a pas été crée sur le cookie sur la machine du visiteur. Ta remarque n'est donc pas pertinente puisque le probleme se retrouve aussi bien dans ton modele que dans le mien.

n°1492014
skeye
Posté le 15-12-2006 à 17:37:55  profilanswer
 

vanadium a écrit :

Je te retourne la question :  
il se passe quoi si le cookie que tu es censé avoir mis n'existe pas ?
 
Il se passe exactement la meme chose que si ton cookie specifique à la valeur n'a pas été crée sur le cookie sur la machine du visiteur. Ta remarque n'est donc pas pertinente puisque le probleme se retrouve aussi bien dans ton modele que dans le mien.


non.
Quand tu lis un cookie tu testes forcément son existance. Dans ton cas le cookie existe, c'est son contenu qui est mauvais.


---------------
Can't buy what I want because it's free -
n°1492028
vanadium
N° Atomique : 23
Posté le 15-12-2006 à 17:45:52  profilanswer
 

vanadium a écrit :

Je te retourne la question :  
il se passe quoi si le cookie que tu es censé avoir mis n'existe pas ?
 
Il se passe exactement la meme chose que si ton cookie specifique à la valeur n'a pas été crée sur le cookie sur la machine du visiteur. Ta remarque n'est donc pas pertinente puisque le probleme se retrouve aussi bien dans ton modele que dans le mien.


 

skeye a écrit :

non.
Quand tu lis un cookie tu testes forcément son existance. Dans ton cas le cookie existe, c'est son contenu qui est mauvais.


 
 
Si tu n'ecris pas le test explicitement comme ceci, php ne le fera pas pour toi : :sarcastic:

Code :
  1. $couleur = isset($_COOKIE['couleur']) ? $_COOKIE['couleur'] : 'bleu';


 
De plus, dans mon cas le cookie n'existera pas puisque php va lever un notic "Undefined index" et retourner null. il est bien évident que dans ton cas comme dans le mien, il sera plus prudent de tester l'existence de l'index ( que ce soit de mon tableau déserialisé ou du tableau $_COOKIE).
 
Autre chose, il s'agissait d'une question ouverte qui demandait autre chose comme réponse que "non".


Message édité par vanadium le 15-12-2006 à 17:46:41
n°1492055
skeye
Posté le 15-12-2006 à 18:59:40  profilanswer
 

non, tu ne vois pas ce que je veux dire.
Effectivement dans mon cas il faudra une ligne comme celle que tu donnes.
Dans ton cas c'est plus vicieux : mettons qu'il y ait un cookie 'design' dans lequel sont sérialisés la couleur et le titre.
Au bout de quelques semaines d'utilisation, tu veux ajouter l'image.
 
Problème :
 
Si tu le fais 'simplement', à la lecture ton $_COOKIE['design'] va exister, mais à la désérialisation il va manquer $design['image'].
Résultat, à l'utilisation il truc va te péter à la gueule à l'endroit où tu vas vouloir utiliser ton $design['image']. Et il n'y a pas vraiment de moyen simple de contourner ça.
 
Tandis qu'avec plusieurs cookies il te suffit de relire ton cookie comme tu le fais avec les autres (tu peux même t'amuser à stocker les valeurs attendues dans un tableau et à faire une boucle si tu tiens tant que ça à gagner quelques lignes de code).
 
Bref, comme je l'ai déjà dit ailleurs à un autre, l'idée est bonne, mais dans la pratique n'est pas souhaitable à mon avis.:o


---------------
Can't buy what I want because it's free -
n°1492065
vanadium
N° Atomique : 23
Posté le 15-12-2006 à 19:38:43  profilanswer
 

skeye a écrit :

non, tu ne vois pas ce que je veux dire.
Effectivement dans mon cas il faudra une ligne comme celle que tu donnes.
Dans ton cas c'est plus vicieux : mettons qu'il y ait un cookie 'design' dans lequel sont sérialisés la couleur et le titre.
Au bout de quelques semaines d'utilisation, tu veux ajouter l'image.
 
Problème :
 
Si tu le fais 'simplement', à la lecture ton $_COOKIE['design'] va exister, mais à la désérialisation il va manquer $design['image'].
Résultat, à l'utilisation il truc va te péter à la gueule à l'endroit où tu vas vouloir utiliser ton $design['image']. Et il n'y a pas vraiment de moyen simple de contourner ça.
 
Tandis qu'avec plusieurs cookies il te suffit de relire ton cookie comme tu le fais avec les autres (tu peux même t'amuser à stocker les valeurs attendues dans un tableau et à faire une boucle si tu tiens tant que ça à gagner quelques lignes de code).
 
Bref, comme je l'ai déjà dit ailleurs à un autre, l'idée est bonne, mais dans la pratique n'est pas souhaitable à mon avis.:o


 
D'une part, si ton cookie a une validité de plusieurs semaines juste pour des informations sur le design du site, alors c'est incorrect puisqu'il n'y a aucun interet à conserver ces informations autant de temps.
Ensuite, que ce soit $_COOKIE['image'] ou $design['image'] qui ne soit pas initialisé, l'erreur levée par PHP est exactement la même. Je tinvite à tester le code ci-dessous pour t'en convaincre :
 

Code :
  1. <?php
  2. $design = array('fleur' => 'lilas');
  3. echo $_COOKIE['image'];
  4. echo $design['image'];
  5. ?>


 
Et il n'y a pas de "tu le fais simplement" qui tienne. En effet, $_COOKIE a beau être une variable superglobale (réfère toi au manuel php pour de plus ample informations sur la définition de ce terme), $_COOKIE n'en demeure pas moins un tableau (array()) comme un autre.
Voici ce qui apparait à l'écran si tu executes le code ci-dessus :
 

Citation :


Notice: Undefined index: design in ... on line 4
 
Notice: Undefined index: image in ... on line 5


 
Cela confirme donc bien que ce que tu dis est faux : $_COOKIE['tonindex'] n'existe pas s'il n'est pas initialisé. Et le code ci-dessus te le démontre très clairement. :D
Maintenant que je t'ais démontré que tu avais tort, laisse moi préciser que pour toute variable récupérée de $_COOKIE, $_GET, $_POST, $_SESSION il est indispensable de faire ceci :
 

Code :
  1. // Un exemple
  2. $couleur = isset($_COOKIE['couleur']) ? $_COOKIE['couleur'] : 'bleu';


 
De manière générale, si l'on n'est pas sur de la valeur d'une variable récupérée ou que celle-ci provient d'un index d'une variable superglobale, il vaut mieux toujours se prémunir en prévoyant une assignation par défaut.
 
EDIT : j'oubliais le principal. Si tu as modifié ton programme comme tu le dis, que tu as conscience que des utilisateurs vont avoir des problèmes avec leur cookie mal initialisé et que tu n'as rien fait pour prévenir ce problème alors permet moi de te féliciter. :D

Message cité 1 fois
Message édité par vanadium le 15-12-2006 à 19:46:46
n°1492075
skeye
Posté le 15-12-2006 à 19:59:04  profilanswer
 

Tu n'as rien démontré du tout à part ton incapacité à comprendre ce que j'essaie de te faire rentrer dans le crane.[:pingouino]
Et arrête d'essayer de me donner des cours sur un langage que je pratique pour le boulot depuis plusieurs années, c'est agaçant.[:marc]

 

1) Ses cookies sont valides un an, si je lis bien son code. Ca se défend.
2) Oui, comme je l'ai déjà confirmé, il faut tester le contenu de $_COOKIE avant de s'en servir, et mettre une valeur par défaut si l'indice n'est pas là.
3) Ta solution risque d'engendrer des choses comme celle-ci, si c'est plus clair:

 

A un instant t, l'utilisateur change ses préférences, on enregistre :

Code :
  1. setcookie('design', serialize(array('couleur'=>'bleu', 'titre'=>'truc')));
 

à t+1, l'auteur du site veut ajouter l'image dans le design.

 

à t+2 l'utilisateur revient, on veut récupérer le contenu du cookie :

 
Code :
  1. $design = isset($_COOKIE['design']) ? unserialize($_COOKIE['design']) : array('bleu', 'truc', 'monimage');
  2.  
  3. $montemplate->assign('image', $design['image']); //PLOUF, undefined index.
 

Avec une solution à plusieurs cookies, pas de soucis.
Avec cette solution, il faut tester l'existence de chaque indice de $design, même si $_COOKIE a bien un indice 'design'.

 

Tu comprends où je veux en venir maintenant ou bien t'es juste con pour le plaisir?[:opus dei]

Message cité 1 fois
Message édité par skeye le 15-12-2006 à 20:01:47

---------------
Can't buy what I want because it's free -
n°1492082
vanadium
N° Atomique : 23
Posté le 15-12-2006 à 20:22:47  profilanswer
 

skeye a écrit :

Tu n'as rien démontré du tout à part ton incapacité à comprendre ce que j'essaie de te faire rentrer dans le crane.
 

Code :
  1. $design = isset($_COOKIE['design']) ? unserialize($_COOKIE['design']) : array('bleu', 'truc', 'monimage');
  2.  
  3. $montemplate->assign('image', $design['image']); //PLOUF, undefined index.


 
Tu comprends où je veux en venir maintenant ou bien t'es juste con pour le plaisir?[:opus dei]


 
[mode skeye ON]non.[/mode skeye OFF]  :whistle: (en référence à ta réponse à ma question précédente)
 
Dans ton code il parait effectivement evident que tu as du mal à pondre du code php propre:
$design = array('bleu','truc','monimage') aura pour effet dans le cas par defaut d'initialiser $design[0] à 'bleu', $design[1] à 'truc' et je te laisse deviner la fin. :D
 
Je complète et corrige donc ton code :

Code :
  1. $designs = isset($_COOKIE['design']) ? unserialize($_COOKIE['design']) : array('couleur' => 'bleu', 'truc' => 'truc', 'image' => 'monimage');
  2.  
  3. // on a juste besoin d'un seul index, mieux vaut simplifier
  4. $image = isset($designs['image']) ? $designs['image'] : 'bleu';
  5.  
  6. // Cette mesure est par mesure de sécurité si l'on vient modifier le code plus tard
  7. // et que l'on ait pas fait attention à l'initialisation de $image
  8. if(!empty($image))
  9. {
  10.      $montemplate->assign('image', $image); // pas "PLOUF" !
  11. }
  12. else
  13. {
  14.   trigger_error('Error : assigning empty image');
  15. }


 
Par ailleurs, je te demanderais d'éviter de m'insulter. :jap:


Message édité par vanadium le 15-12-2006 à 20:24:54
n°1492147
skeye
Posté le 16-12-2006 à 10:57:55  profilanswer
 

C'est du code pondu en 30 secondes pour l'exemple...[:moule_bite]
Et ta 'correction' met en évidence ce que je voulais te faire dire depuis le début : tu as besoin de vérifier chaque champs ajouté à $design pour éviter les soucis, au final t'as des vérifications pas homogènes sur tous les champs...bref, c'est beaucoup d'emmerdes pour rien.:o


---------------
Can't buy what I want because it's free -
n°1492754
chani_t
From Dune
Posté le 18-12-2006 à 15:28:35  profilanswer
 

vanadium a écrit :

.. si ton cookie a une validité de plusieurs semaines juste pour des informations sur le design du site, alors c'est incorrect puisqu'il n'y a aucun interet à conserver ces informations autant de temps.
..


En même temps le seul cas dans lequel j'utiliserais un cookie avec une validité aussi longue serais pour une question de design...

n°1492761
skeye
Posté le 18-12-2006 à 15:33:06  profilanswer
 

chani_t a écrit :

En même temps le seul cas dans lequel j'utiliserais un cookie avec une validité aussi longue serais pour une question de design...


T'as pas beaucoup d'imagination.[:petrus75]
Regarde ce forum : ton login et le md5 de ton mot de passe sont dans un cookie, pour t'éviter de te ré identifier à chaque visite, par exemple.[:dawa]

Message cité 1 fois
Message édité par skeye le 18-12-2006 à 15:33:16

---------------
Can't buy what I want because it's free -
n°1492777
chani_t
From Dune
Posté le 18-12-2006 à 15:46:02  profilanswer
 

skeye a écrit :

T'as pas beaucoup d'imagination.[:petrus75]
Regarde ce forum : ton login et le md5 de ton mot de passe sont dans un cookie, pour t'éviter de te ré identifier à chaque visite, par exemple.[:dawa]


 
vi ils sont dans un cookie, mais il expire pas dans un an :D ;)...

n°1492796
skeye
Posté le 18-12-2006 à 15:56:37  profilanswer
 

chani_t a écrit :

vi ils sont dans un cookie, mais il expire pas dans un an :D ;)...


Il expirait pas tout court, il y a de ça quelque temps...[:joce]


---------------
Can't buy what I want because it's free -
n°1492807
chani_t
From Dune
Posté le 18-12-2006 à 16:12:11  profilanswer
 

skeye a écrit :

Il expirait pas tout court, il y a de ça quelque temps...[:joce]


A ben ok... ba j'aurais tendance à ne pas claquer un cookies de login avec un temps trés long... chais pas ... ça ne me parait pas super.

n°1492808
skeye
Posté le 18-12-2006 à 16:14:41  profilanswer
 

chani_t a écrit :

A ben ok... ba j'aurais tendance à ne pas claquer un cookies de login avec un temps trés long... chais pas ... ça ne me parait pas super.


C'est une façon de faire les choses...décider que l'utilisateur doit faire l'action de se déconnecter lui-même.[:spamafote]


---------------
Can't buy what I want because it's free -
n°1494151
nORKy
Grmmph...
Posté le 20-12-2006 à 13:40:53  profilanswer
 

Beh, moi, je vois la chose autrement
Pour les cookies, on stock un nom ; ex: 'design 1'
Et puis, on a a coté quelque part la représentation de design 1 (un fichier ini par exemple)
On a une fonction PHP du style  
getDesign($nom) qui mets des valeurs dans un tableau (il lit le ini)
Apres, on peut faire :
template->assign("DESIGN", getDesign("design 1" ));
 
Et dans son template par exemple
<body bgcolor="{$DESIGN.bodyBgcolor}">
 
etc..

n°1494158
skeye
Posté le 20-12-2006 à 13:43:38  profilanswer
 

sauf que t'as pas forcément envie de prédéfinir un nombre fixe de designs.:o
Si tu veux laisser une vraie possibilité de personnaliser à l'utilisateur ta solution ne tient pas debout...:o


---------------
Can't buy what I want because it's free -
n°1494162
nORKy
Grmmph...
Posté le 20-12-2006 à 13:45:41  profilanswer
 

Et en quoi on peut pas définir plusieurs design dans ma solution ?
Ma solution repose sur un identifiant, pas sur des valeurs enregistrés dans un cookie, je trouve au contraire que ma méthode repose sur un infinité de design

n°1494165
skeye
Posté le 20-12-2006 à 13:47:11  profilanswer
 

Non.
Ta solution oblige le développeur à prévoir un nombre fini de designs à l'avance.:o
Si tu veux permettre à ton utilisateur de mettre n'importe quelle valeur RGB comme couleur de fond, il se passe quoi? [:dawao]


---------------
Can't buy what I want because it's free -
n°1494176
nORKy
Grmmph...
Posté le 20-12-2006 à 13:52:30  profilanswer
 

skeye a écrit :

Non.
Ta solution oblige le développeur à prévoir un nombre fini de designs à l'avance.:o
Si tu veux permettre à ton utilisateur de mettre n'importe quelle valeur RGB comme couleur de fond, il se passe quoi? [:dawao]


 
beh, il se passe qu'il aurait la couleur de fond voulu  :pt1cable:  

n°1494178
skeye
Posté le 20-12-2006 à 13:53:57  profilanswer
 

nORKy a écrit :

beh, il se passe qu'il aurait la couleur de fond voulu  :pt1cable:


euh, non.
Tu irais remplir autant de fichiers ini qu'il y a de combinaisons RGB possibles?[:rofl]


---------------
Can't buy what I want because it's free -
n°1494182
nORKy
Grmmph...
Posté le 20-12-2006 à 13:56:13  profilanswer
 

skeye a écrit :

euh, non.
Tu irais remplir autant de fichiers ini qu'il y a de combinaisons RGB possibles?[:rofl]


 
Quelle idée de vouloir designer son site !! [:rofl]

n°1494183
skeye
Posté le 20-12-2006 à 13:58:34  profilanswer
 

nORKy a écrit :

Quelle idée de vouloir designer son site !! [:rofl]


Va falloir arrêter de boire entre midi et deux, hein...[:moule_bite]


---------------
Can't buy what I want because it's free -
n°1494189
FlorentG
Posté le 20-12-2006 à 14:04:07  profilanswer
 

nORKy a écrit :

Beh, moi, je vois la chose autrement
Pour les cookies, on stock un nom ; ex: 'design 1'
Et puis, on a a coté quelque part la représentation de design 1 (un fichier ini par exemple)
On a une fonction PHP du style  
getDesign($nom) qui mets des valeurs dans un tableau (il lit le ini)
Apres, on peut faire :
template->assign("DESIGN", getDesign("design 1" ));
 
Et dans son template par exemple
<body bgcolor="{$DESIGN.bodyBgcolor}">
 
etc..


Marrant, le fichier ini ressemble à un fichier CSS. Pourquoi vouloi utiliser genre un bgcolor qui date de la préhistoire ? [:johneh]  [:johneh]  Autant faire directement un CSS côté serveur correspondant à ce que veut le gars. Je pige pas pourquoi tu t'embêtes à tout refaire, pour finalement pondre de l'HTML-caca

n°1494233
nORKy
Grmmph...
Posté le 20-12-2006 à 14:43:00  profilanswer
 

FlorentG a écrit :

Marrant, le fichier ini ressemble à un fichier CSS. Pourquoi vouloi utiliser genre un bgcolor qui date de la préhistoire ? [:johneh]  [:johneh]  Autant faire directement un CSS côté serveur correspondant à ce que veut le gars. Je pige pas pourquoi tu t'embêtes à tout refaire, pour finalement pondre de l'HTML-caca


 
c'est pas à moi qu'il faut le dire alors ;-) Mais à l'auteur du sujet
Ca fait bien longtemps que je ne fais plus de 'HTML-caca'...
 

n°1494242
chani_t
From Dune
Posté le 20-12-2006 à 14:46:08  profilanswer
 

clair que suffit de créer un css avec les choix de l'utilisateurs...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  Formulaire de personnalisation de la page

 

Sujets relatifs
Récupérer le code VBA d'un formulaire AccessScript Formulaire
un scientillement sur page webformulaire de personnalisation
[Access] exporter un formulaire dans une "bibliothèque" externeFormulaire pour forum
Problème d'execution automatique de page htmlPeux t-on tester la presence d'un element d'un formulaire ?
Nombre de requete sql par page? 
Plus de sujets relatifs à : Formulaire de personnalisation de la page


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