je développe en ce moment une plateforme web dynamique grâce au framework PHP CodeIgniter et je souhaiterais que chaque utilisateur puisse personnaliser la couleur de son interface. Pour cela, je stocke sa couleur dans ma BDD sous le type "varchar(6)" et je tente d'y accéder via une feuille CSS dynamique mais cela ne fonctionne pas... Voici mon code CSS :
et cela fonctionne parfaitement (sauf que cela n'a rien de dynamique du coup...) xD
J'ai aussi testé que ma variable "$_SESSION['CouleurInterface']" existe bien en l'affichant en vrac dans la page PHP et elle existe bien avec la valeur que je lui ai donnée dans la BDD pour l'utilisateur (exemple : ff0000, je rajoute le "#" dans le code). Savez-vous d'où le problème peut venir ? J'ai bien cherché sur le net et pourtant avec les autres cela fonctionne x)
Merci d'avance
PS : Si vous avez besoin de davantage de code, demandez-moi car utilisant un framework MVC le code est étalé sur plusieurs fichiers et je ne voulais pas vous perdre
- Edité par tigerblue77 1 novembre 2017 à 18:20:33
Il me semble que ton problème semble venir de ta manière de concaténer ta variable. Je m'explique tu echo le # et ensuite tu echo ta variable contenant ta couleur.
Il me semble que ton problème semble venir de ta manière de concaténer ta variable. Je m'explique tu echo le # et ensuite tu echo ta variable contenant ta couleur.
Bonsoir Henri, merci de ta réponse rapide, je viens de tester et tes deux solutions ne fonctionnent pas, pour le double "echo" c'était un test de ma part et je viens d'éditer le message mais dans les deux cas cela ne fonctionne pas... Voici le code compilé (navigateur) :
C'est que ta variable n'existe pas, tu as dit que tu l'affiches correctement et quelle ne te semble pas vide ? D’où récupère tu cette couleur ?
Mon utilisateur se connecte, je récupère toutes ses données de la BDD (y compris la couleur qui est un attribut de ma table 'utilisateur') et les stocke comme variables de session. Lorsque j'ai testé l'affichage tout à l'heure, j'ai fais :
Il y a donc pas de raison que celle ci soit vide. Tu la test dans ton contexte. Essaie de print ta variable juste avant de l'utiliser car il doit y avoir un problème.
Il y a donc pas de raison que celle ci soit vide. Tu la test dans ton contexte. Essaie de print ta variable juste avant de l'utiliser car il doit y avoir un problème.
Bonsoir pas de soucis tu veux que je la print où ? car je l'ai déjà fais dans la page PHP utilisant le CSS en question et cela fonctionne. Comme je te disais, ma variable de session s'affiche bien en texte dans la page
Forcer le rechargement à chaque fois serait le mieux. Bien entendu ce n'est pas une merveilleuse solution vu que ça va demander énormément de ressources BDD pour recréer le CSS à chaque page. Le mieux serait un fichier de cache des CSS.
Forcer le rechargement à chaque fois serait le mieux. Bien entendu ce n'est pas une merveilleuse solution vu que ça va demander énormément de ressources BDD pour recréer le CSS à chaque page. Le mieux serait un fichier de cache des CSS.
Bonsoir, oui j'avais déjà testé en forçant le rafraîchissement, en fait c'est top lorsqu'on ne développe pas car un site ne change pas de look tous les jours en théorie
Et je viens de tester ça ne change rien malheureusement, merci tout de meme
J'aimerais vous donner accès directement au site et au code mais étant donné que je ne veux pas qu'on me copie ça va etre compliqué..
Mais rien a faire... cela ne fonctionne pas, il m'affiche toujours ma couleur constante (#0078D7)... (étonnant non ? Je démarre la session juste avant, il devrait entrer dans le "if" non ?)
J'ai testé en mettant le "session_start()" en commentaire, en me disant que le "if" prendrait en compte le "session_start()" que je fais dans la page php appelant le CSS et là surprise... Je n'ai ni la couleur du "if()" ni la couleur du "else" (la constante) ! Donc il détecte bien que ma session à démarré quelque part mais n'arrive pas a accéder a ses variables T_T ...
EDIT : Aurais-tu fais une erreur dans ton "if" ? Je dois mettre "sessionS_start()" ou "session_start()" ? Quand je mets "if(session_start())" il rentre dans le "if" meme quand je met "session_start()" en commentaire
Je viens de poster une demande en anglais directement sur le forum officiel du framework CodeIgniter, si eux-mêmes ne peuvent pas m'aider je suis réellement dans la mouise ^^'...
- Edité par tigerblue77 4 novembre 2017 à 17:25:46
Attention! la fonction session_start() fait le job (de starter une nouvelle session) mais si tu utilise une 2e fois la fonction dans ton if, comme tu l'a fait, c'est normal que le 2eme appel de cette fonction échoue tout le temps.
Il faut ajouter le bout de code que je t'ai proposé en début de code et avant le header.
Attention au cache créé automatiquement dans les frameworks !
Bonjour ! Je viens de tester ton code sur mon serveur, oui cela fonctionne tel quel mais dès que je l'applique avec la base de donnée et le framework ça ne veut plus je comprends pas...
Autre truc bizarre, le framework me refuse la fonction "random_int()" o_0
Bizarre tout ca...
pifou25 a écrit:
Attention! la fonction session_start() fait le job (de starter une nouvelle session) mais si tu utilise une 2e fois la fonction dans ton if, comme tu l'a fait, c'est normal que le 2eme appel de cette fonction échoue tout le temps.
Il faut ajouter le bout de code que je t'ai proposé en début de code et avant le header.
Effectivement j'avais des doutes là-dessus mais j'ai beau tout essayer il ne voit pas mes variables de session lorsque la session est démarrée grace au framework, pourtant aucun soucis d'accès depuis les vues/controlleurs/modèles...
Pourquoi tu ne veux pas mettre ton fichier de génération du css dans un dossier (views par exemple) ou tu auras accès aux fonctions de CodeIgniter ?
Tu créés un contrôleur avec une méthode qui va renvoyer la vue dynamique.css.php et dans cette vue si ta session est dans l'autoload.php pas besoin de session_start(), le FW l'aura chargé pour toi et tu auras accès aux variables session
- Edité par WillyKouassi 5 novembre 2017 à 23:17:11
random_int est une nouvelle fonction de php7, donc s'il ne reconnait pas, ton framework doit fonctionner sous une version plus ancienne.
juste par curiosité tu peux ajouter un var_dump($_SESSION) dans ton CSS et montrer le resultat?
Pas de soucis je vous fais ça dès que possible, désolé du retard
WillyKouassi a écrit:
Salut,
Pourquoi tu ne veux pas mettre ton fichier de génération du css dans un dossier (views par exemple) ou tu auras accès aux fonctions de CodeIgniter ?
Tu créés un contrôleur avec une méthode qui va renvoyer la vue dynamique.css.php et dans cette vue si ta session est dans l'autoload.php pas besoin de session_start(), le FW l'aura chargé pour toi et tu auras accès aux variables session
- Edité par WillyKouassi 5 novembre 2017 à 23:17:11
Salut, désolé j'ai pas compris grand chose, mes fichiers css sont dans asset/css et php dans asset/vues, les sessions sont accessibles partout normalement
J'aimerais voir comment fonctionnent les choses chez toi, la vue par exemple où tu appelles ton fichier css dynamique.. Tu dis aussi avoir testé $_SESSION['CouleurInterface'], je suppose que c'est en dehors du fichier css dynamique en question....
Bonsoir à tous, désolé encore du retard, la semaine dernière à été plutot chargée... Merci de votre compréhension
pifou25 a écrit:
random_int est une nouvelle fonction de php7, donc s'il ne reconnait pas, ton framework doit fonctionner sous une version plus ancienne.
juste par curiosité tu peux ajouter un var_dump($_SESSION) dans ton CSS et montrer le resultat?
Voici le résultat de mon css "compilé" lorsque j'ajoute var_dump($_SESSION)
body{
--second-color: #;
}
array(0) {
}
WillyKouassi a écrit:
J'aimerais voir comment fonctionnent les choses chez toi, la vue par exemple où tu appelles ton fichier css dynamique.. Tu dis aussi avoir testé $_SESSION['CouleurInterface'], je suppose que c'est en dehors du fichier css dynamique en question....
Voici ma vue où j'appelle mon fichier css dynamique :
Ce que je te conseille est de déplacer le fichier "couleurs-interface-utilisateur.php" dans le dossier "views" et dans ton contrôleur actuel ou un autre contrôleur tu crée une méthode qui va appeler cette vue là... Et là au lieu d'avoir base_url().'assets/......../couleurs-interface-utilisateur.php' tu auras une URL du genre site_url().'/x/couleurs' (je suppose que ton contrôleur s'appelle "X" et la méthode "couleurs" )
<?php
class X extends CI_Controller
{
public function couleurs()
{
$this->load->view('couleurs-interface-utilisateur');
}
}
Dans ce cas là tu auras accès aux sessions de ton application et aux fonctions de CodeIgniter dans le fichier couleurs-interface-utilisateur.php
- Edité par WillyKouassi 22 novembre 2017 à 9:29:55
Ce que je te conseille est de déplacer le fichier "couleurs-interface-utilisateur.php" dans le dossier "views" et dans ton contrôleur actuel ou un autre contrôleur tu crée une méthode qui va appeler cette vue là... Et là au lieu d'avoir base_url().'assets/......../couleurs-interface-utilisateur.php' tu auras une URL du genre site_url().'/x/couleurs' (je suppose que ton contrôleur s'appelle "X" et la méthode "couleurs" )
<?php
class X extends CI_Controller
{
public function couleurs()
{
$this->load->view('couleurs-interface-utilisateur');
}
}
Dans ce cas là tu auras accès aux sessions de ton application et aux fonctions de CodeIgniter dans le fichier couleurs-interface-utilisateur.php
- Edité par WillyKouassi il y a 17 minutes
Je pense que vous n'avez pas bien compris, "couleurs-interface-utilisateur.php" est en fait un fichier CSS ne contenant que ceci :
Ce n'est pas une vue donc je ne peux pas faire "load->view"... Son but est de créer une variable css qui sera utilisée dans mes autres feuilles css (cela fonctionne très bien en statique actuellement)
- Edité par tigerblue77 22 novembre 2017 à 9:51:02
C'est quoi le problème principal ? $_SESSION['CouleurInterface'] définit quelque part dans ton application n'est pas accessible dans le fichier couleurs....php, n'est-ce pas ? Sinon j'ai bien compris ta demande , je sais au départ que le fichier couleurs....php n'est pas une vue d'où le "déplacer" dans le views.
C'est quoi le problème principal ? $_SESSION['CouleurInterface'] définit quelque part dans ton application n'est pas accessible dans le fichier couleurs....php, n'est-ce pas ? Sinon j'ai bien compris ta demande , je sais au départ que le fichier couleurs....php n'est pas une vue d'où le "déplacer" dans le views.
Oui c'est cela, il n'est pas accessible dans le css qui est un fichier au format "php". D'accord je peux le déplacer sans problème mais ce que je disais c'est que je ne peux pas faire "load->view()" puisque ce n'est pas une vue, si ?
Ta session est vide dans le CSS. A mon avis la session est juste restreinte à l'url de base et elle n'est pas accessile dans ton fichier à l'url [url]/asset/css/
il doit y avoir un cookie SID lié au domaine et que php ne prend pas en compte dans le sous répertoire. Mais je ne sais pas si on peut configurer cela. Sinon pourquoi tu n'envoie pas la couleur dans l'url via une requête GET?
Tant qu'il est dans le dossier views (par défaut pour les vues), tu peux faire un load->view
Pas de soucis je ne savais pas, je vais essayer
pifou25 a écrit:
Ta session est vide dans le CSS. A mon avis la session est juste restreinte à l'url de base et elle n'est pas accessile dans ton fichier à l'url [url]/asset/css/
il doit y avoir un cookie SID lié au domaine et que php ne prend pas en compte dans le sous répertoire. Mais je ne sais pas si on peut configurer cela. Sinon pourquoi tu n'envoie pas la couleur dans l'url via une requête GET?
Car cette couleur est utilisée sur l'ensemble de la plateforme, ce serait ridicule, je pense, de faire un "GET" identique sur chaque page... Et puis à coder... Pourquoi pas un cookie ? Non ?
PHP retrouve la session en cours à l'aide d'un cookie justement; donc tu risque d'avoir le même problème avec ton cookie qu'avec ta session tu va le perdre. mais je suis d'accord c'est ridicule de passer par un param en GET, il doit bien exister une solution pour propager la session hors du répertoire des vues. (mais je ne sais pas laquelle).
PHP retrouve la session en cours à l'aide d'un cookie justement; donc tu risque d'avoir le même problème avec ton cookie qu'avec ta session tu va le perdre. mais je suis d'accord c'est ridicule de passer par un param en GET, il doit bien exister une solution pour propager la session hors du répertoire des vues. (mais je ne sais pas laquelle).
Héhé je suis content de voir que je ne dis pas que des bêtises visiblement même sur le forum codeigniter ils ne savent pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.