我的以下代码有点问题。我正在尝试创建一个明星raiting系统,以下代码显示raiting细节。但我得到了
未定义变量rate_db通知
来自if(count($rate_db))
我在这里错过了什么,谁能告诉我?
完整代码在这里:
<?php
$query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'");
while($data = mysqli_fetch_assoc($query)){
$rate_db[] = $data;
$sum_rates[] = $data['r_type'];
}
if(count($rate_db)){
$rate_times = count($rate_db);
$sum_rates = array_sum($sum_rates);
$rate_value = $sum_rates/$rate_times;
$rate_bg = (($rate_value)/5)*100;
} else {
$rate_times = 0;
$rate_value = 0;
$rate_bg = 0;
}
?>
答案 0 :(得分:3)
最好将两个阵列初始化为:
$rate_db = array();
$sum_rates = array();
我不知道你在哪里定义这个变量$profile_uid
,如果它是用户输入或会话值,那么你的代码是为SQL注入打开的,你可以使用Prepared Statement来防止SQL攻击。这篇文章将帮助您理解:How can I prevent SQL injection in PHP?
Side Note&amp;建议:强>
还有一件事,你也可以得到r_type
的总和:
$sum_rates += $data['r_type'];
在这种情况下,您需要将$sum_rates
初始化为:
$sum_rates = 0;
然后从IF条件中删除此行:
$sum_rates = array_sum($sum_rates);
好处,无需使用额外的方法。
答案 1 :(得分:2)
$rate_db
变量在while
循环中定义,您从MySQL中获取数据。但是,如果查询未返回任何记录,则不会执行while
循环体,因此将不会定义$rate_db
变量。
解决方案:在$rate_db
循环之前将while
变量定义为空数组。
答案 2 :(得分:2)
您可以初始化变量:
<?php
$rate_db = array();
$sum_rates = array();
$query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'");
while($data = mysqli_fetch_assoc($query)){
$rate_db[] = $data;
$sum_rates[] = $data['r_type'];
}
$rate_times = count($rate_db);
if($rate_times > 0){
$sum_rates = array_sum($sum_rates);
$rate_value = $sum_rates/$rate_times;
$rate_bg = (($rate_value)/5)*100;
} else {
$rate_times = 0;
$rate_value = 0;
$rate_bg = 0;
}
?>
答案 3 :(得分:1)
在使用计数之前,您需要确保它确实包含一些内容,以便您的完整代码可以像这样
<?php
$query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'");
while($data = mysqli_fetch_assoc($query)){
$rate_db[] = $data;
$sum_rates[] = $data['r_type'];
}
if(isset($rate_db) && count($rate_db)){
$rate_times = count($rate_db);
$sum_rates = array_sum($sum_rates);
$rate_value = $sum_rates/$rate_times;
$rate_bg = (($rate_value)/5)*100;
} else {
$rate_times = 0;
$rate_value = 0;
$rate_bg = 0;
}
?>
答案 4 :(得分:1)
$query = mysqli_query($db,"SELECT ryid,r_type FROM profileRaiting WHERE rp_uid='$profile_uid'");
while($data = mysqli_fetch_assoc($query)){
$rate_db[] = $data;
$sum_rates[] = $data['r_type'];
}
因为当你的查询返回空结果时,while循环永远不会变为true,所以永远不会达到$ rate_db [],因此永远不会创建。
要解决此问题,您应该首先在脚本顶部将$ rate_db []声明为空。避免错误。