我在PHP&上遇到以下错误来自 Murach的PHP和MySQL 书的MySQL应用程序:
Notice: Undefined index: category_id in C:\xampp\htdocs\book_apps\ch04_product_viewer\index.php on line 5
我没有修改代码(但是),所以我认为它应该开箱即用。应用程序应该显示数据库中的产品,唯一的问题是我遇到了这个恼人的错误。
这是index.php文件的PHP代码:
<?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);
?>
答案 0 :(得分:3)
这是一个通知而不是错误,这意味着PHP告诉你它认为错误的东西,但代码是无阻碍地执行的。原因是如果您未在查询字符串中传递category_id
,则GET数组中的相应元素不存在。
有很多遗留的PHP代码没有检查数组元素的存在 - 在这些情况下,通常不可避免地将错误报告级别更改为简单地将通知静音。还可以说,访问GET参数不应该触发这种通知。
但是,调整错误报告级别被视为不良做法,因为通知通常非常有用。因此,在编写新代码时,请添加必要的检查,以免发生这种情况。
在没有收到通知的情况下执行此操作的正确方法是
if (isset($_GET['category_id']))
$category_id = $_GET['category_id'];
答案 1 :(得分:2)
首先检查isset()
。如果在$category_id
索引不存在时尝试将其分配给$_GET['category_id']
,PHP将发出通知。
if (isset($_GET['category_id'])) {
$category_id = intval($_GET['category_id']);
else {
$category_id = 1;
}
另请注意,我已将$_GET['category_id']
与intval()
打包在一起,以防止可用于SQL注入的无效输入。
使用三元运算符的速记版本:
$category_id = isset($_GET['category_id']) ? intval($_GET['category_id']) : 1;