Variables de sessions, portées et warning, au secours !!!

Signaler
Messages postés
9
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
21 mai 2006
-
AZIRIAZIZ
Messages postés
34
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
19 mai 2011
-
Bonjour,

Je souhaitais savoir quelle était la portée des variables de session. Après un session_start(), je n'ai pas réussi à récupérer mes variables de session dans toutes mes pages. Ma variable $_SESSION['valid_user'] n'est pas visible dans tous mes sources appellés.

J'ai ajouté un session_start(); sur la première ligne de mon site (index.php) mais cette même page est rappellée souvent avec des paramètres différents pour réaliser des affichages différents dans des DIV en CSS2.

J'utilise une base de données pour gérer les utilisateurs accédant à certaines sections protégées de mon site.

Mes questions sont les suivantes :

Comment faire pour afficher une page à plusieurs reprises dans laquelle je démarre une session sans avoir d'erreur ou de warning ?

Quel est la portée des variables de session ?

Adresse de mon site www.dolphin-zone.net,

Merci d'avance à tous pour vos réponses,

Rick

12 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

quelles sont les erreurs ?

as tu session_start en haut de chaque page ?

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
9
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
21 mai 2006

Mes erreurs :



1- Pourquoi dans ma page index.php mes variables de sessions ne sont
pas visibles ? et dans un fichier inclu elles le sont ? (voir mes
source plus bas)



2- Pourquoi quand je recharge ma page index.php j'ai une erreur = > session "already started .... "



Mes sources :



index.php



***











Dolphin-Zone


































                                         


















[index.php?page=user_log_out ]







              

[ Connecté ]





[index.php?page=user_log_in ]







              

[ Non connecté ]



























* : =251354









Mesure d'audience ROI
frequentation par















 












[Admin/cptlog.php [..]]
depuis le 01/05/2006 -


Ce site est
optimisé pour IE6 - dernière màj le 8 mai 2006 -


Votre Adresse
IP :



























***



accueil.php
















 








Vous pouvez dès à présent effectuer une demande
d'inscription sur le site,

n'oubliez pas de motiver votre demande.





Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

<? if (!isset($_SESSION['valid_user'])) session_start(); ?>

remplace ça par :

<?php session_start(); ?>

renvoi nous les erreurs et les n° de lignes ! et les lignes concernées !

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
9
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
21 mai 2006

Ok. J'ai compris qu'il fallait commencer de suite avec session_start() et ne pas rappeller cette fonction si la session n'est pas détruite, il me reste tout de même un problème : j'essaie d'afficher le contenu d'une variable de session dans mon index.php (ligne 72) :

[index.php?page=user_log_out ]



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[ <? $_SESSION['valid_user'] ?> Connecté ]

=> cette dernière ne s'affiche pas (et pas d'erreur ...)

Dans ce même fichier index.php j'inclu dans un DIV un autre fichier accueil.php (ligne 74) et là, dans ce dernier le contenu de cette même variable s'affiche ...
je ne comprends pas pourquoi elle s'affiche à ce moment ...

// Affichage après login réussi
case 'login' :
{
echo ("



>>> Bienvenue, vous êtes loggué en : ".$_SESSION['valid_user']." <<<


");

// Redirection vers l'acueil sans message au bout de 10 secondes
echo("<meta http-equiv="refresh" content="10;URL=index.php?page=accueil&option=">");
break;
}
Merci pour vos réponses déjà postées et merci d'avance pour les futures ;o)

Rick
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
Salut,

<? $_SESSION['valid_user'] ?>
Je suis contre ceci, mais voici la bonne forme: <?=$_SESSION['valid_user']; ?>

Un petit: <?php echo $_SESSION['valid_user']; ?> est plus le bienvenue.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

et pour ces lignes, quel est le message d'erreur ?

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
9
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
21 mai 2006

Merci beaucoup pour votre aide !

Le problème était tout simplement celui résolu par <juki_webmaster>, pourquoi un <? $_SESSION['valid_user'] ?> remplacé
par un <?php echo $_SESSION['valid_user']; ?> posait-il problème ? J'utilise cette syntaxe dans d'autres parties de code et
cela fonctionne ...

Merci à tous ceux qui ont répondus à mes questions, mon post est résolu ;o)

Rick
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

déja, <? c'est pas bon car tu peux le confondre avec un xml....

(c'est pas parceque ça marche que c'est bon)

ensuite, $var ça n'a aucun sens.... echo $var; là, ça en a un....

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
34
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
19 mai 2011
1
bjour
merci de tester ce code et me dire pourquoi la variable contenu perd sa valeur a la selection d'une wilaya ? et comment faire pour que cette derniere reste sur le menu apropos
votre aide me sera d un grand secours merci
<?php
require_once("connexionMysql.inc.php");
if(isset($_GET['famille']))
$requete="SELECT reference,prix FROM articles WHERE famillesID=".$_GET['famille'] ;
else
$requete="SELECT reference,prix FROM articles ";

$resultat=mysql_query($requete);
//--------------requête du menu
$requete2="SELECT ID,intitule FROM familles ";
$resultat2=mysql_query($requete2);
?>
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
<title>ma page</title>

<script type="text/javascript">
function montrer(element,lien)
{
var les_elements=new Array("apropos","inscription","liens-utiles","Contact");
for(var i=0; i<les_elements.length; i++)
{
document.getElementById(les_elements[i]).style.display='none';
document.getElementById(i+1).className='lien-nonactif';
}
document.getElementById(element).style.display='block';
document.getElementByid(lien).className='lien-actif';
}
</script>
<style type="text/css">
body {
font-family:verdana;
font-size:12px;
}

#conteneur{
width:800px;
margin:auto;
}
#haut {
height:100px;
padding:10px;
font-size:1.8em;
}
#liens {
height:24px;

padding-top:6px;
}
#milieu {
height:380px;
background-color:#00CCFF;
padding-top:10px;
}
#bas {
height:20px;
background:#999;
}

#liens a{
display:block;
background:#FF0000;
margin-right:11px;
padding:4px;
float:left;
width:140px;
text-align=center;
color: white;
}
#liens a:hover{

border-top:3px solid #330033;
background:#00CCFF;
}
#liens a:focus{
border-top:3px solid #FF0000;
}
#apropos,
#inscription,
#liens-utiles,
#contact{
display:none;
height:360px;
overfow:auto;
text-align:justfy;
}
.lien-actif {
display:block;
background:#CCCC99;
margin-right:5px;
padding:5px;
float:left;
width:350px;
text-align=center;
color:#999;
border-top:3px solid #333;
}
.lien-nonactif {
display:block;
background:#CCFF00;
margin-right:5px;
padding:5px;
float:left;
width:150px;
text-align=center;
color:black;
}
</style>
</head>








mon logo




[?contenu=apropos apropos de la 404]
[?contenu=s_inscrire s'inscrire]
[?contenu=liens liens]
[?contenu=contact contact]





<?php

if(isset($_GET['contenu']))
{
$contenu=$_GET['contenu'];

if ($contenu=='apropos')
{


require_once("connexionMysql.inc.php");
if(isset($_GET['famille']))
$requete="SELECT reference,prix FROM articles WHERE famillesID=".$_GET['famille'] ;
else
$requete="SELECT reference,prix FROM articles ";

$resultat=mysql_query($requete);
//--------------requête du menu
$requete2="SELECT ID,intitule FROM familles ";
$resultat2=mysql_query($requete2);

?>



<form id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label>en fonction de la Wilaya :
<select name="famille" id="famille">
<?php while($familles=mysql_fetch_array($resultat2)) { ?>
<option <?php if(!isset($_GET['famille'])) $_GET['famille']=1; if($familles['ID']==$_GET['famille']) echo "selected='selected'"; ?> value="<?php echo $familles['ID']; ?>"><?php echo $familles['intitule']; ?></option>
<?php } ?>
</select>
</label>
<label>




</label>
</form>

<table width="600" border="1" cellspacing="0" cellpadding="5">
<tr>
<td>nous assurons votre visibilite au :</td>
<td>Prix/mois</td>
<td>Voir le site</td>
</tr>
<?php while($articles=mysql_fetch_array($resultat)) { ?>
<tr>
<td><?php echo $articles['reference']; ?></td>
<td><?php echo $articles['prix']; ?></td>
<td>[fiche5.php?reference=<?php echo $articles['reference']; ?> Voir]</td>

<?php }





}
elseif ($contenu=='s_inscrire')
{
if (isset($_POST['pseudo']))
{
$pseudo=$_POST['pseudo'];
$pass=$_POST['pass'];
$email=$_POST['email'];

mysql_connect("localhost","root","") or die ("bd non connectée");
mysql_select_db("p404") or die("BD Inconnue");

$date=date("d/m/y");
$sql="INSERT INTO inscription VALUES('','".$pseudo."','".$pass."','".$date."','".$email."')";
mysql_query($sql) or die ("erreur d ecriture");
echo "inscription reussie";
}
else
{
echo "

<form method="post"action="?contenu=s_inscrire">
pseudo




pass:




E-mail:








</form>
";
}
}
elseif ($contenu=='liens')
{
echo " mes liens";

}
elseif ($contenu=='contact')
{
//Envoi du message
if (isset($_POST['email']))
{
$cont="nom : ".$_POST['nom']."
";
$cont.="Email : ".$_POST['email']."
";
$cont.="Msg : ".$_POST['msg']."
";

mail('slsaziri@yahoo.fr','Le titre du message',$cont);
}


// Formulaire
echo '
<form action="page.php?contenu=contact"method="post">
nom :

E-mail :

Msg : <textarea name="msg"></textarea>


</from>
';

}
else
{
echo "ERREUR";
}
}
else
{

echo "contenu n est pas programmé";
}

?>











le bas de page





</html>
Messages postés
56
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
12 août 2010

Bonjour,

Premièrement tu perd Contenu car la variable $_SERVER['PHP_SELF'], ne te donne que le script courant sans les variables {GET} donc soit tu complète

$_SERVER['PHP_SELF']."?contenu=".$contenu{..autres variables GET};

soit tu utilises:

$_SERVER['REQUEST_URI']

Faire attention, en les FLUX POST et GET, car ton formulaire est en METHOD="POST" et que tu utilises des variables en URL donc du "GET".

L'idéal étant

Pour que "A propos" reste actif, je dirais tester en PHP le fait de poser "A propos" actif suivant des critère passer en Variable (POST ou GET).

ex:

<?PHP
$titreCss["apropos"]="";
$titreCss["s_inscrir"]="";
$titreCss["liens"]="";
$titreCss["contact"]="";

/*avec $Catego passée en POST ou GET contenant "apropos" "s_inscrir" "liens" "contact"*/
 

print('
[?contenu=apropos apropos de la 404] 
[?contenu=s_inscrire s'inscrire] 
[?contenu=liens liens] 
[?contenu=contact contact] 
');


?>


Attention ce bout de code n'a pas été testé des erreurs de frappe ont pue se glisser.

Ensuite on peut aller plus loin avec les tableaux et tout paramétrer et utiliser un FOREACH.

______oOOO________OOOo________

RaftY, du code C commode!
Messages postés
56
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
12 août 2010

L'idéal étant


oups je finis la phrase:

L'idéal étant de choisir soit l'un soit l'autre, en DIRTY on peut utiliser $_REQUEST ...


______oOOO________OOOo________

RaftY, du code C commode!
Messages postés
34
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
19 mai 2011
1
merci pour l effort mais j y arrive toujours pas et je commence sérieusement a avoir mal a la tête si vous pouvez m expliquer encore cela m épargnerai des quantités de DOLIPRANE Merci