Problème php

Résolu
Bonjour, j'ai une erreur dans mon code php mais je n'arrive pas a trouver où ...
Voici le code :
<?php
error_reporting(E_ALL);
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=aide-systeme', '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'];
?>

<!DOCTYPE html>
<html>
<head>
   <title></title>
   <meta charset="utf-8" />
</head>
<body>
   <a href="reception.php" rel="nofollow noopener noreferrer" target="_blank">Boîte de réception</a>
   <a href="envoi.php?r=<?php echo $p_exp; ?>&o=<?php echo $m['objet']; ?>">Répondre</a>
   <a href="supprimer.php?id=<?php echo $m['id']; ?>">Supprimer</a><br /><br /><br />

   <h3 align="center">Lecture du message #<?php echo $id_message; ?></h3>
   <div align="center">
      <?php if($msg_nbr == 0) { 
         echo "Erreur"; 
      } else { ?>
         <b><?php echo $p_exp; ?></b> vous a envoyé: <br /><br />
         <b>Objet:</b> <?php echo $m['objet']; ?>
         <br /><br />
         <?php echo nl2br($m['message']); ?><br />
      <?php } ?>
   </div>
</body>
</html>
<?php 
      $lu = $bdd->prepare('UPDATE messages SET lu = 1 WHERE id = ?');
      $lu->execute(array($m['id']));
   }
} ?>


et voici l'erreur :
Notice: Use of undefined constant - assumed ' ' in C:\wamp\www\site\lecture.php on line 45

Merci d'avance
Nils0

1 réponse

  1. Modérateur
    Bonjour,

    Commence par placer le code de connexion à ta BDD dans un fichier à part que tu n'auras qu'à inclure au besoin.
    Actives-y les erreurs PDO.
    Comme ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

    Ensuite, pour ce qui est du undefined... regarde ici : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index

    PS : au passage ... n'utilise pas le ->rowCount(); comme indiqué dans le manuel php .. ce n'est pas fiable. Mieux vaut faire un fetchAll et un COUNT dessus....
    1. Ouais c'est vrai ...
    2. J'ai cherché, j'ai aussi modifié le code comme tu me l'a dit, mais je ne trouve toujours pas d'où provient l'erreur
    3. Voilà le code :
      <?php
      session_start();
      try{
         $bdd = new PDO('mysql:host=127.0.0.1;dbname=aide-systeme', 'root', '');
         $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
      } catch(PDOException $e) {
          die('Erreur : ' . $e->getMessage());
      }
      
      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 = count($msg);
            $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();
      ?>
      
      <!DOCTYPE html>
      <html>
      <head>
         <title></title>
         <meta charset="utf-8" />
      </head>
      <body>
         <a href="reception.php" rel="nofollow noopener noreferrer" target="_blank">Boîte de réception</a>
         <a href="envoi.php?r=<?php echo $p_exp['pseudo']; ?>&o=<?php echo $m['objet']; ?>">Répondre</a>
         <a href="supprimer.php?id=<?php echo $m['id']; ?>">Supprimer</a><br /><br /><br />
      
         <h3 align="center">Lecture du message #<?php echo $id_message; ?></h3>
         <div align="center">
            <?php if($msg_nbr == 0) { 
               echo "Erreur"; 
            } else { ?>
               <b><?php echo $p_exp['pseudo']; ?></b> vous a envoyé: <br /><br />
               <b>Objet:</b> <?php echo $m['objet']; ?>
               <br /><br />
               <?php echo nl2br($m['message']); ?><br />
            <?php } ?>
         </div>
      </body>
      </html>
      <?php 
            $lu = $bdd->prepare('UPDATE messages SET lu = 1 WHERE id = ?');
            $lu->execute(array($m['id']));
         }
      } ?>
      

      et voilà la nouvelle erreur :
      Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\site\lecture.php on line 21