Page 1 sur 1

problème avec session_start,

Posté : 18 juin 2012, 15:38
par lau13
Bonjour,
j'ai un peu le même problème avec mes variables de session.
J'ai vérifié les encodages et les doublons, il n'y en n'a pas.
Je n'ai pas encore fait le cours sur la bdd.

J'ai placé le session_start en haut de chacune des pages avant tout code.
Pour tester, je l'ai placé sur une page au hasard et bien sûr, sur la page d'inscription.

dans le header, j'appelle la variable $_POST['pseudo'] pour dire bonjour "bidule". "bidule" est bien écrit dans mon header sur la page inscription, mais sur mon autre page, le pseudo n'apparait pas.
J'ai dû surement rater quelque chose !!!

Voici mon code de la page "inscription.php"
<?php 
session_start();
?>

<?php $titre_onglet = 'inscription';?> 

<?php include ("../principale/header.php");?>
<?php include ("../principale/nav.php"); ?> 
	<aside>
	<?php 
	include ("aside_sommaire.php");
	include ("aside_bas.php");
	?>	
</aside>
<section>

<h2 id="nouveau">Nouveau ?</h2>
<form id="inscription" method="post" action="inscription_traitement.php">

<fieldset id="form1">
	<legend>Inscription :</legend>
			
			
<label for="pseudo">Nom d'utilisateur : <img src="../seqIMG/icone_interrogation.png" alt="pseudo" title="compris entre 3 et 15 caractères"/></label>
<input type="text" name="pseudo" id="pseudo" maxlength="15" size="25" value="<?php if (isset($_SESSION['form']['pseudo']) AND !empty($_SESSION['form']['pseudo'])) echo $_SESSION['form']['pseudo'];?>"/>
			<br />
	<?php if (isset($_SESSION['erreur']['pseudo']) AND !empty($_SESSION['erreur']['pseudo']))
		echo $_SESSION['erreur']['pseudo'];
					?>

etc etc

Voici le code de mon header:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title><?php echo $titre_onglet;?></title>
		<link rel="icon" type="image/png" href="../favicon.jpg" />
		<link rel="stylesheet" href="../css/header.css" type="text/css"/>
		<link rel="stylesheet" href="../css/nav.css" type="text/css"/>
		<link rel="stylesheet" href="../css/aside.css" type="text/css"/><!--aside-->
		<link rel="stylesheet" href="../css/section.css" type="text/css"/><!--corps-->
		<link rel="stylesheet" href="../css/footer.css" type="text/css"/>
		<link rel="stylesheet" href="../css/menu_liste.css" type="text/css"/>
		<link rel="stylesheet" href="../css/inscription.css" type="text/css"/>
		
<!--[if lt IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

<!--[if lt IE 9]>
  <script>
    document.createElement("header");
    document.createElement("section");
    document.createElement("nav");
    document.createElement("aside");
    document.createElement("footer");
	document.CreateElement ("article");
  </script>
<![endif]-->

<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="../css/styleie.css">
<![endif]-->
			
    </head>

 <body>

<!--<div id="bloc_page">utile si dimension fixe-->
	
<header>


	<h1 id="en_tete"><!--pour les boutons retour-->
	Ma classe de Petite Section de Maternelle
	</h1>
	
	<h2>	
			<?php
			$heure=date('H');
			$jour= date('d');
			$mois= date('m');
			$annee= date('Y');
			if ($heure<=18)
			{
			echo 'Bonjour '.$_POST['pseudo'].' ! Nous sommes le ' .$jour. '/' .$mois. '/' .$annee;
			}
			else
			{
			echo 'Bonsoir '.$_POST['pseudo'].' ! Nous sommes le ' .$jour. '/' .$mois. '/' .$annee;
			}

			?>
	</h2>

</header>
et voici le code de ma page j'essaye de transmettre les informations: AGIR.php
<?php 
session_start();
?>
<?php $titre_onglet = 'Gymnastique'; ?>
<?php include ("../principale/header.php");?>
<?php include ("../principale/nav.php"); ?> 		
<?php include ("../principale/aside_AGIR_act_gym.php"); ?>

<!--le corps: avec id ce sera # mettre ici la séquence quelle qu'elle soit-->
<section>
	
<?php
$h1='';
include ("titre_seq.php");
?>

<h2 id="s1">Spécificités de l'activité: (guide de l'enseignant T2)</h2>
<?php include("remonter.php");?>

<h5>Essence de l'activité:</h5>
<p>Il s'agit d'une activité de production de formes inhabituelles corporelles réalisées dans le but 
d'être vues et/ou jugées selon un code admis par les pratiquants.<br/>
Risque/originalité/virtuosité.</p>

etc etc



pourquoi le pseudo n'apparaît pas dans l'entête de cette page alors qu'il apparaît sur la page inscription.php quand le formulaire a été validé?

merci pour votre aide!

Re: problème avec session_start,

Posté : 18 juin 2012, 15:57
par Psix
Bonjour,

Tout d'abord dans ton code de ton header il y a $_POST['xy'], or cette variable n'est disponible seulement lorsqu'un formulaire a été envoyé. Ensuite, pour tes variables de session, où est-ce que tu définies leur valeur ? Peut-être que c'est dans un code que tu n'as pas posté ?

Si tu veux stocker le pseudo, tu mets par exemple $_SESSION['pseudo'] = $_POST['champ_du_pseudo']; et tu pourras de ce fait afficher le pseudo (grâce à la variable de session) sur différentes pages, contrairement à la variable POST.

Si je n'ai rien compris à ton problème n'hésite pas à le dire :D

Re: problème avec session_start,

Posté : 18 juin 2012, 18:15
par lau13
merci Psix, tu as tout a fait compris mon problème et tu le soulèves parfaitement : je ne définis pas leur valeur. (d'ailleurs il m'est noté un truc du genre "undefinied string pseudo on line...") .
Je voudrais me servir du pseudo que le visiteur a écrit dans le formulaire pour le transmettre partout, et donc si j'ai bien compris, sans me servir de $_POST qui est réservée aux formulaires.
Mais je ne sais pas comment définir (extraire) ma variable pseudo qui a été notée dans le formulaire, mes connaissances en php sont fraîches et fragiles!!!

j'ai sur ma page de traitement du formulaire:
<?php 
session_start();
$_SESSION['erreur']='';
$_SESSION['form']='';
?>
<?php $titre_onglet = 'vérification inscription'; ?>
<?php	//si pseudo mauvais
		if (empty($_POST['pseudo']) or strlen($_POST['pseudo'])>15 or strlen($_POST['pseudo'])<3)
			{
			$_SESSION['erreur']['pseudo']='<p class="erreur">Votre pseudo doit comporter entre 3 et 15 caractères.</p>';
			}
		else
			{
			$_SESSION['form']['pseudo']=htmlspecialchars($_POST['pseudo']);
			}
est-ce sur cette page que je dois stocker le pseudo?

Si je suis ton exemple, je dois stocker le pseudo par exemple: $_SESSION['pseudo']=$_POST['champ_du_pseudo']
...là je ne comprends pas :cry: moi j'ai une $_SESSION['form']['pseudo'], dois-je alors écrire $_SESSION['form']['pseudo']=$_POST['pseudo'] pour dire que le $_POST['pseudo'] aura pour valeur celle de $_SESSION['form']['pseudo']? et ce sur la page de traitement du formulaire en dessous de session_start?

je nage... :|

Re: problème avec session_start,

Posté : 18 juin 2012, 18:34
par Psix
Dans ta page de traitement tu définies bien la valeur de $_SESSION['form']['pseudo'] avec
$_SESSION['form']['pseudo'] = htmlspecialchars($_POST['pseudo']);
Car je suppose que l'utilisateur rentre son pseudo dans ton formulaire, donc son pseudo est stocké dans $_POST['pseudo'] lorsqu'il valide le formulaire. Tu peux donc stocker cette variable dans une session, celle ci peut très bien être $_SESSION['form']['pseudo'], $_SESSION['pseudo'] ou encore $_SESSION['trucbidule'], cela dépend de ce que tu préfères (mais après il faut s'y tenir).

Cependant, pour afficher ensuite le pseudo tu ne dois pas mettre $_POST['pseudo'] étant donné que cette variable n'est plus valide, mais $_SESSION['form']['pseudo'].

Re: problème avec session_start,

Posté : 18 juin 2012, 19:25
par lau13
j'ai compris cela. ma variable est définie, ok, mon formulaire ne fonctionnerait pas sans cela!

si $_SESSION['form']['pseudo'] existe, pourquoi je ne peux pas l'appeler sur les autres pages?

faut-il que dans la page de traitement je note en plus dans la partie des variables de session:

$_SESSION['form']['pseudo']=$_POST['pseudo']

et appeler $_SESSION['form']['pseudo'] dans les autres pages?

Re: problème avec session_start,

Posté : 18 juin 2012, 19:35
par Psix
Normalement $_SESSION['form']['pseudo'] est bien définie dans la page de traitement. C'est donc bizarre que tu ne puisses l'afficher depuis une autre page. Aurais-tu une erreur qui s'affiche lorsque tu tentes de l'afficher et que ça ne fonctionne pas ?

Peux-tu montrer comment tu essayes d'afficher cette variable sur une autre page ?

Re: problème avec session_start,

Posté : 18 juin 2012, 23:10
par lau13
voici mes codes avec en ajout une s_SESSION['test']='roger'; rien ne se passe, quant à l'erreur quand il est noté $_SESSION['form']['pseudo']: "Notice: Uninitialized string offset: 0 in C:\wamp\www\principale\header.php on line 60". donc ici à la ligne du header echo 'Bonsoir !'.$_SESSION['form']['pseudo'].$_SESSION['test'];

code de traitement de formulaire:
<?php 
session_start();
$_SESSION['erreur']='';
$_SESSION['form']='';
$_SESSION['test']='roger';
?>

<?php $titre_onglet = 'vérification inscription'; ?>
<?php	//si pseudo mauvais
		if (empty($_POST['pseudo']) or strlen($_POST['pseudo'])>15 or strlen($_POST['pseudo'])<3)
			{
			$_SESSION['erreur']['pseudo']='<p class="erreur">Votre pseudo doit comporter entre 3 et 15 caractères.</p>';
			}
		else
			{
			$_SESSION['form']['pseudo']=htmlspecialchars($_POST['pseudo']);
			}
		if (!empty($_SESSION['erreur']['pseudo']))
			{
			$_SESSION['form']['pseudo']=$_SESSION['pseudo'];
			}
la page AGIR.php, pour laquelle j'ai mis la session_start
<?php session_start();?>
<?php $titre_onglet = 'Gymnastique'; ?>
<?php include ("../principale/header.php");?>
<?php include ("../principale/nav.php"); ?> 		
<?php include ("../principale/aside_AGIR_act_gym.php"); ?>

<!--le corps: avec id ce sera # mettre ici la séquence quelle qu'elle soit-->
<section>
	
<?php
$h1='';
include ("titre_seq.php");
?>

<h2 id="s1">Spécificités de l'activité: (guide de l'enseignant T2)</h2>
<?php include("remonter.php");?>

<h5>Essence de l'activité:</h5>
et le header dans lequel j'appelle la variable de session et la variable de test 'roger' qui n'apparait pas mais pas de message d'erreur pour celle ci. le message d'erreur n'est que pour ['form']['test']
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title><?php echo $titre_onglet;?></title>
		<link rel="icon" type="image/png" href="../favicon.jpg" />
		<link rel="stylesheet" href="../css/header.css" type="text/css"/>
		
    </head>

 <body>

<header>


	<h1 id="en_tete"><!--pour les boutons retour-->
	Ma classe de Petite Section de Maternelle
	</h1>
	
	<h2>	
			<?php
			$heure=date('H');
			$jour= date('d');
			$mois= date('m');
			$annee= date('Y');
			if ($heure<=18)
			{
			echo 'Bonjour !';
				{echo $_SESSION['form']['pseudo'].$_SESSION['test'].'Nous sommes le ' .$jour. '/' .$mois. '/' .$annee;}
			}
			else
			{
			echo 'Bonsoir !'.$_SESSION['form']['pseudo'].$_SESSION['test'];
			echo 'Nous sommes le ' .$jour. '/' .$mois. '/' .$annee;
			}
			?>
	</h2>

</header>	

arrives tu à savoir ce qui cloche ?