voilà plusieurs soirs que je cherche une solution à mon problème, après lecture de tutoriels et autres documentations (que l'on trouve pourtant à foison), sans résultat.
J'expose les faits : j'ai un formulaire d'identification classique (avec un champ "pseudo" et un champ "mot de passe", ainsi qu'un bouton "connexion"). Si un utilisateur s'identifie correctement, pas de souci, une session est créée... Mais lorsqu'il navigue sur les différentes pages du site, la session se perd, sans que je parvienne à m'expliquer pourquoi.
La navigation s'opère à l'aide de la fonction SWITCH et, lorsqu'on passe d'une page à une autre, la fonction INCLUDE vient charger la page demandée, en remplacement de la précédente.
Voici le code de mes différentes pages, pour vous aider à y voir plus clair. Tout d'abord l'index.php qui affiche le formulaire d'identification et inclue le fichier body.php :
<?php
session_start();
$_SESSION['pseudo'] = '';
$_SESSION['pass'] = '';
if (isset($_POST['submit']))
{
if (empty($_POST['pseudo']) || empty($_POST['pass']))
{
?>
<div class="cadre_identification">
Vous n'avez pas rempli le formulaire.<br />
<a href="<?php $_SERVER['PHP_SELF'] ?>">Retour</a>
</div>
<?php
include ('body.php') ;
}
else {
require_once ('connexion/configbdd.php');
$connexion = mysql_connect($dbhost, $utilisateur, $mdp) or die (mysql_error()) ;
mysql_select_db (maBase, $connexion) or die (mysql_error()) ;
extract($_POST);
$requete = mysql_query ("SELECT pseudo, pass, admin FROM users WHERE pseudo='$pseudo'") ;
$resultat = mysql_fetch_array ($requete) ;
if ($resultat['pseudo'] == $pseudo && $resultat['pass'] == $pass)
{
$pseudo = (isset($_POST['pseudo'])) ? $_POST['pseudo'] : '';
$pass = (isset($_POST['pass'])) ? $_POST['pass'] : '';
$date_expiration = time() + 365*24*3600;
setcookie('pseudo', $pseudo, $date_expiration);
setcookie('mot_de_passe', $mot_de_passe, $date_expiration);
$_SESSION['pseudo'] = $pseudo;
$_SESSION['pass'] = $pass;
?>
<div class="cadre_identification">
<?php
include ('form_connect.php') ;
?>
</div>
<?php
include ('body.php') ;
}
else
{
?>
<div class="cadre_identification">
Votre pseudo et/ou votre mot de passe sont incorrects.<br />
<a href="<?php $_SERVER['PHP_SELF'] ?>">Retour</a>
</div>
<?php
include ('body.php') ;
}
}
}
if (!isset($_POST['submit']))
{
?>
<div class="cadre_identification">
<?php
include ('form_ident.php') ;
?>
</div>
<?php
include ('body.php') ;
}
?>
body.php insère un SWITCH qui permet de naviguer entre les différentes pages du site :
<div class="cadre_central">
<?php
$carte = $_POST['carte'];
switch ($carte){
case 1 : include ("pages_cartes/carte_generale.php");
break;
case 2 : include ("pages_cartes/carte_1.php");
break;
case 3 : include ("pages_cartes/carte_2.php");
break;
case 4 : include ("pages_cartes/carte_3.php");
break;
default : include ("pages_cartes/carte_generale.php");
break;
}
?>
</div>
carte_generale.php est la page par défaut :<center>
<table>
<tr>
<td colspan="3">
<h3>Cliquez sur une carte pour l'agrandir.</h3>
</td>
</tr>
<tr>
<td>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="carte" value="2" />
<input type="submit" name="" value="" class="mini_carte" style="background-image:url(images/cartes/a_1.jpg);" />
</form>
</td>
<td>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="carte" value="3" />
<input type="submit" name="" value="" class="mini_carte" style="background-image:url(images/cartes/a_2.jpg);" />
</form>
</td>
<td>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="carte" value="4" />
<input type="submit" name="" value="" class="mini_carte" style="background-image:url(images/cartes/a_3.jpg);" />
</form>
</td>
</tr>
</table>
</center>
Enfin voici les fichiers carte_1,2,3.php, toutes construites sur le même modèle : <div>
<img src="images/cartes/g_c8.jpg" />
</div>
<a href="index2.php?page=carte_generale"><h2>Retour à la carte générale</h2></a>
J'ai essayé de multiples combinaisons, comme insérer dans chaque page un session_start(); ou d'autres cafouillages du genre, mais rien à faire, un visiteur ne peut garder sa session au fil des pages, le formulaire d'identification réapparaît systématiquement, alors que devrait rester affiché le message "Bienvenue X, Y ou Z".
Heureusement je ne suis pas armé (quoi que, j'ai peut-être une corde qui traîne au fond d'un placard), sinon qui sait à quelle extrémité je pourrai en arriver... Mais non, je ne me laisserai pas vaincre par "kaoteknik", je persévère, et je sais qu'ici je peux trouver tout le réconfort dont j'ai besoin !
Merci, et à très bientôt.
PS : je précise (mais j'imagine que ça se voit), je débute totalement avec les sessions et cette notion est encore très abstraites à mes yeux.