Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
Bonjour,
Je suis en train de suivre d'un tutoriel de Messagerie pour afficher le message avec la requête de SQL que j'ai fait sur phpmyadmin.
Lorsque j'ai copié et coller la requête dans mon code et sur le navigateur j'obtiens messages des erreurs dans la page messagerie.php :
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':id OR id_receveur = :id) AND statut = 2' at line 3 in C:\xampp\htdocs\EDUTECH\connexionDB.php on line 28
Fatal error: Uncaught Error: Call to undefined method connexionDB::prepare() in C:\xampp\htdocs\EDUTECH\messagerie.php:17 Stack trace: #0 {main} thrown in C:\xampp\htdocs\EDUTECH\messagerie.php on line 17
Voici le code source du fichier messagerie.php
<?php
session_start();
include('connexionDB.php');
if(!isset($_SESSION['id'])){
header('Location: profil.php');
exit;
}
// On récupère les informations de l'utilisateur connecté
$req = $DB->query("SELECT COUNT(id) AS nb_amis
FROM relation
WHERE (id_demandeur = :id OR id_receveur = :id) AND statut = 2");
$req->execute(array('id' => $_SESSION['id']));
$req = $DB->prepare("SELECT u.prenom, u.nom, u.id, m.message, m.date_message, m.id_from, m.lu
FROM(
SELECT IF(r.id_demandeur = :id, r.id_receveur, r.id_demandeur)id_user, MAX(m.id) max_id
FROM relation r
LEFT JOIN messagerie m ON ((m.id_from, m.id_to) = (r.id_demandeur, r.id_receveur) OR (m.id_from, m.id_to) = (r.id_receveur, r.id_demandeur))
WHERE (r.id_demandeur = :id OR r.id_receveur = :id) AND r.statut = 2
GROUP BY IF(m.id_from = :id, m.id_to, m.id_from),r.id)AS DM
LEFT JOIN messagerie m ON m.id = DM.max_id
LEFT JOIN user u ON u.id = DM.id_user
ORDER BY m.date_message DESC");
$req->execute(array('id' => $_SESSION['id']));
$nb_conversation = $req->fetch();
//echo $nb_conversation("$nb_amis");
$afficher_conversations = $req->fetchAll();
// On récupère les informations de l'utilisateur connecté
$afficher_profil = $DB->query("SELECT *
FROM user
WHERE id = ?",
array($_SESSION['id']));
$afficher_profil = $afficher_profil->fetch();
?>
<!DOCTYPE html>
<html>
<head>
<title>Messagerie</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body style="background-color: #edeef0;">
<div id="content-wrapper" class="d-flex flex-column">
<div class="container">
<div class="row">
<div class="col-sm-12">
<table>
<?php
foreach ($afficher_conversations as $ac){
?>
<tr>
<td>Prenom</td>
<td>Lu</td>
<td>Message</td>
<td>Date message</td>
</tr>
<?php
}
?>
</table>
</div>
</div>
</div>
</div>
</body>
</html>
La cause de cette erreur je pense qu'il y a une erreur dans le fichier connexionDB.php dans la ligne 28, mais je ne vois pas dans cette ligne de code une erreur.
Voici le code source du fichier connexionDB.php :
<?php
// Déclaration d'une nouvelle classe
class connexionDB {
private $host = 'localhost';
private $name = 'site';
private $user = 'root';
private $pass = '';
private $connexion;
function __construct($host = null, $name = null, $user = null, $pass = null){
if($host != null){
$this->host = $host;
$this->name = $name;
$this->user = $user;
$this->pass = $pass;
}
try{
$this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
$this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}catch (PDOException $e){
echo 'Erreur : Impossible de se connecter à la BDD !';
die();
}
}
public function query($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
return $req;
}
public function insert($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
}
}
// Faire une connexion à votre fonction
$DB = new connexionDB();
?>
Merci d'avance pour vos réponses.
Bonjour @Flomir,
C'est bon j'ai suivi un autre tutoriel pour créer une messagerie interne.
Je vais mettre ce topic en résolu.
Je m'excuse d'avoir de répondre en retard.
Re @Flomir,
D'accord je vais encore suivre le tutoriel et vérifier les conditions.
Je pense que je fais une erreur dans le code, je m'excuse de t'avoir embêté.
Je te tiendrai au courant dès que je vais terminer corriger le bug.
Merci pour ta réponse.
Regarde bien le tutoriel, vérifie que tes conditions sont bonnes 😅
C'est sûrement une erreur de conditions 😂
Re @Flomir,
J'ai modifié toutes les array, mais je n'arrive pas toujours à me connecter, le même message d'erreur s'affiche que le mail est incorrecte lorsque je me connecte.
Voici le code :
<?php
session_start();
$msg = "";
include("connexionDB.php");
if(isset($_SESSION->id)){
header('Location: user.php');
exit;
}
if(!empty($_POST)){
extract($_POST);
$valid = true;
if(isset($_POST['connexion'])){
$mail = (string) strtolower(trim($mail));
$mdp = (string) strtolower(trim($mdp));
if(empty($mail)){
$valid = false;
$er_mail = "Le mail est incorrecte";
}else{
$req = $DB->prepare("SELECT id
FROM user
WHERE mail = ?");
$req->execute(array($mail));
$utilisateur = $req->fetch();
if(!isset($utilisateur->id)){
$valid = false;
$er_mail = "Le mail est incorrecte";
}
}
if(empty($mdp)){
$valid = false;
$er_mdp = "Le mot de passe est incorrecte";
}
$req = $DB->prepare("SELECT id
FROM user
WHERE mail = ? AND mdp = ?");
$req->execute(array($mail, password_hash($mdp, PASSWORD_DEFAULT)));
$verif_utilisateur = $req->fetch();
if(!isset($verif_utilisateur->id)){
$valid = false;
$er_mail = "Le mail est incorrecte";
}
if($valid){
$req = $DB->prepare("SELECT *
FROM user
WHERE id = ?");
$req->execute(array($verif_utilisateur->id));
$verif_utilisateur = $req->fetch();
$_SESSION['id'] = $verif_utilisateur->id;
$_SESSION['prenom'] = $verif_utilisateur->prenom;
$_SESSION['mail'] = $verif_utilisateur->mail;
header('Location: user.php');
exit;
}
}
}
?>
Je pense que cette ligne de code est la cause d'un problème de la connexion:
if(!isset($utilisateur->id)){
$valid = false;
$er_mail = "Le mail est incorrecte";
}
Car les identifiants (mail et mot de passe) que j'avais créer sont bien enregistrés dans la base de données.
Je n'arrive pas à comprendre pourquoi ce message d'erreur s'affiche lorsque je me connecte alors que le mail et mot de passe d'utilisateur sont bien enregistrés dans la base de données.
Re @Epeny,
Il faut modifier toutes les array:
Par exemple :
if(!isset($utilisateur['id']))
En :
if(!isset($utilisateur->id))
Re @Flomir,
J'ai remplacé cette ligne code les variables de session :
$_SESSION['id'] = $verif_utilisateur['id'];
$_SESSION['prenom'] = $verif_utilisateur['prenom'];
$_SESSION['mail'] = $verif_utilisateur['mail'];
Par celles-ci
$_SESSION['id'] = $verif_utilisateur->id;
$_SESSION['prenom'] = $verif_utilisateur->prenom;
$_SESSION['mail'] = $verif_utilisateur->mail;
Mais je n'arrive pas toujours à me connecter, ça m'affiche le mêmes messages que le mail est incorrecte.
Voici le code :
<?php
session_start();
$msg = "";
include("connexionDB.php");
if(isset($_SESSION['id'])){
header('Location: user.php');
exit;
}
if(!empty($_POST)){
extract($_POST);
$valid = true;
if(isset($_POST['connexion'])){
$mail = (string) strtolower(trim($mail));
$mdp = (string) strtolower(trim($mdp));
if(empty($mail)){
$valid = false;
$er_mail = "Le mail est incorrecte";
}else{
$req = $DB->prepare("SELECT id
FROM user
WHERE mail = ?");
$req->execute(array($mail));
$utilisateur = $req->fetch();
if(!isset($utilisateur['id'])){
$valid = false;
$er_mail = "Le mail est incorrecte";
}
}
if(empty($mdp)){
$valid = false;
$er_mdp = "Le mot de passe est incorrecte";
}
$req = $DB->prepare("SELECT id
FROM user
WHERE mail = ? AND mdp = ?");
$req->execute(array($mail, password_hash($mdp, PASSWORD_DEFAULT)));
$verif_utilisateur = $req->fetch();
if(!isset($verif_utilisateur['id'])){
$valid = false;
$er_mail = "Le mail est incorrecte";
}
if($valid){
$req = $DB->prepare("SELECT *
FROM user
WHERE id = ?");
$req->execute(array($verif_utilisateur['id']));
$verif_utilisateur = $req->fetch();
$_SESSION['id'] = $verif_utilisateur->id;
$_SESSION['prenom'] = $verif_utilisateur->prenom;
$_SESSION['mail'] = $verif_utilisateur->mail;
header('Location: user.php');
exit;
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Connexion</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light fixed-top nav-green">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<div class="dropdown">
<button class="buttons-15 dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Espace membres
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="registration.php">Inscription</a>
<a class="dropdown-item" href="enseignant-2.php">Connexion</a>
</div>
</div>
</ul>
<div class="nav-title">
<a href="accueil.php">
<img class="image2" src="Images/logo.png">
</a>
</div>
</div>
</nav>
<div id="content">
<div class="container" style="margin-top: 55px;">
<div class="row justify-content-md-center">
<div class="col-sm-12 col-md-8 col-lg-6">
<div class="border">
<div class="title">
<h4 class="under-title">SE CONNECTER</h4>
</div>
<form method="post">
<?php
if (isset($er_mail)){
?>
<div class="er-message2"><?= $er_mail ?></div>
<?php
}
?>
<!--label for="mail1">Adresse mail</label>-->
<div class="form-group">
<input type="email" class="form-control" id="mail1" placeholder="Adresse mail" name="mail" value="">
</div>
<?php
if (isset($er_mdp)){
?>
<div class="er-message2"><?= $er_mdp ?></div>
<?php
}
?>
<!--label for="mdp1">Mot de passe</label>-->
<div class="form-group">
<input type="password" class="form-control" id="mdp1" placeholder="Mot de passe" name="mdp" value="">
</div>
<div class="text">
<a class="under-link" href="#">Mot de passe oublié ?</a>
</div>
<button type="submit" class="btn-2" name="connexion">Connexion</button>
<div class="er-message"><?php if ($msg != "") echo $msg . "<br><br>"; ?></div>
</form>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="under-footer">
<p><a class="link-2" href="inscription.php">©</a></p>
<p class="paragraph-10">Copyright 2021</a></p>
</div>
</footer>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
Re @Epeny,
Peux-tu m'en dire plus..
Re @Flomir,
J'ai remplacé cette ligne de code
$_SESSION['id'] = $verif_utilisateur['id'];
Par :
$_SESSION['id'] = $verif_utilisateur->id;
$_SESSION['prenom'] = $verif_utilisateur->prenom;
$_SESSION['mail'] = $verif_utilisateur->mail;
Mais ça ne fonctionne pas, je n'arrive pas toujours à me connecter.
Re @Epeny !
Replace:
$_SESSION['id'] = $verif_utilisateur['id'];
En
$_SESSION['id'] = $verif_utilisateur->id;
Pareillement pour tes autres variables de session..
Ça te donne quoi ?