Plusieurs Cadres Includes - Comment garder les choix ?

Damien49
Invité n'ayant pas de compte PHPfrance

18 oct. 2005, 14:35

Bonjour

Je suis un ch'ti débutant en php (ca tombe bien je crois être dans la bonne rubrique)

J'ai une page php avec plusieurs cadres d'include php (6 pour être exacte). Pour chaque cadre, j'ai un menu qui donne plusieurs choix différents (donc plusieurs includes).

Voilà, mon probleème réside dans le fait que lorsque j'effectue un chois dans l'un des cadres, j'ai tous les autres cadres qui se rechargent au début.

Ce que je voudrais, c'est que si dans le cadre 3 par exemple j'ai fait le choix "bidule" et qu'après je vais dans le cadre 5 par exemple et que je fait dedans le choix "machin" et bien que mon cadre 3 reste sur "bidule"

Bref que les choix précédants de l'utilisateurs restent.

Si vous avez du mal à comprendre, je vous invite à tester ce que je viens de dire ici : http://www.meteobell.com/Test/_classification.php

Sinon voici mon code pour les 2 premiers cadres (pour le reste c le même principe a vrai dire)
<div id="classification">

<h1>Classification des Nuages</h1>



<div id="class_menu_01"><!--Les Menus-->

	<div class="class_element_menu">
		<h2>Classification Par Altitude</h2>
		<ul>
			<li><a href="_classification.php?cadre1=altitude#classification">Classification par Altitude</a></li>
			<li><a href="_classification.php?cadre1=haute_altitude#classification">Nuages de Haute Altitude</a></li>
			<li><a href="_classification.php?cadre1=moyenne_altitude#classification">Nuages de Moyenne Altitude</a></li>
			<li><a href="_classification.php?cadre1=basse_altitude#classification">Nuages de Basse Altitude</a></li>
			<li><a href="_classification.php?cadre1=altitude_vertical#classification">Nuages à Dévelloppement Verticaux</a></li>
		</ul>
	</div>

</div>



<div id="class_definition"><!--Code PHP  pour le cadre. Permet d'avoir un cadre différent par onglet, sans changer de page-->
						
	<?php 
	if (!isset($_GET['cadre1'])) $cadre1= 'altitude';
	else $cadre1= $_GET['cadre1']; 
	switch($cadre1)
	{
	case 'altitude': include ('Classification/Par Altitude/altitude.html');break;
	case 'haute_altitude': include ('Classification/Par Altitude/haute_altitude.html');break;
	case 'moyenne_altitude': include ('Classification/Par Altitude/moyenne_altitude.html');break;
	case 'basse_altitude': include ('Classification/Par Altitude/basse_altitude.html');break;
	case 'altitude_vertical': include ('Classification/Par Altitude/altitude_vertical.html');break;
	} 
	?>   	
</div>


<hr/>


<div id="class_menu_02"><!--Les Menus-->

	<div class="class_element_menu">
		<h2>Classification Par Genre</h2>
		<ul>
			<li><a href="_classification.php?cadre2=genre#class_menu_02">Classification par Genre</a></li>
			<li><a href="_classification.php?cadre2=cirrus#class_menu_02">Cirrus (Ci)</a></li>
			<li><a href="_classification.php?cadre2=cirrocumulus#class_menu_02">Cirrocumulus (Cc)</a></li>
			<li><a href="_classification.php?cadre2=cirrostratus#class_menu_02">Cirrostratus (Cs)</a></li>			
			<li><a href="_classification.php?cadre2=altocumulus#class_menu_02">Altocumulus (Ac)</a></li>
			<li><a href="_classification.php?cadre2=altostratus#class_menu_02">Altostratus (As)</a></li>
			<li><a href="_classification.php?cadre2=nimbostratus#class_menu_02">Nimbostratus (Ns)</a></li>
			<li><a href="_classification.php?cadre2=stratocumulus#class_menu_02">Stratocumulus (Sc)</a></li>
			<li><a href="_classification.php?cadre2=stratus#class_menu_02">Stratus (St)</a></li>
			<li><a href="_classification.php?cadre2=cumulus#class_menu_02">Cumulus (Cu)</a></li>
			<li><a href="_classification.php?cadre2=cumulonimbus#class_menu_02">Cumulonimbus (Cb)</a></li>
		</ul>
	</div>

</div>



<div id="class_definition"><!--Code PHP  pour le cadre. Permet d'avoir un cadre différent par onglet, sans changer de page-->
						
	<?php 
	if (!isset($_GET['cadre2'])) $cadre2= 'genre';
	else $cadre2= $_GET['cadre2']; 
	switch($cadre2)
	{
	case 'genre': include ('Classification/Par Genre/genre.html');break;
	case 'cirrus': include ('Classification/Par Genre/cirrus.html');break;
	case 'cirrocumulus': include ('Classification/Par Genre/cirrocumulus.html');break;
	case 'cirrostratus': include ('Classification/Par Genre/cirrostratus.html');break;
	case 'altocumulus': include ('Classification/Par Genre/altocumulus.html');break;
	case 'altostratus': include ('Classification/Par Genre/altostratus.html');break;
	case 'nimbostratus': include ('Classification/Par Genre/nimbostratus.html');break;
	case 'stratocumulus': include ('Classification/Par Genre/stratocumulus.html');break;
	case 'stratus': include ('Classification/Par Genre/stratus.html');break;
	case 'cumulus': include ('Classification/Par Genre/cumulus.html');break;
	case 'cumulonimbus': include ('Classification/Par Genre/cumulonimbus.html');break;
	} 
	?>   	
</div>

<hr/>
voili voila et merci si vous pouviez m'aider, parce que j'ai cherché et cherché sur google depuis hier sans jamais trouver la soluce.

Mammouth du PHP | 568 Messages

18 oct. 2005, 15:41

Penche toi sur les variables de sessions afin de conserver de page en page les éléments sélectionnés...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Damien49
Invité n'ayant pas de compte PHPfrance

18 oct. 2005, 16:09

Si compliqué que cela ?

Va falloir que j'identifie dans une base de données tous les utilisateurs ? C'est ça les variables de sessions je crois bien.

Mammouth du PHP | 983 Messages

18 oct. 2005, 16:13

Nan pas forcément. Une session te permet de garder des variables de page en page. Donc dans ton cas, il te faudrait une variable de session pour chaque pseudo cadre contenant la page à inclure. Ainsi, à chaque rechargement de la page, tu garderas les valeurs non modifiées par le choix de l'utilisateur.

Mammouth du PHP | 568 Messages

18 oct. 2005, 16:15

Non non... Les variables de sessions te permettent de transmettre des informations de page en page sans avoir à les transmettre à chaque...
Tu écris sur la page 1.php une variable session x=1...
tu vas sur la page 2.php puis 3.php... Si tu fais un echo de ta variable session x, il t'affichera 1, alors que tu n'as rien transmis (formulaire ou url)...

la variable sessions disparais au bout d'un certain ou à la fermeture des navigateurs...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Invité
Invité n'ayant pas de compte PHPfrance

18 oct. 2005, 16:25

Bon c un ch'ti peu compliqué pour moi. Va falloir que je me plonge dans des tutos, avant d'aller plus loin.

Si je comprend bien déjà au lieu d'utiliser une variable par cadre, va déjà falloir identifier une variable par choix de cadre ce qui fait au lieu de 6 variables en ce moment (cadre1, cadre2 etc....), si on dis qu'il y a 10 liens par cadres, à peu près 6x10 variables à identifier.

Je suis sur la voie quand je dis ça où je suis completement à coté de la plaque ?

Sinon quand vous dites de pages en pages, je comprend pas bien, car dans mon cas, il n'y a qu'une page avec 6 cadres includes possédant chacun 10 liens, mais c'est toujours la même page php dont il est question.

Bon en tout cas, c plus compliqué que j'aurais cru. Merci quand même. :wink:

Mammouth du PHP | 983 Messages

18 oct. 2005, 16:29

Pour simplifier ton problème, tu as besoin:
- d'une variable de session par cadre, donc 6 variables ($_SESSION['cadre1'], $_SESSION['cadre2']...)
- tu donnes des valeurs par défaut à ces variables qui sont les pages par défaut à inclure.
- lorqu'un utilisateur clique sur un lien d'un cadre, il faut que ce lien indique quel cadre modifier, et quelle page inclure. Ensuite, tu omdifie la variable de session concernée, puis tu fais tes inclusions.

C'est plus clair comme ca?

Damien49
Invité n'ayant pas de compte PHPfrance

18 oct. 2005, 16:39

Ok merci c un peu plus clair, mais une avalanche de question me submerge et m'innonde.

Première question : Par rapport au script actuel cela demande un changement total ou juste de rajouter du code ?

Deuxième question : Donc 6 variables sessions (j'etais effectivement à coté de la plaque) et des valeurs par défaut. Pour les valeurs par défaut, elles sont déjà définis dans mon code actuel non ?

Troisème question :
lorqu'un utilisateur clique sur un lien d'un cadre, il faut que ce lien indique quel cadre modifier, et quelle page inclure. Ensuite, tu omdifie la variable de session concernée, puis tu fais tes inclusions.
Là va me falloir un tuto, parce que je vois pas bien comment faire. Vous n'auriez pas un p'tit lien pour me mettre sur la voie ?

En tout cas merci de vous intéressez à mon cas. C'est si rare de nos jours qu'on s'occupe des newbeephp ? :roll:

PS : je dois vous paraitre bien ignorant en tout cas.

Mammouth du PHP | 568 Messages

18 oct. 2005, 16:52

1 - Non une retouche, c'est à dire que tu ne récupère plus $_get qqc, mais $_session qqc..., plus une partie pour enregistrer les variables sessions... Et la ligne obligatoire de démarrage des sessions...

2 - Bin les valeurs par défaut, c'est la 1ère sélection possible.. par exemple... ou rien...

3 - Pour celle-ci, tu le fait déjà... Tes liens contiennent déjà les informations sur l'éléments choisis... C'est cela que tu dois enregistrer en session...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Mammouth du PHP | 983 Messages

18 oct. 2005, 17:07

Doc sur les sessions:
http://fr.php.net/manual/fr/ref.session.php

En haut de ta page, tu fais un truc du genre:
session_start();
/** valeurs par défaut des cadres **/
if(!isset($_SESSION['cadre1']))
   $_SESSION['cadre1'] = 'page par défaut';
// tu fais cela pour les 5 autres variables
//ensuite tu testes si un choix est fait par l'utilisateur:
if(isset($_GET['cadre1']))
   $_SESSION['cadre1'] = $_GET['cadre1'];
//idem pour les autres cadres

//puis tu fais tes inclusions comme avant, sauf que tu utilises les variables $_SESSION['cadre1'], $_SESSION['cadre2'].. au lieu des varaibles locales.
  

Eléphanteau du PHP | 10 Messages

18 oct. 2005, 17:15

Merci bien à vous deux. J'en ai profité pour m'enregistrer au forum.

Je vais essayé de voir ça. Je vais essayé de me débrouiller avec ce que vous m'avez donné. Je vous tiens au courant. :)

En tout cas merci. Je commence à comprendre et le lien me sera très utile. :wink:

Eléphanteau du PHP | 10 Messages

18 oct. 2005, 17:42

Une petite question :
//puis tu fais tes inclusions comme avant, sauf que tu utilises les variables $_SESSION['cadre1'], $_SESSION['cadre2'].. au lieu des varaibles locales.
Mes variables locales c'est lesquels ? 'altitude' par ex (je crois que non, ca c'est la valeur de ma variable)
ou bien c'est $cadre1 ? #-o

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 oct. 2005, 17:44

tu doit utiliser $_SESSION["cadre1"] à la place de $cadre1
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 10 Messages

18 oct. 2005, 18:08

Bon j'ai essayé plusieurs façon.

Au début j'ai cru que quand tu disais de mettre en haut, il fallait que je mette ça dans une partie à part des scripts php des cadres et que j'y déclare les 6 cadres avec session_start().

Puis j'ai mis ton bout de code dans le haut du script php du cadre même

Mais j'arrive pas à faire marcher. Je dois me tromper.

J'ai lut le tuto mais ça m'aide pas des masses pour mon cas.

Bon voilà ce que j'ai fait en dernier essai. Vous allez rigoler je le sens lol

Pour le cadre 1 :
<div id="classification">
 

<h1>Classification des Nuages</h1>



<div id="class_menu_01"><!--Les Menus-->

	<div class="class_element_menu">
		<h2>Classification Par Altitude</h2>
		<ul>
			<li><a href="_classification.php?cadre1=altitude#classification">Classification par Altitude</a></li>
			<li><a href="_classification.php?cadre1=haute_altitude#classification">Nuages de Haute Altitude</a></li>
			<li><a href="_classification.php?cadre1=moyenne_altitude#classification">Nuages de Moyenne Altitude</a></li>
			<li><a href="_classification.php?cadre1=basse_altitude#classification">Nuages de Basse Altitude</a></li>
			<li><a href="_classification.php?cadre1=altitude_vertical#classification">Nuages à Dévelloppement Verticaux</a></li>
		</ul>
	</div>

</div>



<div id="class_definition"><!--Code PHP  pour le cadre. Permet d'avoir un cadre différent par onglet, sans changer de page-->
						
	<?php 
session_start();
/** valeurs par défaut des cadres **/
if(!isset($_SESSION['cadre1']))
   $_SESSION['cadre1'] = 'altitude';
 if(isset($_GET['cadre1']))
   $_SESSION['cadre1'] = $_GET['cadre1'];  
//puis tu fais tes inclusions comme avant, sauf que tu utilises les variables $_SESSION['cadre1'], $_SESSION['cadre2'].. au lieu des varaibles locales.
	
	if (!isset($_GET['cadre1'])) $_SESSION['cadre1']= 'altitude';
	else $_SESSION['cadre1']= $_GET['cadre1']; 
	switch($_SESSION['cadre1'])
	{
	case 'altitude': include ('Classification/Par Altitude/altitude.html');break;
	case 'haute_altitude': include ('Classification/Par Altitude/haute_altitude.html');break;
	case 'moyenne_altitude': include ('Classification/Par Altitude/moyenne_altitude.html');break;
	case 'basse_altitude': include ('Classification/Par Altitude/basse_altitude.html');break;
	case 'altitude_vertical': include ('Classification/Par Altitude/altitude_vertical.html');break;
	} 
	?>   	
</div>


<hr/>
Arf j'suis meilleur en Xhtml et css2 :lol:

Mammouth du PHP | 1311 Messages

18 oct. 2005, 18:11

salut
session_start doit etre avant toute sortie html c'est a dire que les premieres lignes de ta page principale (ou tu fait des includes )
seront
<?php session_start();
...
..?>