Pages :
Bonjour les amis

Ce tutoriel me plait bien mais j'éprouve des difficultés à le refaire.
J'ai donc insérer la partie du code XHTML dans ma page en l'adaptant correctement.

Mais voilà, je ne comprends pas où l'on insère tout le code PHP.
Doit on l'insérer dans la même page? Doit on créer une nouvelle page? Je suis complètement perdu...

Merci d'avance les amis
skapout a écrit :
Bonjour les amis

Ce tutoriel me plait bien mais j'éprouve des difficultés à le refaire.
J'ai donc insérer la partie du code XHTML dans ma page en l'adaptant correctement.

Mais voilà, je ne comprends pas où l'on insère tout le code PHP.
Doit on l'insérer dans la même page? Doit on créer une nouvelle page? Je suis complètement perdu...

Merci d'avance les amis


Lu dans le tutoriel Smiley eek :
Olivier a écrit :

Le code PHP
[... ]
Nota Bene Il faut placer le script en tout début de page, il faut que rien ne soit affiché avant la création du cookie, donc en haut de page et il n'y aura pas de soucis.
Bonjour à tous Smiley smile

Igor, ça c'est juste pour une partie du php, pas pour l'ensemble, hors il y a 2 parties à insérer en php. Je repose donc la question. Est ce que ces 2 parties en php doivent être insérées dans la même page php ou bien est ce qu'au moins une d'entre elle doit être insérée dans une autre page php comme par exemple pour la partie qui post dans le formulaire, est ce que la page décrite dans action doit être une autre page ou bien peut on rappeler la page actuelle.

J'ai suivi le tuto (et même les deux), je l'ai relu une dizaine de fois, j'ai fais une recherche "switcher" sur tout le forum avec aucune limite de temps et j'ai lu tous les messages. Il semblerait que d'autres personnes aient eu le même problème que moi seulement bien souvent ne sont pas donnés les détails de la résolution ou alors elles sont dispercées de ci de là rendant la compréhension difficile

J'ai tout inséré dans la même page mais j'avoue avoir du mal à voir tout ce qu'il faut remplacer ou laisser tel quel (merci de ne pas me renvoyer sur le site de phpdebutant, cela n'a rien à voir, je connais mes bases en php et pour changer une roue de voiture on a pas besoin de savoir démonter un moteur Smiley biggol )

J'ai du créé deux dossiers à la racine du site (quand ça marchera je mettrais ces deux dossiers dans un même autre dossier) et je les ai nommé de la même façon que la valeur "value" qui est utilisée dans le formulaire. Dans ces deux dossiers se trouvent un style.css (chacun)

Le code je l'ai inséré dans une page qui content tous les entêtes et pieds de pages de mon site (miseenpage.php)

J'ai inséré ce code en tout début de page (même avant la balise <html>)


<?php
if(isset($_POST['change_style']))
// On vérifie que le formulaire a été soumis
{
if(file_exists("./skins/".$_POST['style']."/style.css"))
{
// On fait un cookie d'une année de durée pour garder en mémoire le style choisi et le récupérer à la prochaine visite

setcookie('style', $_POST['style'], time()+(365*24*3600), "/") ;
// Si le fichier *.css existe on définit une variable $css correspondant au style choisi
$css = $_POST['style'] ;
}
}
elseif(isset($_COOKIE['style']))
// Si le formulaire n'a pas été soumis, on vérifie si le cookie style existe et si tel est le cas on définit une variable $css correspondant à ce style
{
$css = $_COOKIE['style'] ;
}
else
// Si le cookie n'existe pas et que le formulaire n'a pas été soumis, on définit une variable $css correspondant au style par défaut, ici un_style.css par exemple
{
$css = "defaut" ;
}
?>


J'ai inséré cet autre code juste avant de fermer la partie <head> donc avant </head>


	<?php
	echo "		<style type=\"text/css\" media=\"screen\">\n" ;
	echo "			@import url(".$css."/style.css) ;\n" ;
	echo "		</style>\n" ;
	?>


Quant à la partie non php, celle du formulaire, je l'ai insérée tout bêtement à l'endroit ou je voulais voir mon formulaire apparaître (mais toujours dans la même page)


<div id="style_switcher">
   <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
      <fieldset>
         <legend>Choisissez un th&egrave;me</legend>
            <select name="style">
	       <option value="defaut" selected="selected">D&eacute;faut</option>
               <option value="halloween">Halloween</option>
	    </select>
         <input type="submit" name="change_style" value="Changer le style" />
      </fieldset>
   </form>
</div>


et voilà le résultat ICI Smiley rolleyes (même le style par défaut il me le prend pas). C'est là que je me demande s'il ne faut pas mettre la seconde partie en php dans une autre feuille. Je suis paumé en gros et je pense que je m'en serais sorti si qq'un avait posté le code avec ses éléments modifiés dedans (ses values et ses noms de css en précisant où sont situés ses dossiers), mais je n'ai rien trouvé de tel
Modifié par Brainwasher (26 Oct 2005 - 10:48)
et dans une des "solutions" qu'un forumeur avait expliqué, il avait rajouté un ";"

dans <?php $_SERVER['PHP_SELF']; ?> ce que j'ai fait mais ça n'a rien changé
Je suis allé plus loin dans les tests (je n'avais pas pensé à afficher des commentaires pour voir l'avancement)

Voici les modifs :


<?php
if(isset($_POST['change_style']))
// On vérifie que le formulaire a été soumis
{
	print"Formulaire soumis<br>";
	if(file_exists("./".$_POST['style']."/style.css"))
	{
		// On fait un cookie d'une année de durée pour garder en mémoire le style choisi et le récupérer à la prochaine visite
		print"Cookie réalisé<br>";
		setcookie('style', $_POST['style'], time()+(365*24*3600)) ;
		// Si le fichier *.css existe on définit une variable $css correspondant au style choisi
		print"Le fichier css existe on créé sa variable<br>";
		$css = $_POST['style'] ;
		print"Le thème choisi est &css<br>";
	}
}
elseif(isset($_COOKIE['style']))
// Si le formulaire n'a pas été soumis, on vérifie si le cookie style existe et si tel est le cas on définit une variable $css correspondant à ce style
{
	print"Formulaire non soumis<br>";
	$css = $_COOKIE['style'] ;
}	
else
// Si le cookie n'existe pas et que le formulaire n'a pas été soumis, on définit une variable $css correspondant au style par défaut, ici un_style.css par exemple
{
	print"Cookie n'existe pas<br>";
	$css = "defaut" ;
	print"Par défaut on prendra $css<br>";
}
?>


Et voici ce que ça m'affiche


Cookie n'existe pas
Par défaut on prendra defaut


lorsque j'édite le code de ma page htm, je trouve ça dans l'appele du css


		<style type="text/css" media="screen">
			@import url(/style.css) ;
		</style>


Alors que ma variable $css possède bien la valeur "defaut" comme mon traçage l'a affiché un peu au dessus, comment se fait il que mon @import url n'ai rien avant /styls.css il devrait en toute logique avoir defaut/style.css

un grand merci d'avance pour vos lumières
Modifié par Brainwasher (26 Oct 2005 - 12:06)
Lorsqu'en revanche, (comme celui par défaut ne fonctionne pas) je choisie un thème dans le formulaire et que je le validen mon traçage change mais mon css n'est toujours pas pris en compte

Voici ce que ça donne (et la valeur de ma variable &css nulle)

Formulaire soumis
Cookie réalisé

Warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/e/8/mwnn/miseenpage.php:5) in /var/www/free.fr/e/8/mwnn/miseenpage.php on line 10
Le fichier css existe on créé sa variable
Le thème choisi est &css
Je me sens tout seul Smiley bawling

edit : y'a pas un souci avec les sites hébergés chez free pour ce style de pratique cookie/php/switcher ?
Modifié par Brainwasher (26 Oct 2005 - 15:06)
j'ai vraiment l'impression que le problème vient de <?php $_SERVER['PHP_SELF']; ?>

y'a t il des hébergeurs qui auraient un problème avec ça ?
Bonjour,

J'ai eu le même genre d'erreur que toi (header already sent): il faut faire très attention à ne laisser aucun espace entre le haut de ta page et ton code php (ni aucune balise html avant le php)...une fois ce point réglé chez moi ça marche (au moins en local, mais je n'ai pas encore essayé chez Free)
Bonne chance Smiley cligne

edit: Sinon tu as probablement un problème de chemin pour aller chercher tes css. De mémoire, tel que le tuto est fait, il te faut créer deux sous dossiers "halloween" et "défaut", dans chacun tu places la feuille de style correspondante en appelant tes 2 feuilles par le même nom "style.css"...ça devrait marcher, je n'ai pas eu à modifier le tuto sauf les noms des styles bien sûr. Je te conseille d'abord de tester en local (sous easyphp ou wamp par ex) avant de tester chez ton hébergeur
Modifié par zanzibar (26 Oct 2005 - 18:01)
c'est déjà vérifié et mis en place tout ça malheureusement Smiley decu

rien y fait, pour l'erreur header j'avais mis un commentaire pour tracer mais comme ça faisait l'erreur je l'ai viré. Pour le reste j'ai tout testé / tenté, j'ai suivi différents site qui expliquement le switcher (dont un en anglais trouvé ici sur ce site) mais rien y fait. Là à force de modifications ça me prend un style par défaut (mais ça correspond plus trop au tuto) mais ça n'en change pas quand j'en choisi un autre. Autrement dit, c'est le bide absolu.

Merci quand même pour ton aide Smiley cligne
Ne te décourage pas c'est sûrement un pb tout bête, va prendre l'air et reprend ça plus tard! Smiley cligne apparemment tes morceaux de php sont bien placés là où il faut, le premier en tout début de page, les quelques lignes pour importer la feuille à la place de ta ligne @import ou link rel d'origine et le formulaire où tu le souhaites dans ta page...
une différence avec mon code c'est que j'ai utilisé link rel au lieu de @import mais les 2 devraient fonctionner:
    
<?php
echo "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\"   href=\"".$css."/style.css\" />\n" ;
?>

Modifié par zanzibar (26 Oct 2005 - 18:19)
j'ai testé les deux, ça donne le même résultat. Ma page reçoit mon css (je l'ai vu grace à mes print un peu partout dans le code php qui gère le cookie, mais elle ne prend pas le css choisi pour l'affichage.

Si y'a moyen que tu me donnes tout ton code avec les emplacements exactes (et tes véritables value) alors je pourrais le comparer avec le mien

merci d'avance et merci pour l'encouragement Smiley smile
j'aurais bien aimé avoir l'avis d'un l'expert svp.

compte tenu de mes différents tests n'aboutissants à rien, je remet en l'état de mon énoncé
Salut,

Laisse moi un moment pour comparer ton code au mien, j'essaierai de te poster les parties utiles, as tu fait un essai en local comme je te l'avais suggéré?
Bon alors en tête de page j'ai:
<?php
  if(isset($_POST['change_style']))
  {
	if(file_exists("./".$_POST['style']."/style.css"))
	{
	setcookie('style', $_POST['style'], time()+(365*24*3600)) ;
	$css = $_POST['style'] ;
	}
  }
  elseif(isset($_COOKIE['style']))
  {
	$css = $_COOKIE['style'] ;
  }	
  else
  {
	$css = "style" ;
  }
?>
ensuite dans le head j'ai
<?php
  echo "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"".$css."/style.css\" />\n" ;
?>
et enfin comme formulaire j'ai
<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<p>
  <select name="style">
	  <option value="style" selected="selected">style1</option>
		<option value="stylecarre">style2</option>
  </select>
	<input type="submit" name="change_style" value="Changer le style" />
</p>
</form>
mes 2 styles s'appellent styles.css et sont placés dans deux dossiers "style" et "stylecarre"...et tout ça fonctionne en local au moins je viens de vérifier Smiley smile Bonne chance (sorry pas le temps de vérifier en détail par rapport au tien)
Modifié par zanzibar (27 Oct 2005 - 10:23)
zanzibar a écrit :
Salut,

Laisse moi un moment pour comparer ton code au mien, j'essaierai de te poster les parties utiles, as tu fait un essai en local comme je te l'avais suggéré?



en local non je n'ai pas de serveur local et je n'en ai jamais installé (alors je sais même pas comment faire du coup même si ça doit pas être trop dur)
t'es trop sympa (t'as vraiment pas à t'excuser pour ton temps de réponse, tu n'étais vraiment pas obligé de le faire), je teste tout ça en ligne pour le moment et pour le local faut vraiment que j'apprene à m'installer un serveur php mysql Smiley biggol
Modifié par Brainwasher (27 Oct 2005 - 14:58)
la misère, ça fait exactement pareil ! Je cherche un switcher man qui aurait son site chez free, ça doit bien exister quand même Smiley rolleyes

A la limite que la fonction php mail ne marche pas chez free, je comprend, mais là je ne vois pas pk ce style ne fonctionnerait pas Smiley decu J'suis un peu deg à vrai dire. Si le spécialiste du tuto passe dans le coin ça me ferait très plaisir d'avoir son avis là dessus Smiley ravi

Zanzibar encore merci pour ton aide, grâce à toi je vais arrêter de m'arracher les cheveux (m'en reste plus bcp d'ailleurs) en pensant que ça vient de mon hebergeur. Je vais tout de même chercher à installer un serveur en local (le tient c'est quoi ? Apache sous linux ou autre chose ?)
Je suis derrière toi brainwasher !
Moi aussi je me suis arraché les cheveux cette semaine à écouler tous les tutos de style switcher et ce même forum sans trouver pourquoi ça ne marchait pas sur mon serveur free.fr. Je vais finir par croire que ça vient de lui.
Ce problème de cannot modify header information est vraiment trop déroutant !
Pages :