Notice: Undefined index auf der Linie 5
Ich erhalte die folgende Fehlermeldung auf PHP & MySQL-Anwendung von Murach ' s PHP und MySQL Buch:
Notice: Undefined index: category_id in C:\xampp\htdocs\book_apps\ch04_product_viewer\index.php on line 5
Habe ich nicht geändert, der code überhaupt (noch), also bin ich davon ausgegangen, es sollte funktionieren out of the box. Die Anwendung zeigt Produkte aus einer Datenbank, wie es sollte, das problem ist nur ich bekomme diese lästigen Fehler.
Hier ist der PHP-code von der index.php Datei:
<?php
require 'database.php';
//Get category ID
$category_id = $_GET['category_id'];
if (!isset($category_id)) {
$category_id = 1;
}
//Get name for current category
$query = "SELECT * FROM categories
WHERE categoryID = $category_id";
$category = $db->query($query);
$category = $category->fetch();
$category_name = $category['categoryName'];
//Get all categories
$query = 'SELECT * FROM categories
ORDER BY categoryID';
$categories = $db->query($query);
//Get products for selected category
$query = "SELECT * FROM products
WHERE categoryID = $category_id
ORDER BY productID";
$products = $db->query($query);
?>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eher ein Hinweis als ein Fehler, bedeutet PHP-sagt Sie etwas, das denkt, dass es falsch ist, aber der code ausgeführt wird ungehindert. Der Grund dafür ist, dass, wenn Sie don ' T-pass -
category_id
im query-string, wird das entsprechende element im array nicht vorhanden ist.Gibt es eine Menge von legacy-PHP-code, der nicht die Existenz von array-Elementen - in diesen Fällen ist es oft unumgänglich, um ändern Sie die error-reporting-level auf einfach stumm die Hinweise. Es kann auch argumentiert werden, dass der Zugriff auf einen GET-parameter sollten nicht auslösen, diese Art der Mitteilung an alle.
Jedoch, die Anpassung der error-reporting-level angesehen wird, das schlecht üben, da die Hinweise oft sehr hilfreich sein. Also, wenn Sie neuen code schreiben, fügen Sie die notwendigen Kontrollen, damit dies nicht passiert.
Den richtigen Weg, dies zu tun, ohne eine Vorherige Ankündigung wäre
Nur überprüfen
isset()
ersten. Wenn Sie versuchen, ordnen Sie es mit$category_id
wenn die$_GET['category_id']
index nicht vorhanden ist, wird PHP die Ausgabe einer Mitteilung.Beachten Sie auch, dass ich gewickelt habe
$_GET['category_id']
mitintval()
zum Schutz gegen ungültige Eingabe, die verwendet werden könnte für SQL-injection.Kürzere version mit einem ternären operator:
??
- operator in PHP 7:$category_id = intval($_GET['category_id'] ?? 0);