8792 sujets

Développement web côté serveur, CMS

Bonjour a tous,

Je suis actuelemment en train de developper un site et j ai un pb avec mes variables de sessions :

J ai une page (font.php) qui me permet d afficher le font de mes pages.
Donc dans mes autres pages, je fais un
include "font.php"
.

Je souhaite afficher l identifiant de la personne qui est connectée en permanence sur le site. Pour cela j ai fait une variable
$_SESSION['identif']
dans ma page font.php .

Le pb c est que ma page font.php ne me garde pas les variables $_SESSION .... alors que j ai bien un
session_start();
sur chaque page ...

Merci d avance
Modifié par Mailtar (22 Jul 2005 - 16:48)
Peut-être encore un problème de compréhension include php et variables ?

Tu dis avoir un session_start sur toute les pages ? Aussi sur ta page inclus font.php ?

Si c'est cela tu as deux session_start sur la même page à générer et ça n'aime peut-être pas ?

en lisant la doc http://fr.php.net/manual/fr/print/function.session-start.php on note

a écrit :
Note : Si vous utilisez des sessions basées sur les cookies, vous devez appeler session_start() avant d'afficher quoi que ce soit au navigateur.


si tu affiche quelque chose dans la fenêtre avant le session_start du fichier inclus font.php, j'ai peur que cela ne marche jamais...

Maintenant s'il n'y a pas de session_start dans font.php, je ne vois pas...
Non si il afficherait quelque chose avant l'apparition du session_start(), un message d'erreur s'afficherait.

Peut être que cela viens en effet de la présence de deux session_start(). Il faut pas qu'il y en ai un sur chaque script php qui utilise des variables de session, mais un seul. Par exemple, si ton index.php inclu un quelconque fichier, il suffit qu'il y ai un session_start() dans le fichier index.php pour que les variables de session soient utilisable dans les fichiers inclus.

Moi, ce qui m'intrigue, c'est ce que tu entends par :
a écrit :

Le pb c est que ma page font.php ne me garde pas les variables $_SESSION...

Qu'est ce qu'elles font, tes variables de session ?
Modifié par KosMos (19 Jul 2005 - 18:39)
J ai pas mis de session_start() dans mon font.php ... si j en mets un, il l'ignore car il y a deja celui des autres pages.

a écrit :
Qu'est ce qu'elles font, tes variables de session ?


bah j ai mis un print $_SESSION['identif']; et ca me mets qu il y a pas de identif ... meme quand j envoye le formulaire.

Voici un bout du code du font.php :
<html>
<?php 
print $_SESSION['identif']; // ca ne fonctionne pas ici
if(isset($_POST['ident']) && isset($_POST['pass'])) {  //on garde l identifiant en memoire
$_SESSION['identif']=$_POST['ident'];
$_SESSION['password']=$_POST['pass'];
}

if(isset($_SESSION['identif']) && isset($_SESSION['password'])){
$pwd = mysql_query("SELECT passw 
FROM contact
WHERE identif='".$_SESSION['identif']."'");
$pwd=mysql_fetch_array($pwd);
$pwd=stripslashes($pwd['passw']);
if ($_SESSION['password']==$pwd) {
 echo "Bonjour, ".$_SESSION['identif'].""; // ici le $_SESSION['identif'] fonctionne
include "deco.php";
}else {  // si c est pas le bon mdp
unset($_SESSION['identif']);
unset($_SESSION['password']);
echo "<form name='form1' method ='POST' action='{$_SERVER['PHP_SELF']}'>
<div id='Layer5' style='position:absolute; width:166px; height:42px; z-index:6; left: 845px; top: 19px'> <input type='text' name='ident'></div>
<div id='Layer6' style='position:absolute; width:180px; height:45px; z-index:7; left: 845px; top: 65px'> <input type='password' name='pass'></div>
<div id='Layer7' style='position:absolute; width:98px; height:45px; z-index:8; left: 825px; top: 105px'><input type='submit' name='Submit' value='Envoyer'></div>
</form>";
echo "<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 140px'><a href='inscription.php'>Vous n'avez pas d'identifiant ?</a></div>";
echo "<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 170px'><font color='RED'>Mot de passe incorrect !</font></div>";
}
}
else {echo "<div id='Layer2' style='position:absolute; width:149px; height:28px; z-index:4; left: 713px; top: 25px'>Votre identifiant :</div>
<div id='Layer4' style='position:absolute; width:170px; height:28px; z-index:5; left: 685px; top: 69px'>Votre mot de passe :</div> <form name='form1' method ='POST' action='{$_SERVER['PHP_SELF']}'>
<div id='Layer5' style='position:absolute; width:166px; height:42px; z-index:6; left: 845px; top: 19px'> <input type='text' name='ident'></div>
<div id='Layer6' style='position:absolute; width:180px; height:45px; z-index:7; left: 845px; top: 65px'><input type='password' name='pass'></div>
<div id='Layer7' style='position:absolute; width:98px; height:45px; z-index:8; left: 825px; top: 105px'> <input type='submit' name='Submit' value='Envoyer'></div>
</form>";

echo "<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 140px'><a href='inscription.php'>Vous 
n'avez pas d'identifiant ?</a></div>";}
?>
</html>

Modifié par Mailtar (20 Jul 2005 - 16:25)
Mailtar a écrit :


<html>

<div id='Layer4' ...
<div id='Layer4' ...


Le html ne se justifie pas si le premier fichier en a déjà un (voir est peut-être néfaste)

Selon le tuto sur l'include, les fichiers inclus ne devrait pas contenir de <html>, <head>, <body>... qui doivent rester unique dans le document HTML généré...

Bon, heureusement qu'on ne voit pas les fichiers php inclus à l'origine de mes pages, l'include contient tout ce qui est commun à toutes mes pages (dont le </head>, le <body>...)

Sinon, il y a plusieurs objets avec un même id ? Il faut utiliser les classes à la place...

Et pour aérer ton code, mettre les définitions des styles dans un fichier CSS Smiley cligne
y a pas 2 layer4 ..
y a un test if juste avant, suivant ce que j ai , j affiche pas la meme chose
Je cite...


echo "<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 140px'><a href='inscription.php'>Vous 
n'avez pas d'identifiant ?</a></div>";
echo "<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 170px'><font color='RED'>Mot de passe incorrect !</font></div>";
}
}


Smiley cligne

Quand je disais d'aérer le code...
donc j ai remarqué que si j instancie par exemple:
$_SESSION['identif']="mailtar";
dans mon font.php.
Je ne peux meme pas recuperer cette variable dans ma page page1.php ou je fais un
include "font.php";

Je suis paumé ....
Salut,
si tu as bien mis le session_strat() dans chaque page, la récupération d'une variable de session est indépendante de l'inclusion de ton fichier. Si la variable est définie, tu n'as pas besoin de ce fichier pour la définir à nouveau.

Pour ton code, tu pourrais comme te l'a mentionné Bob (Mc Melun), tu pourrais avantageusement l'aérer et j'ajouterais séparer le PHPdu HTML. Il ne sert en effet strictement à rien de faire interpréter le HTML deux fois, une fois par PHP et une seconde fois par le navigateur. Ton code devrait donc ressembler à ceci:
<html>
<?php
print $_SESSION['identif']; // ca ne fonctionne pas ici
if(isset($_POST['ident']) && isset($_POST['pass']))
{
    //on garde l identifiant en memoire
    $_SESSION['identif']=$_POST['ident'];
    $_SESSION['password']=$_POST['pass'];
}

if(isset($_SESSION['identif']) && isset($_SESSION['password']))
{
    $pwd = mysql_query("SELECT passw
                        FROM contact
                        WHERE identif='".$_SESSION['identif']."'");
    $pwd=mysql_fetch_array($pwd);
    $pwd=stripslashes($pwd['passw']);
    if ($_SESSION['password'] == $pwd)
    {
        // ici le $_SESSION['identif'] fonctionne
        echo "Bonjour, ".$_SESSION['identif']."";
        include "deco.php";
    }
    else
    {
        // si c est pas le bon mdp
        unset($_SESSION['identif']);
        unset($_SESSION['password']);
?>
<form name='form1' method ='POST' action='<?php echo($_SERVER['PHP_SELF']); ?>'>
<div id='Layer5' style='position:absolute; width:166px; height:42px; z-index:6; left: 845px; top: 19px'> <input type='text' name='ident'></div>
<div id='Layer6' style='position:absolute; width:180px; height:45px; z-index:7; left: 845px; top: 65px'> <input type='password' name='pass'></div>
<div id='Layer7' style='position:absolute; width:98px; height:45px; z-index:8; left: 825px; top: 105px'><input type='submit' name='Submit' value='Envoyer'></div>
</form>
<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 140px'><a href='inscription.php'>Vous n'avez pas d'identifiant ?</a></div>";
<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 170px'><font color='RED'>Mot de passe incorrect !</font></div>";
<?php
    }
}
else
{
?>
<div id='Layer2' style='position:absolute; width:149px; height:28px; z-index:4; left: 713px; top: 25px'>Votre identifiant :</div>
<div id='Layer4' style='position:absolute; width:170px; height:28px; z-index:5; left: 685px; top: 69px'>Votre mot de passe :</div> 
<form name='form1' method ='POST' action='<?php echo($_SERVER['PHP_SELF']); ?>'>
<div id='Layer5' style='position:absolute; width:166px; height:42px; z-index:6; left: 845px; top: 19px'> <input type='text' name='ident'></div>
<div id='Layer6' style='position:absolute; width:180px; height:45px; z-index:7; left: 845px; top: 65px'><input type='password' name='pass'></div>
<div id='Layer7' style='position:absolute; width:98px; height:45px; z-index:8; left: 825px; top: 105px'> <input type='submit' name='Submit' value='Envoyer'></div>
</form>

<div id='Layer4' style='position:absolute; width:236px; height:33px; z-index:4; left: 765px; top: 140px'><a href='inscription.php'>Vous n'avez pas d'identifiant ?</a></div>";
<?php
}
?>
</html>
C'est nettement plus lisible.

Ceci dit, tu dis que tu es paumé, j'avoue que pour ma part, je saisis mal le schéma de construction de tes pages... Smiley ohwell
Cyrano a écrit :
Ton code devrait donc ressembler à ceci:
...


Oui, mais en supprimant les id='Layer4' toujours redondants dans le code ci-dessus Smiley cligne
Heu si tu inclus page1 dans page2, toutes les variables de page1 sont disponibles dans page2 sans qu'il soit nécessaire de passer par une variable de session ou autre...

Un include n'est rien d'autre qu'un copier coller automatique
le truc c est que je souhaite garder l identifiant sur toutes les pages...
A savoir que dans toutes mes pages, j ai mon include "font.php" qui contient la variable $_SESSION['identif'] ...
j ai trouvé mon pb : ca venait d un autre fichier que j include dans mon font.php ...
et j ai résolu le truc Smiley biggrin