这个问题在这里已经有答案了:
使用php的“notice:未定义变量”、“notice:未定义索引”和“notice:未定义偏移量”(28个答案)
两年前关门了。
我正在构建一个小的php论坛,允许用户创建帖子并对其进行评论。我有一个特定的函数,它应该显示一篇文章的回复数,由于某种原因,它只显示零。我也有一个类似的功能,计算意见,它的工作非常完美,所以我不知道是什么问题。
以下是回复的功能代码:
function countReplies($cid, $scid, $tid, $mysqli){
$select = mysqli_query($mysqli, "SELECT category_id, subcategory_id, topic_id FROM replies WHERE ".$cid." = category_id AND
".$scid." = subcategory_id AND ".$tid." = topic_id");
return mysqli_num_rows($select);
}
我是这样称呼它的:
<div class = "content">
disptopics($_GET['cid'], $_GET['scid'], $mysqli);
countReplies($_GET['cid'], $_GET['scid'], $_GET['tid'], $mysqli);
?>
</div>
我得到以下错误:
注意:第56行的c:\xampp\htdocs(a)book2.0\bootstrap\topics.php中的未定义索引:tid
警告:mysqli\u num\u rows()期望参数1是mysqli\u result,在c:\xampp\htdocs(a)book 2.0\bootstrap\content\u function.php的第110行中给出布尔值
我很确定我定义了变量tid,因此对此的任何见解都将不胜感激。
4条答案
按热度按时间8ehkhllq1#
您当前的查询:
应该是:
“$scid.”=和topic\u id=“..$tid);
最后,研究如何清理查询。
https://www.shift8web.ca/2015/06/securing-your-mysql-queries-from-sql-injection-in-php/
anhgbhbe2#
您的错误消息显示$\u get['tid']没有值:
注意:第56行的c:\xampp\htdocs(a)book2.0\bootstrap\topics.php中的未定义索引:tid
脚本的另一个提示:
1) 不要将外部变量直接用于sql查询。在mysqli中,总是使用real_escape_string方法过滤外部sql注入;
2) 将$mysqli声明为全局变量更容易,因此,不需要将其作为参数传递;
3) 您可以使用count(*)mysql方法对条目进行计数,避免大数据传输和操作。
您可以将代码重写为:
此代码是安全的,如果有任何错误或找到的回复数,将返回false。
dfddblmv3#
问题出在
$_GET['tid']
你确定已经定了吗?mysqli_num_rows()
正在返回该错误,因为如果查询失败,它将返回false。检查
$_GET['tid']
先有一些可以接受的东西。我总是建议尝试捕获代码或至少确认结果,特别是如果它是来自用户输入!hiz5n14c4#
错误的意思是相反的,但是“未定义索引”的意思是试图查找索引
tid
在一个数组中,很可能$_GET
,而不是变量$tid
它自己。当发生这种情况时,您会得到一个无效的sql语句,因为您实际上没有向条件传递任何内容,从而导致语法错误:
注意
subcategory_id AND = topic_id
.为了避免这种情况,您应该始终引用您的参数(这将因为变量插值而起作用):
您仍然会得到错误的结果,但要避免其他级联错误。
但是,在调用函数之前,应该检查是否存在所有必需的参数。同时,您还应该学习如何防止sql注入。