Bonjour, Je voulais vous demander ou peut être l'erreur car je ne là vois absolument pas. Je vous laisse quelques screens du code, de la base de donnée et de l'erreur en question. Ligne 149 apparemment.
erreur lecture.php : http://prntscr.com/j2ip5d
erreur reception.php : http://prntscr.com/j2iosy
code lecture.php : http://prntscr.com/j2io2y
code reception.php : http://prntscr.com/j2iocf
Merci d'avance !

14 réponses


Bonjour,
Lors de ton select, tu lui demandes le pseudo et à ligne 149, tu fais $m['objet'].
Comme tu n'as pas demandé "objet" alors il ne peux exister.

Je ne comprends pas.as tu une correction rapide ?

php de reception.php

<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
$msg = $bdd->prepare('SELECT * FROM messages WHERE id_destinataire = ? ORDER BY id DESC');
$msg->execute(array($_SESSION['id']));
$msg_nbr = $msg->rowCount();
?>

dans le html de reception.php

<a href="dashboard.php?id=<?= $_SESSION['id'] ?>">Dashboard</a><br /><br /><br />
   <h3>Votre boîte de réception:</h3>
   <?php
   if($msg_nbr == 0) { echo "Vous n'avez aucun message..."; }
   while($m = $msg->fetch()) {
      $p_exp = $bdd->prepare('SELECT pseudo FROM membres WHERE id = ?');
      $p_exp->execute(array($m['id_expediteur']));
      $p_exp = $p_exp->fetch();
      $p_exp = $p_exp['pseudo'];
   ?>
   <a href="lecture.php?id=<?= $m['id'] ?>"<?php if($m['lu'] == 1) { ?><span style="color:grey"><?php } ?><b><?= $p_exp ?></b> vous a envoyé un message<br />
      <b>Objet:</b> <?= $m['objet'] ?><?php if($m['lu'] == 1) { ?></span><?php } ?></a><br />
   -------------------------------------<br/>
   <?php } ?>

php de lecture.php

<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
   if(isset($_GET['id']) AND !empty($_GET['id'])) {
      $id_message = intval($_GET['id']);
      $msg = $bdd->prepare('SELECT * FROM messages WHERE id = ? AND id_destinataire = ?');
      $msg->execute(array($_GET['id'],$_SESSION['id']));
      $msg_nbr = $msg->rowCount();
      $m = $msg->fetch();
      $p_exp = $bdd->prepare('SELECT pseudo FROM membres WHERE id = ?');
      $p_exp->execute(array($m['id_expediteur']));
      $p_exp = $p_exp->fetch();
      $p_exp = $p_exp['pseudo'];
?>

dans la partie html de lecture.php

<head>
   <title>Lecture du message #<?= $id_message ?></title>
   <meta charset="utf-8" />
</head>
<body>
   <a href="reception.php">Boîte de réception</a>    <a href="envoi.php?r=<?= $p_exp ?>&o=<?= urlencode($m['objet']) ?>">Répondre</a>    <a href="supprimer.php?id=<?= $m['id'] ?>">Supprimer</a><br /><br /><br />
   <h3 align="center">Lecture du message #<?= $id_message ?></h3>
   <div align="center">
      <?php if($msg_nbr == 0) { echo "Erreur"; } else { ?>
      <b><?= $p_exp ?></b> vous a envoyé: <br /><br />
      <b>Objet:</b> <?= $m['objet'] ?>
      <br /><br />
      <?= nl2br($m['message']) ?><br />
      <?php } ?>
   </div>
</body>

Voici le code pour faire une petite correction :)

Pardon, j'ai répondu trop vite.
1/ il est préférable de poser le code ici avec la balise "</>"
2/ Dans le tableau $m, l'index 'objet" est inconnu, comment rempli tu le tableau $m de la page lecture.php ?

D'accord, si tu fais un "var_dump($m);" juste après la ligne "$m = $msg->fetch();". Qu'est que cela t'affiche ?

Je le rempli avec la page admin, car c'est pour envoyer des messages privés à mes membres.
Alors voici le code pageadmin.php
le php au debut du code :

<?php
session_start();

$bdd = new PDO('mysql:host=localhost;dbname=espace_membre' , 'root', '');

if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
   if(isset($_POST['envoi_message'])) {
      if(isset($_POST['destinataire'],$_POST['message']) AND !empty($_POST['destinataire']) AND !empty($_POST['message'])) {
         $destinataire = htmlspecialchars($_POST['destinataire']);
         $message = htmlspecialchars($_POST['message']);
         $id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
         $id_destinataire->execute(array($destinataire));
         $dest_exist = $id_destinataire->rowCount();
         if($dest_exist == 1) {
            $id_destinataire = $id_destinataire->fetch();
            $id_destinataire = $id_destinataire['id'];
            $ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message) VALUES (?,?,?)');
            $ins->execute(array($_SESSION['id'],$id_destinataire,$message));
            $error = "Votre message a bien été envoyé !";
            header("Location: profil.php?id=".$_SESSION['id']);
         } else {
            $error = "Cet utilisateur n'existe pas...";
         }
      } else {
         $error = "Veuillez compléter tous les champs";
      }
   }
   $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');
?>

Le php dans le milieux :

 <h3>Envoi de message</h3>
<form method="POST">
     <input type="text" name="destinataire" value="12345"/>&nbsp;&nbsp;&nbsp;&nbsp;
         <textarea placeholder="Votre message" name="message">Message test</textarea>&nbsp;&nbsp;&nbsp;
         <input type="submit" value="Envoyer" name="envoi_message" />&nbsp;&nbsp;&nbsp;
      </form>

Et j'oublie pas le <? php } ?> à la fin.

D'accord, si tu fais un "var_dump($m);" juste après la ligne "$m = $msg->fetch();". Qu'est que cela t'affiche ?

J'ai testé si ca ne venait pas de

<b>Objet:</b> <?= $m['objet'] ?>

Qui n'est pas définit dans la bdd mais ca enleve une erreur.
Mais ça laisse celle du haut dans lecture.php : https://prnt.sc/j2iosy
Sinon pour reception.php ca enleve celle ligne 150 je crois. (mais y'a deux erreurs ligne 150 apparement.

Quand je fais un vardump...
Sa donne ça : https://prnt.sc/j2k1dm

Donc dans ton tableau $m, tu n'as d'élément "objet".
Et tu n'en n'as pas non plus dans ta table lecture....

Euhh non ... mais je veux le rajouter ! il me serait d'une grande utilité ! Comment faire ? Il faut que je rajoute un objet dans la structure de ma table ? en varchar ?
Merci d'avance !

oui c'est ça, un varchar(255) c'est bien

Et après je dois régler quoi dans le formulaire ?

la je vous laisse réfléchir, vous avez réussi a crée un formulaire donc vous devriez arriver à ajouter un ce qu'il faut si vous avez compris ce que vous avez fait

Alors voilà, plus d'erreur dans lecture.php et otujours l'erreur a ligne 149 et 150 dans reception.php