undefind index

Par septime7, il y a 7 ans


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

Lartak, il y a 7 ans

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, il y a 7 ans

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 :/

Lartak, il y a 7 ans

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, il y a 7 ans

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