En fait j'ai écrit un code de sessions en php, mais les infos entrées par le formulaire de connexion ne sont pas suffisantes :
if(!empty($_POST['email']) AND !empty($_POST['password'])) {
$requser = $db->prepare("SELECT * FROM Membres WHERE email = ? AND password = ?");
$requser->execute(array($email, $password));
$userexist = $requser->rowCount();
if($userexist == 1) {
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['nom'] = $userinfo['nom'];
$_SESSION['email'] = $userinfo['email'];
header("Location: compte.php");
}
Dans ce code, j'ai les information ; id, nom, email.
Mais j'aimerai sur ma page compte.php afficher le mot de passe et le score.
Cependant, avec les infos envoyées par ce formulaire, je ne peut pas les obtenir. Quand je met sur ma page compte.php :
ID : <?php if(isset($_SESSION['id'])) { echo $_SESSION['id']; } ?><br>
Nom : <?php if(isset($_SESSION['nom'])) { echo $_SESSION['nom']; } ?><br>
Email : <?php if(isset($_SESSION['email'])) { echo $_SESSION['email']; } ?><br>
Mot de passe : <?php if(isset($_SESSION['password'])) { echo $_SESSION['password']; } ?>
<br>
Score : <?php if(isset($_SESSION['score'])) { echo $_SESSION['score']; } ?></p></p>
Le score et le password ne s'affichent pas. Je sais cependant que vu que ma variable de session $_SESSION['score'] et $_SESSION['password'] n'existent pas. Mais ma question est la suivante :
J'essaye de m'appuyer sur une variable connue ici (id) pour obtenir dans la base de données une inconnue (fra)
$id = $_SESSION['id'];
$selectm = $db->prepare('SELECT * FROM Membres WHERE id = $id');
$selectm->execute(array(id));
$choicem = $selectm->fetch();
$_SESSION['fra'] = $choicem['fra'];
Si le score existe dejà dans la base, on le recupère à l'aide de l'id:
<?php
$selectm=$db->prepare('select score from membres where id=:a');
$selectm->bindValue('a', (int) $_SESSION['id'], PDO::PARAM_INT);
$selectm->execute();
$choicem=$query->fetch();
//Puis on definit la variable de session
$_SESSION['score']=$choicem['score'];
?>
Si score est une variable se trouvant dans la page:
<?php
$_SESSION['score']=$score;
?>
J'imagine que c'est la variable $score qui contient le score.
J'a réussi juquelà, et j'ai compris ton bout de code, assez simple mais efficace. Le problème c'est que mon navigateur affiche ça :
Fatal error: Call to a member function fetch() on null in /home/u841827489/public_html/connexion.php on line 55 (correspond à la ligne marquée)
Je comprend pas...voici mon nouveau code (connexion.php) :
//je vérifie que l'utilisateur a appuyé sur le bouton
if(isset($_POST['sendc'])) {
//je créer des variables
$email = htmlspecialchars($_POST['email']);
$password = sha1($_POST['password']);
//je vérifie si elles sont remplies
if(!empty($_POST['email']) AND !empty($_POST['password'])) {
//je sélectionne ma table de données
$requser = $db->prepare("SELECT * FROM Membres WHERE email = ? AND password = ?");
$requser->execute(array($email, $password));
$userexist = $requser->rowCount();
if($userexist == 1) {
//j'insère les variables connues jusque là
$_SESSION['id'] = $userinfo['id'];
$_SESSION['nom'] = $userinfo['nom'];
$_SESSION['email'] = $userinfo['email'];
//Le score à trouver
$selectm = $db->prepare('SELECT score FROM Membres WHERE id = :a');
$selectm->bindValue('a', (int) $_SESSION['id'], PDO::PARAM_INT);
$selectm->execute();
//ici la ligne marquée (ou l'erreur se trouve)
$choicem = $query->fetch();
$_SESSION['score'] = $choicem['score'];
//L'autorisation à trouver
$selectm2 = $db->prepare('SELECT autorisation FROM Membres WHERE id=:a');
$selectm2->bindValue('a', (int) $_SESSION['id'], PDO::PARAM_INT);
$selectm2->execute();
$choicem2 = $query->fetch();
$_SESSION['autorisation'] = $choicem2['autorisation'];
//Le score à trouver
$selectm3=$db->prepare('SELECT score FROM Membres WHERE id=:a');
$selectm3->bindValue('a', (int) $_SESSION['id'], PDO::PARAM_INT);
$selectm3->execute();
$choicem3=$query->fetch();
$_SESSION['score']=$choicem3['score'];
//Le message à trouver
$selectm4=$db->prepare('SELECT message FROM Membres WHERE id=:a');
$selectm4->bindValue('a', (int) $_SESSION['id'], PDO::PARAM_INT);
$selectm4->execute();
$choicem4=$query->fetch();
$_SESSION['message']=$choicem4['message'];
//Le score à trouver
$selectm5=$db->prepare('SELECT salaire FROM Membres WHERE id=:a');
$selectm5->bindValue('a', (int) $_SESSION['id'], PDO::PARAM_INT);
$selectm5->execute();
$choicem5=$query->fetch();
$_SESSION['salaire']=$choicem5['salaire'];
//je redirige l'utilisateur vers son compte
header("Location: compte.php");
}
else
{
$erreur = "Email ou mot de passe incorrect";
}
}
else {
$erreur = "Tous les champs doivent être remplis";
}
}
?>
fetch() permet de récupérer une ligne du résultat de ta requête. En l’occurrence tu l'utilises sur la variable $query (qui n'est déclarée nul part dans ton code).
Dans ce cas il faudrait plutôt faire quelque chose comme ceci:
$choicem = $selectm->fetch();
quenti77 a écrit:
Revoir les bases là car c'est des questions que tu ne devrais plus poser si tu fais du sql et des sessions
Effectivement si tu rencontre des difficultés lors de la création de variables ou lors de l'utilisation des fonctions de PDO, tu devrais voir ou revoir les tutoriels sur ces sujets.
Ok ça fonctionne merveille merci beaucoup. OpenClassroom m'est très utile et je remercie ses créateurs de leur travail !!!
Je n'arrive pas à créer une variable PHP
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL