Pages :
Bonjour,
Je suis nouvelle sur ce forum mais j'ai bien lu "tout ce qu'il y avait à lire pour les débutants"

Jai passé la soirée d'hier à essayer de résoudre mon problème de switcher (par moi-même et en cherchant sur ce forum).

D'une certaine façon, le tuto fonctionne mais... une erreur s'affiche dès que je clique sur un lien (??)

Voir l'exemple http://sicard.o.free.fr/skins/

Le message :
Warning: Cannot modify header information - headers already sent by (output started at /mnt/140/sda/2/b/sicard.o/skins/styles/styleswitcher.inc.php:1) in /mnt/140/sda/2/b/sicard.o/skins/styles/styleswitcher.inc.php on line 20

J'espère que des nouveaux regards m'apporteront la solution.

Cordialement.

PS : la piste du "S" est éliminée Smiley cligne

EDIT par Felipe: lien
Modifié par Felipe (15 Jan 2008 - 12:47)
Salut Odile du 13,
Odile du 13 a écrit :
Je remets le lien complet car le précédent pointe sur erreur 404.

C'est normal puisque ton lien est mal écrit Smiley cligne :

soit tu ne mets aucune balise [ url] [ /url]

soit tu mets [ url=http://www.monsite.com] monsite.com [ /url] (sans espaces)

Pour ce qui est du Warning, il t'indique que tu essaies d'utiliser la fonction PHP header alors que du code html a déjà été écrit avant : ce qui est interdit Smiley lol !

A+
Merci Heyoan

J'essaie ta "formule" :
exemple
ça marche !

Par contre, je ne comprends pas trop l'autre partie de ta réponse.
J'ai fait un copié collé du code du tuto.
J'ai seulement apporté la modif du charset (le tuto a : charset=utf-8 et moi : charset=iso-8859-1

Pourrais-tu avoir la gentillesse de me guider plus en détail.

En te remerciant
Et bien dans le tuto Style switcher la page index.php commence par ;
<?php
header('Content-type: text/html; charset=utf-8');
...
?>
puis est suivie par le code html <!DOCTYPE...

Cette fonction ne peut pas être utilisée si du code html a déjà été écrit avant, par exemple on ne peut pas faire :
<!DOCTYPE...
...
<body>
...
<?php
header('Content-type: text/html; charset=utf-8');
?>
...
</body>

Or c'est certainement ce qui est fait dans ton code Smiley langue !

Edit: d'ailleurs il suffit d'afficher la source de ta page pour s'en rendre compte : tu as
<title>Styleswitcher</title>


<!DOCTYPE 

Modifié par Heyoan (15 Jan 2008 - 12:43)
Administrateur
Bonjour et bienvenue, Smiley smile

pour ton problème de lien, le plus simple est de laisser le forum se débrouiller tout seul en ne mettant aucune balise. Et une fois que c'est OK, d'ÉDITer tes messages pour corriger l'erreur et permettre aux lecteurs de consulter la page dès le 1er message (plus la peine je viens de le faire, mais c'est pour information) Smiley cligne
Encore merci Heyoan

Mon fichier index.php comporte bien ce code (la seule modif par rapport au tuto est le charset) :

a écrit :

<?php
header('Content-type: text/html; charset=iso-8859-1');
require_once './styles/styleswitcher.inc.php';
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Styleswitcher</title>
<link rel="stylesheet" media="screen, projection" type="text/css" id="css" href="<?php echo $url; ?>" />
</head>

<body>
<ul id="styleswitcher">
<li><a href="<?php echo $actuel; ?>?style=automne">Automne</a></li>
<li><a href="<?php echo $actuel; ?>?style=ete">Eté </a></li>
<li><a href="<?php echo $actuel; ?>?style=hiver">Hiver </a></li>
<li><a href="<?php echo $actuel; ?>?style=printemps">Printemps </a></li>

</ul>
</body>
</html>


Ce qui s'affiche ensuite et que l'on trouve dans la source, est sûrement généré par le code php de début (???)
Je suis de plus en plus perdue... d'autant plus que tout fonctionne très bien chez 1and1 (???)
exemple ici
...alors que la source mentionne aussi : <title>Styleswitcher</title>
à la place du code php...
Mais il me semble avoir "entendu dire" que le php ne "se comportait" pas de la même manière selon les hébergeurs (??)

A+
Felipe a écrit :
Bonjour et bienvenue, Smiley smile

pour ton problème de lien, le plus simple est de laisser le forum se débrouiller tout seul en ne mettant aucune balise. Et une fois que c'est OK, d'ÉDITer tes messages pour corriger l'erreur et permettre aux lecteurs de consulter la page dès le 1er message (plus la peine je viens de le faire, mais c'est pour information) Smiley cligne


Merci pour ton accueil Felipe.
J'ai eu un petit problème pour l'utilisation des balises URL mais ça y est, j'ai compris d'où venait mon erreur.

A+
Odile du 13 a écrit :
d'autant plus que tout fonctionne très bien chez 1and1 (???)
Mais il me semble avoir "entendu dire" que le php ne "se comportait" pas de la même manière selon les hébergeurs (??)

Ce qui peut varier d'un hébergeur à l'autre ce sont les paramètres de PHP. Par exemple, je soupçonne 1and1 de ne pas afficher les erreurs de type warning (avertissement) Smiley murf ...

Cela dit, d'où vient le <title>Styleswitcher</title> ?

A priori de styleswitcher.inc.php...

Pourrais-tu montrer le code de ce fichier ?
Ca pourrait bien être ça...

Voici le code du fichier styleswitcher.inc.php
J'enlève le nom de la page, je mets en ligne et j'essaie

a écrit :
<title>Styleswitcher</title><?php
function construire_url($dossier)
{
return 'http://sicard.o.free.fr/skins/styles/' . htmlspecialchars($dossier) . '/style.css';
}

$dossiers = array(
'automne',
'ete',
'hiver',
'printemps'
);

$actuel = htmlspecialchars($_SERVER['PHP_SELF']);
$new_style = (isset($_GET['style'])) ? $_GET['style'] : '';
$cookie_style = (isset($_COOKIE['style'])) ? $_COOKIE['style'] : '';

if(in_array($new_style, $dossiers, true))
{
setcookie('style', $new_style, time() + (365 * 24 * 3600));
$url = construire_url($new_style);
}

else if(in_array($cookie_style, $dossiers, true))
{
$url = construire_url($cookie_style);
}

else
{
$url = construire_url($dossiers[0]);
}
?>



Merci pour ton aide
Bingo, c'est bien ça.
Encore merci Heyoan.
Dire que je l'avais sous le nez puisque j'avais repéré que "styleswitcher" s'affichait sur ma barre de navigateur et je me demandais pourquoi...

Bon, maintenant je voudrais passer aux choses "sérieuses" Smiley biggrin

J'ai réussi à intégrer ce switcher à ma présentation css mais je voudrais aller plus loin en utilisant une combo list pour le choix.
Mais je ne connais pas le code pour faire une action href dans un formulaire.

Voici un exemple de ce que je sais faire avec un formulaire :
a écrit :
<form name="form1">
<div align="center">
<select name="menu_audio" onChange="MM_jumpMenu('parent',this,0)" class="form">
<option selected>Choisissez votre musique</option>
<option value="audio_noel/divin_enfant_32sec.mid">Divin enfant - 32"</option>
<option value="audio_noel/jinglebells_38sec.mid">Vive le vent - 38"</option>
<option value="audio_noel/mon_beau_sapin_1min52.mid">Mon beau sapin - 1'52"</option>
<option value="audio_noel/petit_papa_noel_3min38.mid">Petit Papa Noël - 3'38"</option>
<option value="audio_noel/sainte_nuit_2min19.mid">Sainte Nuit - 2'19"</option>
</select>
</div>
</form>


A toutes fins utiles, je "travaille" avec Dreamweaver 8.

Si quelqu'un peut me guider, ce serait super !


PS : édition pour corriger une "grosse" faute de grammaire !!
Modifié par Odile du 13 (15 Jan 2008 - 15:22)
Re',

la version simplifiée devrait donner quelque chose comme ça :
<form action="<?php echo $actuel; ?>" method="get">
<select name="style">
<option value="automne">Automne</option>
<option value="ete">Eté</option>
<option value="hiver">Hiver</option>
<option value="printemps">Printemps</option>
</select>
<input type="submit" />
</form>

Sinon au passage, le code généré par Dreamweaver en mode création est au mieux assez vilain et au pire inaccessible... donc autant s'en passer Smiley cligne !
Modifié par Heyoan (15 Jan 2008 - 20:22)
Encore merci Heyoan !

Tout marche nickel chrome Smiley biggrin

Pour poursuivre... :
Est-ce qu'il y a moyen de sélectionner directement sans avoir à cliquer sur "envoyer" ?
Et aussi, sans vouloir abuser Smiley cligne
Est-ce qu'il serait possible que l'affichage reste sur le style choisi ?
Ici, une fois validé, l'affichage revient sur le premier choix ("automne" en l'occurence).

Rien de bien vital, mais juste pour le plaisir Smiley smile
Pour ce qui est de sélectionner directement sans avoir à cliquer sur "envoyer" ? on peut le faire en rajoutant onchange="submit();" dans la balise select. Cela dit il faut tout de même garder le bouton submit pour ceux qui n'ont pas javascript ou qui naviguent au clavier Smiley murf .

Et sinon pour le plaisir :
[b]index.php[/b]

<?php
header('Content-type: text/html; charset=iso-8859-1');
require_once './styles/styleswitcher.inc.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
					  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<title>Styleswitcher</title>
		<link rel="stylesheet" media="screen, projection" type="text/css" id="css" href="<?php echo $url; ?>" />
	</head>

<body>
<form action="<?php echo $actuel; ?>" method="get">
	<p><select name="style" onchange="submit();">
		<?php
		for ($i = 0; $i < count($dossiers); $i++) {
			$chk = ($dossiers[$i] == $_ENV['dossier']) ? ' selected="selected"' : '';
			echo '<option value="'.$dossiers[$i].'"'.$chk.'>'.$libelles[$i].'</option>'."\n\t\t";
		} ?>
	</select>
	<input type="submit" value="OK" /></p>
</form>
</body>
</html>


[b]styleswitcher.inc.php[/b]

<?php
function construire_url($dossier)
{
	$_ENV['dossier'] = $dossier;
	return 'http://sicard.o.free.fr/skins/styles/' . htmlspecialchars($dossier) . '/style.css';
}

$dossiers = array(
'automne',
'ete',
'hiver',
'printemps'
);


$libelles = array(
'Automne',
'Eté',
'Hiver',
'Printemps'
);

$actuel = htmlspecialchars($_SERVER['PHP_SELF']);
$new_style = (isset($_GET['style'])) ? $_GET['style'] : '';
$cookie_style = (isset($_COOKIE['style'])) ? $_COOKIE['style'] : '';

if(in_array($new_style, $dossiers, true))
{
	setcookie('style', $new_style, time() + (365 * 24 * 3600));
	$url = construire_url($new_style);
}

else if(in_array($cookie_style, $dossiers, true))
{
	$url = construire_url($cookie_style);
}

else
{
	$url = construire_url($dossiers[0]);
}
?>

A+ Smiley cligne
Modifié par Heyoan (17 Jan 2008 - 02:57)
Heyoan a écrit :
Pour ce qui est de sélectionner directement sans avoir à cliquer sur "envoyer" ? on peut le faire en rajoutant onchange="submit();" dans la balise select. Cela dit il faut tout de même garder le bouton submit pour ceux qui n'ont pas javascript ou qui naviguent au clavier Smiley murf .

Et sinon pour le plaisir : [...]
A+ Smiley cligne

Ouf !
Merci Heyoan
J'ai apporté la modif sur "onchange"
Pour le reste, j'essaie de tester ce soir, sinon demain.

A+
Tout marche impécable !!
Je termine quelques petits trucs et je mets un lien vers le site en question.
Il s'agit en fait de mon CV.

Grand merci Heyoan pour toute ton aide !
Tu m'a été d'un grand "secours"

A+



Résolu
Modifié par Odile du 13 (16 Jan 2008 - 10:57)
Odile du 13 a écrit :
Grand merci Heyoan pour toute ton aide !
Tu m'a été d'un grand "secours"

Tu es la bienvenue Smiley cligne !

Sinon je me rends compte que j'avais oublié un espace avant selected (corrigé dans le code au dessus) qui rend ta page invalide Smiley scared Smiley ravi !!!


Bonne continuation...
Heyoan a écrit :

Tu es la bienvenue Smiley cligne !

Sinon je me rends compte que j'avais oublié un espace avant selected (corrigé dans le code au dessus) qui rend ta page invalide Smiley scared Smiley ravi !!!


Bonne continuation...


J'avais vu la non validation mais je n'avais pas compris le pourquoi du comment !! Merci d'avoir rectifié.
Toutes mes pages sont validées XHTML transitionnal sauf une à cause des listes à puces et je ne comprends pas pourquoi (??)
Au départ, j'avais mis <ol> à la place du second <ul> mais c'était pire...
On peut voir la "non-validation"
ici
Les balises me semblent bien ouvertes et fermées.
Serait-ce un problème d'imbrication (??)
<ul>
    <li>1989-90 : </li>
    <li>1990-91 : </li>
    <li>1991-94 : </li>
    <li>1995-96 : </li>
	<ul>
	  <li></li>
	  <li></li>
	  <li></li>
	  <li></li>
	</ul>
	<li>1997-01 : </li>
  </ul>


Encore merci.
Odile du 13 a écrit :
Serait-ce un problème d'imbrication (??)

Oui ! Tu ne peux pas mettre directement un <ul> dans un autre <ul>. Il faut donc faire :
<ul>
	<li>1989-90 : </li>
	<li>1990-91 : </li>
	<li>1991-94 : </li>
	<li>1995-96 : 
		<ul>
		<li></li>
		<li></li>
		<li></li>
		<li></li>
		</ul>
	</li>
	<li>1997-01 : </li>
</ul>

Ciao
Pages :