Page 1 sur 2

Plusieurs Cadres Includes - Comment garder les choix ?

Posté : 18 oct. 2005, 14:35
par Damien49
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.

Posté : 18 oct. 2005, 15:41
par heddicmi
Penche toi sur les variables de sessions afin de conserver de page en page les éléments sélectionnés...

Posté : 18 oct. 2005, 16:09
par Damien49
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.

Posté : 18 oct. 2005, 16:13
par rami
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.

Posté : 18 oct. 2005, 16:15
par heddicmi
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...

Posté : 18 oct. 2005, 16:25
par Invité
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:

Posté : 18 oct. 2005, 16:29
par rami
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?

Posté : 18 oct. 2005, 16:39
par Damien49
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.

Posté : 18 oct. 2005, 16:52
par heddicmi
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...

Posté : 18 oct. 2005, 17:07
par rami
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.
  

Posté : 18 oct. 2005, 17:15
par Damien49
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:

Posté : 18 oct. 2005, 17:42
par Damien49
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

Posté : 18 oct. 2005, 17:44
par zeus
tu doit utiliser $_SESSION["cadre1"] à la place de $cadre1

Posté : 18 oct. 2005, 18:08
par Damien49
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:

Posté : 18 oct. 2005, 18:11
par jeff
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();
...
..?>