Je suis actuellement entrain de concevoir un site web avec un espace membre à l'aide de PHP et MySQL.
J'ai réussi à réaliser :
L'inscription des utilisateurs au site,
L'envoi de mail pour confirmer leur inscription : lorsque les utilisateurs cliquent sur le lien envoyé par mail, il sont redirigés vers leur espace membre. Le "header" change alors pour afficher un bouton Déconnexion au lieu du formulaire de connexion.
La connexion des utilisateurs au site. Mais lorsque les utilisateurs se connectent au site, le "header" ne se change pas. Je souhaiterez donc qu'il se modifie afin qu'il affiche un bouton Déconnexion à la place du formulaire de connexion.
Si j'ai bien suivi tout le truc, vu que tu n'indiques pas avoir de message d'erreur, j'imagine qu'il n'y a pas de $_SESSION(['auth'] sur header.php tout simplement.
N'as-tu pas oublié le session_start dans ce fichier? (je ne sais pas si on a tout le code ou juste un bout)
ps : pourquoi mélanger 2syntaxes pour les conditions dans ton code ? (parfois avec les accolades, parfois avec les deux points)
Si j'ai bien suivi tout le truc, vu que tu n'indiques pas avoir de message d'erreur, j'imagine qu'il n'y a pas de $_SESSION(['auth'] sur header.php tout simplement.
N'as-tu pas oublié le session_start dans ce fichier? (je ne sais pas si on a tout le code ou juste un bout)
ps : pourquoi mélanger 2syntaxes pour les conditions dans ton code ? (parfois avec les accolades, parfois avec les deux points)
Merci de ta réponse
Si je suis ton raisonnement, à quelle ligne faudrait-il placer le $_SESSION(['auth']) ?
Comme le header est dans chaque page, la session est automatiquement démarrée car session_start est présent sur toutes les pages.
Non je ne t'ai pas mis l'intégralité de mon code. Il manque le footer qui est quasiment vide (sans code PHP), functions.php, qui possède plusieurs fonctions personnelles et database.php qui établit la connexion entre la base de données et le code PHP.
Et bien, si j'ai bien suivi, ton soucis vient du fait que la condition de la ligne 3 dans header.php n'est pas remplie, c'est bien ça ? Donc juste avant le if
Et bien, si j'ai bien suivi, ton soucis vient du fait que la condition de la ligne 3 dans header.php n'est pas remplie, c'est bien ça ? Donc juste avant le if
Quand je fais var_dump($_SESSION), il m'indique bien que l'array est vide.
Alors faut continuer à remonter la piste pour voir où ça plante. Vérifier que le password_verify dans l'index retourne bien true. Si c'est false, var_dump($user) juste après la ligne 22, etc..
J'ai résolu mon problème, en fait, c'est tout con : dans mon header.php, j'avais mis que form action redirige à dashboard.php (Ligne 6).
Il suffisait de supprimer "dashboard.php" et laisser le champ vide. Çà a résolu tous les problèmes !
J'ai un second problème qui se pose, lorsque j'essaye de me connecter à l'espace membre et que je rentre des caractères spéciaux (ex : %), il m'affiche cette erreur :
Notice: Trying to get property of non-object in C:\wamp64\www\Tutoriel_Grafikart\index.php on line 23
J'ai fait un var_dump($user) et il m'indique que c'est un booléen avec la valeur false.
Je me doute que l'erreur doit venir de la requête SQL un peu plus haut mais je ne sais pas où.
Je ne sais pas quoi corriger dans mon code pour que celan n'arrive plus.
Je suis entrain de créer une page d'édition de profil utilisateur :
<?php
session_start();
require_once('../includes/functions.php');
require_once('../includes/database.php');
if(isset($_POST['username']) && $_POST['username_confirm']) {
if(empty($_POST['username']) || $_POST['username'] != $_POST['username_confirm']) {
$_SESSION['flash']['danger'] = "Les noms d'utilisateur que vous avez indiqué ne correspondent pas.";
} else {
$user_id = $_SESSION['auth']->id;
$username = $_POST['username'];
$pdo->prepare('UPDATE users SET username = ? WHERE id = ?')->execute([$username, $user_id]);
header('Location: settings.php');
$_SESSION['flash']['success'] = "Votre nom d'utilisateur a bien été mis à jour.";
}
} elseif(isset($_POST['password']) && $_POST['password_confirm']) {
if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) {
$_SESSION['flash']['danger'] = "Les mots de passe que vous avez indiqué ne correspondent pas.";
} else {
$user_id = $_SESSION['auth']->id;
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]);
$_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour.";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="description" content="Burger Quiz"/>
<meta name="author" content="Titouan Paris"/>
<link rel="stylesheet" href="style.css"/>
<link rel="icon" href="img/icon.png"/>
<title>Burger Quiz - Mon compte</title>
</head>
<body>
<?php
include_once('../includes/header.php');
access_denied_dashboard();
?>
<h1>Mon compte Burger Quiz</h1>
<?php
include_once('../includes/header_dashboard.php');
?>
<h2>Mes paramètres :</h2>
<p>Nom d'utilisateur :</p>
<form class="settings_username" action="" method="post">
<table>
<tr>
<td>
<label for="username_now">Pseudonyme actuel</label>
</td>
<td>
<input type="text" name="username_now" id="username_now" value="<?= ... ?>" disabled>
</td>
</tr>
<tr>
<td>
<label for="username">Nouveau nom d'utilisateur</label>
</td>
<td>
<input type="password" name="username" id="username" placeholder="Nouveau pseudonyme">
</td>
</tr>
<tr>
<td>
<label for="username_confirm">Confirmer nouveau nom d'utilisateur</label>
</td>
<td>
<input type="text" name="username_confirm" id="username_confirm" placeholder="Nouveau pseudonyme">
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="submit" value="Modifier">
</td>
</tr>
</table>
</form>
<p>Adresse email :</p>
<form class="settings_email" action="" method="post">
<table>
<tr>
<td>
<label for="email_now">Adresse email actuelle</label>
</td>
<td>
<input type="email" name="email_now" id="email_now" value="<?= $_SESSION['auth']->email ?>" disabled>
</td>
</tr>
<tr>
<td>
<label for="email">Nouvelle adresse email</label>
</td>
<td>
<input type="email" name="email" id="email" placeholder="Nouvelle adresse email">
</td>
</tr>
<tr>
<td>
<label for="email_confirm">Confirmer nouvelle adresse email</label>
</td>
<td>
<input type="email" name="email_confirm" id="email_confirm" placeholder="Nouvelle adresse email">
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="submit" value="Modifier">
</td>
</tr>
</table>
</form>
<p>Mot de passe :</p>
<form class="settings_password" action="" method="post">
<table>
<tr>
<td>
<label for="password">Nouveau mot de passe</label>
</td>
<td>
<input type="password" name="password" id="password" placeholder="Nouveau mot de passe">
</td>
</tr>
<tr>
<td>
<label for="password_confirm">Confirmer nouveau mot de passe</label>
</td>
<td>
<input type="password" name="password_confirm" id="password_confirm" placeholder="Nouveau mot de passe">
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="submit" value="Modifier">
</td>
</tr>
</table>
</form>
<?php
include_once('../includes/footer.php');
?>
</body>
</html>
Tout fonctionne très bien, mis à part à la ligne 57 : je voudrais récupérer le nom d'utilisateur dans la base de données et l'afficher dans le champ "Nom d'utilisateur actuel". Je ne sais pas comment faire cela.
Pouvez-vous m'aider svp ?
PS : J'ai essayé de faire ça :
$user_id = $_SESSION['auth']->id;
$pdo->prepare('SELECT username FROM users WHERE id = ?')->execute([$user_id]);
Mais il m'affiche l'ID et pas le nom d'utilisateur, je ne comprends pas pourquoi.
tu as quoi quand tu fais un var_dump du résultat de cette requête ?
EDIT : je n'avais pas vu que tu avais ouvert un nouveau sujet pour cette question. Repasse celui-ci en résolu et continue sur le nouveau qui n'a rien à voir avec la question de départ ici. Si les suggestions sont éparpillées, ça n'aide personne :)
- Edité par Caroline B. 23 juillet 2018 à 21:09:05
tu as quoi quand tu fais un var_dump du résultat de cette requête ?
EDIT : je n'avais pas vu que tu avais ouvert un nouveau sujet pour cette question. Repasse celui-ci en résolu et continue sur le nouveau qui n'a rien à voir avec la question de départ ici. Si les suggestions sont éparpillées, ça n'aide personne :)
- Edité par Caroline B. il y a 18 minutes
Ok je fais ça !
Tu pourras répondre sur le nouveau sujet ducoup
- TitouanDev -
Connexion à un espace membre en PHP et MySQL
× 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.