Problème session php

Résolu/Fermé
nico3009 Messages postés 103 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 - 27 août 2009 à 12:55
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 - 30 août 2009 à 16:33
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)

33 réponses

moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
27 août 2009 à 14:05
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
27 août 2009 à 15:13
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 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
27 août 2009 à 15:47
c koi le message d'erreur ?
0
nico3009 Messages postés 103 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
27 août 2009 à 15:55
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 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
27 août 2009 à 16:06
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
28 août 2009 à 08:33
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 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
28 août 2009 à 08:40
0
nico3009 Messages postés 103 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
28 août 2009 à 09:04
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 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
28 août 2009 à 10:32
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
28 août 2009 à 12:55
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 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
28 août 2009 à 16:36
n'ayant pas le dormulaire on ne sait pas ce qu'il passe

J-L
0
nico3009 Messages postés 103 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
28 août 2009 à 18:42
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
28 août 2009 à 18:42
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 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
28 août 2009 à 18:49
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
28 août 2009 à 19:09
Je reçois ça :

Array
(
)
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
29 août 2009 à 09:03
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
29 août 2009 à 10:05
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 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
29 août 2009 à 10:12
--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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 31 mars 2012 1
29 août 2009 à 10:42
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 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
29 août 2009 à 11:05
$_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