Problème session php

Résolu
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   -  
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

n'étant pas du tout informaticien, j'ai appris à me servir du php grâce à des forums et des tutos. J'ai donc beaucoup de lacunes.
J'essaie de créer des sessions sur mon site mais je bloque en écrivant le code de vérification qui identifie l'utilisateur.
Voici mon code :

<?php

session_start();
$pseudoOK = false;

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) ) {

extract($_POST);

$hostname = "*****";
$user = "*****";
$password = "*****";
$nom_base_donnees = "*****";

mysql_connect($hostname, $user, $password) or die(mysql_error());
mysql_select_db($nom_base_donnees);

$sql = "SELECT nom, prenom, pseudo, email FROM joueurs WHERE pseudo = '".addslashes($pseudo)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

if (mysql_num_rows($req) > 0) {
$data = mysql_fetch_assoc($req);


if ($mdp == $data['mdp']) {
$pseudoOK = true;
}
}
}

if ($pseudoOK) {
$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];

header("Location: index3.php") ;
}
else {
header("Location: index2.htm") ;
}
?>

J'ai pompé des morceaux sur plusieurs tutos et je pense ne pas tout mettre dans le bon ordre en fait.

Merci de me donner un coup de main ;o)
A voir également:

33 réponses

moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
Hello
Avant de te répondre, peut--tu me décrire viteuf ton process ?
Dans l'ordre quel est le premier problème que tu as quand tu exécutes ?
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Je viens de résoudre mon problème en fait. J'ai simplifié la chose :

<?php

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
{
$pseudo = $_POST["pseudo"] ;
$mdp = md5($_POST["mdp"]) ;


$hostname = "*****";
$user = "*****";
$password = "*****";
$nom_base_donnees = "*****";

mysql_connect($hostname, $user, $password) or die(mysql_error());
mysql_select_db($nom_base_donnees);

$sql = "SELECT * FROM joueurs WHERE pseudo = '".$pseudo."' AND mdp = '".$mdp."'";

$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
$result = mysql_fetch_object($req) ;

if(is_object($result))
{
session_start();

$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];

header("Location: index3.php") ;
}
else {
header("Location: index4.htm") ;
}
}
?>

Et maintenant je cherche comment afficher les données mises en session : (j'ai un message d'erreur pour l'instant)

<?php

session_start();


echo "Bienvenue $_SESSION['pseudo']";
echo "Votre Nom : $_SESSION['nom']";
echo "Votre prénom : $_SESSION['prenom']";
echo "Votre email : $_SESSION['email']";

echo '<a href="*******"> Déconnexion</a>';
?>
0
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
c koi le message d'erreur ?
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
J'avais un problème de syntaxe. Je suis aller sur le site de phpdébutant pour corriger ça, ce qui donne :

echo 'Bienvenue ',$_SESSION['pseudo'],'<br />
Nom : ',$_SESSION['nom'],'<br />
Prénom : ',$_SESSION['prenom'],'<br />
Email : ',$_SESSION['email'],'<br />';

mais je n'ai que le pseudo qui s'affiche.

Pourtant si j'ai bien compris le principe, il faut mettre les données en session, ensuite démarrer chaque page avec "session start" pour pouvoir les appeler?
Je ne comprends pas pourquoi il ne m'affiche que le pseudo alors que dans mon code (ci dessus) j'ai bien mis en session également le nom, prénom et email.

Merci de ton aide en tous cas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
Pourtant si j'ai bien compris le principe, il faut mettre les données en session, ensuite démarrer chaque page avec "session start" pour pouvoir les appeler? (oui, vrai)

Je ne suis pas sur que tout soit juste la dedans
echo 'Bienvenue ',$_SESSION['pseudo'],'<br />
Nom : ',$_SESSION['nom'],'<br />
Prénom : ',$_SESSION['prenom'],'<br />
Email : ',$_SESSION['email'],'<br />';

A condition que tes variables de session soient justes :

echo("Bienvenue, ".$_SESSION['pseudo']."<br />
Nom : ".$_SESSION['nom']."<br />
Prénom : ".$_SESSION['prenom']."<br />
Email : ".$_SESSION['email']."'<br />);

Sinon

echo("Bienvenue, ".$_SESSION['pseudo']."<br />");
echo("Nom : ".$_SESSION['nom']."<br />");
echo("Prénom : ".$_SESSION['prenom']."<br />");
echo("Email : ".$_SESSION['email']."'<br />");

N'hésite pas à tout tester pas à pas
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

j'ai testé les 2 méthodes. Pour la 1ere il y a un problème de " apparement que je n'arrive pas à résoudre.

Pour la seconde, je n'obtiens pas les données de session. Seulement ceci :

Bienvenue,
Nom :
Prénom :
Email :

Je cherche de mon côté dès que j'ai un moment

Merci
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Bon j'ai testé autrement.
Je n'ai demandé à afficher seulement le pseudo comme ceci :
<?php
session_start();
echo 'Bienvenue : ' , $_SESSION['pseudo'] , '<br /> ';
echo '<a href="http://.....htm"> Déconnexion</a>';
?>

Ca marche impec.
Par contre quand je remplace 'pseudo' par 'prenom', je n'ai plus rien.
Ca doit venir de mon code de vérification où je met mes variables en session. Je le remet ici car je ne vois pas l'erreur que j'ai faite.

<?php
if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
{
$pseudo = $_POST["pseudo"] ;
$mdp = md5($_POST["mdp"]) ;

$hostname = "";
$user = "";
$password = "";
$nom_base_donnees = "";

mysql_connect($hostname, $user, $password) or die(mysql_error());
mysql_select_db($nom_base_donnees);

$sql = "SELECT nom, prenom, pseudo, email FROM joueurs WHERE pseudo = '".$pseudo."' AND mdp = '".$mdp."'";

$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
$result = mysql_fetch_object($req) ;

if(is_object($result))
{
session_start();

$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];

header("Location: index3.php") ;
}
else {
header("Location: index4.htm") ;
}
}
?>
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
Par contre quand je remplace 'pseudo' par 'prenom', je n'ai plus rien.


verifie là ou tu mets prenom et pseudo
et là où tu affiches
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Non ca a l'air bon pourtant.
Soit j'ai quelque chose qui n'est pas à la bonne place, soit il manque qualque chose.
Je pensais peut etre à regader du côté de $data. Je n'y connais pas grand chose donc je m'aide beaucoup de tutos pour avancer et ce n'est pas évident.
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
n'ayant pas le dormulaire on ne sait pas ce qu'il passe

J-L
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Voici le formulaire : (index2.htm)

<html>
<head>
<title>Connexion au site</title>
</head>
<body>
<form method="post" action="verifpseudo.php">
<table border="0" width="400" align="center">
<tr>
<td width="200"><b>Pseudo</b></td>
<td width="200">
<input type="text" name="pseudo">
</td>
</tr>
<tr>
<td width="200"><b>Mot de passe<b></td>
<td width="200">
<input type="password" name="mdp">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Se connecter">
</td>
</tr>
</table>
</form>
</body>
</html>

Le code de vérif : (verifpseudo.php)

?php

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
{
$pseudo = $_POST["pseudo"] ;
$mdp = md5($_POST["mdp"]) ;


$hostname = "";
$user = "";
$password = "";
$nom_base_donnees = "";

mysql_connect($hostname, $user, $password) or die(mysql_error());
mysql_select_db($nom_base_donnees);

$sql = "SELECT * FROM joueurs WHERE pseudo = '".$pseudo."' AND mdp = '".$mdp."'";

$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
$result = mysql_fetch_object($req) ;

if(is_object($result))
{
session_start();
{
$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];
}
header("Location: index3.php") ;
}
else {
echo '<p>Pseudo ou mot de passe incorrect. Veuillez réessayer.</p>';
include('index2.htm');
exit;

}
}
?>

et la page affichée (index3.php)

<?php

session_start();

echo 'Bienvenue ',$_SESSION['pseudo'],'<br />
Nom : ',$_SESSION['nom'],'<br />
Prénom : ',$_SESSION['prenom'],'<br />
Email : ',$_SESSION['email'],'<br />';

echo '<a href="http://***/deconnexion.php"> Déconnexion</a>';


?>
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Voici le formulaire : (index2.htm)

<html>
<head>
<title>Connexion au site</title>
</head>
<body>
<form method="post" action="verifpseudo.php">
<table border="0" width="400" align="center">
<tr>
<td width="200"><b>Pseudo</b></td>
<td width="200">
<input type="text" name="pseudo">
</td>
</tr>
<tr>
<td width="200"><b>Mot de passe<b></td>
<td width="200">
<input type="password" name="mdp">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Se connecter">
</td>
</tr>
</table>
</form>
</body>
</html>

Le code de vérif : (verifpseudo.php)

<?php

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
{
$pseudo = $_POST["pseudo"] ;
$mdp = md5($_POST["mdp"]) ;


$hostname = "";
$user = "";
$password = "";
$nom_base_donnees = "";

mysql_connect($hostname, $user, $password) or die(mysql_error());
mysql_select_db($nom_base_donnees);

$sql = "SELECT * FROM joueurs WHERE pseudo = '".$pseudo."' AND mdp = '".$mdp."'";

$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
$result = mysql_fetch_object($req) ;

if(is_object($result))
{
session_start();
{
$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];
}
header("Location: index3.php") ;
}
else {
echo '<p>Pseudo ou mot de passe incorrect. Veuillez réessayer.</p>';
include('index2.htm');
exit;

}
}
?>

et la page affichée (index3.php)

<?php

session_start();

echo 'Bienvenue ',$_SESSION['pseudo'],'<br />
Nom : ',$_SESSION['nom'],'<br />
Prénom : ',$_SESSION['prenom'],'<br />
Email : ',$_SESSION['email'],'<br />';

echo '<a href="http://***/deconnexion.php"> Déconnexion</a>';


?>
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
je te suggère de rajouter la ligne en gras pour voir ce que tu reçois du formulaire; cela peut nous aiguiller

Le code de vérif : (verifpseudo.php)

<?php
echo "<pre>";print_r($_POST);echo "</pre>";
if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
{
$pseudo = $_POST["pseudo"] ;
$mdp = md5($_POST["mdp"]) ;
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Je reçois ça :

Array
(
)
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
Bonjour,

ce qui veut dire que le formulaire ne renvoit RIEN
où sont renseignées les zones qui "alimentent" $_POST ?
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Je ne comprends pas bien ta question.
Dans le formulaire, l'utilisateur entre son pseudo et mdp. Ca va vérifier dans la table "joueurs" si ils concordent bien et je veux faire afficher les autres variables concernant ce pseudo (nom, prenom, email) qui sont affichées dans la table.
Je ne pense pas que c'est ce que tu me demandes. Je suis désolé, j'ai un pu de mal.
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
--si le résultat de ce que je t'ai demandé de faire (echo "<pre>";print_r($_POST);echo "</pre>"; ) est vide d'après ta réponse, cela veut dire que $_POST est vide.

donc pour pister ton souci, tu ajoutes

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
{
$pseudo = $_POST["pseudo"] ;
$mdp = md5($_POST["mdp"]) ;
echo "je passe ici<br>";



}
et dans le else de ce if tu mets
echo "je passe par là<br>";


J-L
0
nico3009 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Il me répond je passe par là.
Ca voudrait dire que :
if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
ne retourne rien??

Il me semblait que ça voulait dire que "si le pseudo envoyé n'est pas vide et si le mdp envoyé n'est pas vide" ...
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
$_POST['pseudo'] n'est pas vide : il n'existe pas.


détaillons les if pour suivre :
if (isset($_POST)) {
echo "<pre>";print_r($_POST);echo "</pre>";



else {
echo "$ POST n'existe pas";
}

J-L
0