代码出现Undefined array key 'animal'错误,求原因及解决方法
解决Undefined array key "animal"错误
错误原因
$_REQUEST['animal']报错是因为当前请求中没有传递animal这个参数。$_REQUEST确实能获取GET/POST的用户输入,但前提是请求里包含对应的键值对——直接在浏览器打开这个页面(没有通过URL参数或表单提交animal值)时,自然拿不到这个键,就会触发未定义数组键的警告。
修复方案
1. 先检查参数是否存在再使用
在获取参数前增加判断,避免直接访问不存在的数组键:
// 用空合并运算符判断,不存在则设为null $animalID = $_REQUEST['animal'] ?? null; // 参数不存在时提示并终止脚本 if (!$animalID) { echo "请提供有效的动物ID参数"; exit; }
2. 修复SQL注入风险(重要)
原代码直接把用户输入拼进SQL语句,存在严重的SQL注入漏洞,必须改用预处理语句:
include('dbconn.php'); // 预处理SQL语句 $sql = "SELECT Animalname FROM ANIMAL WHERE animalID=?"; $stmt = mysqli_prepare($conn, $sql); // 绑定参数("i"表示整数类型,对应animalID的类型) mysqli_stmt_bind_param($stmt, "i", $animalID); mysqli_stmt_execute($stmt); $queryresult = mysqli_stmt_get_result($stmt);
3. 确保传递参数
访问页面时,需要通过以下方式之一传递animal参数:
- URL GET参数:比如在浏览器地址栏输入
zoo1.php?animal=1(1为具体动物ID) - 表单POST提交:在前端页面添加表单,通过提交按钮传递
animal值
修改后的完整代码示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Week 6 task 3-2</title> </head> <body> <h1>Zoo - Display Name for One Animal</h1> <p> <?php // 检查并获取参数 $animalID = $_REQUEST['animal'] ?? null; if (!$animalID) { echo "请提供有效的动物ID参数"; exit; } include('dbconn.php'); // 使用预处理语句避免SQL注入 $sql = "SELECT Animalname FROM ANIMAL WHERE animalID=?"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "i", $animalID); mysqli_stmt_execute($stmt); $queryresult = mysqli_stmt_get_result($stmt); // 处理查询结果 if ($queryresult) { $currentrow = mysqli_fetch_assoc($queryresult); if ($currentrow) { $name = $currentrow['Animalname']; echo "\n\tName=$name"; } else { echo "未找到对应ID的动物"; } } mysqli_free_result($queryresult); mysqli_close($conn); ?> </p> </body> </html>
内容的提问来源于stack exchange,提问作者Chris M
相关产品推荐
相关产品推荐

