Bonjour à tous ! j'ai l'impression que c'est une erreur classique mais impossible de comprendre ou de voir là ou est le problème..

voici l'erreur : Notice: Undefined index: id in /Library/WebServer/functions/post.func.php on line 21

Voici ce que me renvoi le navigateur après un var dump/ die :

array(2) { ["page"]=> string(4) "post" ["id3"]=> string(0) "" }

Vous avez des idéees ?

(j'ai essayé de resoudre le problème avec la video de grafikart sur le debbug mais sans succès :/

page index.php :

<?php

include 'functions/main-functions.php';

$pages =scandir('pages/');
if(isset($_GET['page']) && !empty ($_GET['page'])){

    if(in_array($_GET['page']. '.php',$pages)){
      $page= $_GET['page'];
        echo "";
    } else {
    $page = "error";
  }

}else{

  $page = "home";
}

$pages_functions = scandir('functions/');
if(in_array($page.'.func.php', $pages_functions)){

  include 'functions/'.$page.'.func.php';
}

?>

<!DOCTYPE html>
  <html>
    <head>
      <!--Import Google Icon Font-->
      <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
      <!--Import materialize.css-->
      <link type="text/css" rel="stylesheet" href="css/materialize.css"  media="screen,projection"/>

      <!--Let browser know website is optimized for mobile-->
      <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    </head>

    <body>

      <?php 
        include 'body/topbar.php'
      ?>

      <div class="container">
        <?php

        include 'pages/'.$page.'.php';

        ?>
      </div>

      <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
      <!--JavaScript at end of body for optimized loading-->
      <script type="text/javascript" src="js/materialize.js"></script>
      <script type="text/javascript" src="js/script.js"></script>

      <?php
      $pages_js = scandir('js/');
      if(in_array($page.'.func.js',$pages_js)){
        ?>
        <script type="text/javascript" src="js/<?= $page ?>.func.js"></script>
        <?php
      }

?>

    </body>
  </html>

page post.php :

<h2> page des postes </h2>

<?php

$post = get_post();

if ($post == false){
    header("Localisation:index.php?page=error");
}else{

?>
    </div>
    <div class="parallax-container">
        <div class="parallax">
            <img src="img/posts/<?= $post->image ?>" alt="<?= $post->title ?>"/>
        </div>
    </div>

    <div class="container"> 

<?php

}

page post.func.php :

<?php

function  get_post(){
    global $db;

    $req = $db->query("  

        SELECT  posts.id,
                posts.title,
                posts.image,
                posts.content,
                posts.date,
                admins.name 
            FROM posts
            JOIN admins
            ON posts.writer = admins.email 
            WHERE posts.id='{$_GET['id']}' 

            ");

        $result = $req->fetchObject();
        return $result;

}

?>

Merci à tous !

4 réponses


Bonjour.
L'erreur veux simplement dire que tu fais appel à l'index id de la variable $_GET, sauf que celui-ci n'existe pas.
Donc avant de faire ta requête SQL, vérifie que l'index id existe bien dans les paramêtre passés dans l'url et que sa valeur n'est pas vide.
Donc par exemple :


function get_post()
{
    global $db;
    if (!empty($_GET['id'])) {
        // Ton code qui à la fin retourne les résultats
    }
    return false;
}
septime7
Auteur

Merci de ta réponse ! donc je dois remplacer le code de post.func.php par ca :

<?php

function get_post()
{
    global $db;
    if (!empty($_GET['id'])) {
        // Ton code qui à la fin retourne les résultats
    }
    return false;
}

    $req = $db->query("  

        SELECT  posts.id,
                posts.title,
                posts.image,
                posts.content,
                posts.date,
                admins.name 
            FROM posts
            JOIN admins
            ON posts.writer = admins.email 
            WHERE posts.id='{$_GET['id']}' 
            ");

        $result = $req->fetchObject();
        return $result;

?>

cela ne fonctionne pas, la ligne 27 pose toujours problème :/

donc je dois remplacer le code de post.func.php par ca

Non, tu dois remplacer :

// Ton code qui à la fin retourne les résultats

Par :

$req = $db->query("
    SELECT  posts.id, 
    posts.title, 
    posts.image, 
    posts.content, 
    posts.date, 
    admins.name 
    FROM posts 
    JOIN admins 
    ON posts.writer = admins.email 
    WHERE posts.id='{$_GET['id']}'
");
$result = $req->fetchObject();
return $result;

Soit au final :

function get_post()
{
    global $db;
    if (!empty($_GET['id'])) {
        $req = $db->query("
          SELECT  posts.id, 
          posts.title, 
          posts.image, 
          posts.content, 
          posts.date, 
          admins.name 
          FROM posts 
          JOIN admins 
          ON posts.writer = admins.email 
          WHERE posts.id='{$_GET['id']}'
        ");
        $result = $req->fetchObject();
        return $result;
    }
    return false;
}

Et puis, il est totalement inutile de fermer la balise de PHP à la fin de ton fichier.

septime7
Auteur

super ! merci beaucoup pour tes messages, je n'aurais pas pu y arriver seule ! :)