用PHP、MySQL、Jquery和Ajax创建五星评级系统
我已经下载了本教程,但出现以下错误: 注意:第37行C:\xampp\htdocs\rating\rating.php中的未定义变量:rat 注意:第41行C:\xampp\htdocs\rating\rating.php中的未定义变量:v用PHP、MySQL、Jquery和Ajax创建五星评级系统,php,jquery,mysql,ajax,rating-system,Php,Jquery,Mysql,Ajax,Rating System,我已经下载了本教程,但出现以下错误: 注意:第37行C:\xampp\htdocs\rating\rating.php中的未定义变量:rat 注意:第41行C:\xampp\htdocs\rating\rating.php中的未定义变量:v <?php include("settings.php"); connect(); $ids=array(1,2,3); ?> <html> <head> <script src="jquery.js" type="
<?php
include("settings.php");
connect();
$ids=array(1,2,3);
?>
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<link rel="stylesheet" href="rating.css" />
<script type="text/javascript" src="rating.js"></script>
</head>
<body>
<?php
for($i=0;$i<count($ids);$i++)
{
$rating_tableName = 'ratings';
$id=$ids[$i];
$q="SELECT total_votes, total_value FROM $rating_tableName WHERE id=$id";
$r=mysql_query($q);
if(!$r) echo mysql_error();
while($row=mysql_fetch_array($r))
{
$v=$row['total_votes'];
$tv=$row['total_value'];
$rat=$tv/$v;
}
$j=$i+1;
$id=$ids[$i];
echo'<div class="product">
Rate Item '.$j.'
<div id="rating_'.$id.'" class="ratings">';
for($k=1;$k<6;$k++){
if($rat+0.5>$k)$class="star_".$k." ratings_stars ratings_vote";
else $class="star_".$k." ratings_stars ratings_blank";
echo '<div class="'.$class.'"></div>';
}
echo' <div class="total_votes"><p class="voted"> Rating: <strong>'.@number_format($rat).'</strong>/5 ('.$v. ' vote(s) cast)
</div>
</div></div>';}
?>
</body></html>
问题在于这些变量的作用域。当您试图在while循环之外回显这些变量时;PHP无法找到变量,因为它们是在循环中创建(和分配)的。要解决此问题,只需为外部的两个变量指定一个空白值:
if(!$r) echo mysql_error();
$rat = 0;
$v = 1; // In case there are no records.
while($row=mysql_fetch_array($r))
{
$v = $row['total_votes'];
$tv = $row['total_value'];
$rat = $tv/$v;
}
$rat
和$v
正在while
循环的范围内定义
如果全局声明它们(在循环之外),那么代码的其余部分将识别它们
$rat = 0;
$v = 1;
while($row=mysql_fetch_array($r))
{
$v=$row['total_votes'];
$tv=$row['total_value'];
$rat=$tv/$v;
}
在代码开头的第行添加此项,以避免代码中出现错误
error_reporting(E_ALL ^ E_NOTICE);
大多数情况下,通知错误不会影响程序。
如果您的投票未被记录,请删除您的Cookie并尝试从不同的IP地址进行投票。此脚本具有不接受来自同一IP或vistitor的投票的功能,以避免同一用户对同一产品进行多次投票。请参阅此处:
这结合了一个Javascript代码,该代码生成了不同评级的URL,以及评级前后星星显示的变化
在给出评级后会显示一个叠加DIV,这样就不会立即给出相同的评级。它还将用户的IP地址与评级提交一起存储,以防止来自一个用户的多个评级
这是一个简单易用的脚本,仅使用Javascript和PHP进行星级评定。var cname=document.getElementById(id).className;
var cname=document.getElementById(id).className;
var ab=document.getElementById(id+"_hidden").value;
document.getElementById(cname+"rating").innerHTML=ab;
for(var i=ab;i>=1;i--)
{
document.getElementById(cname+i).src="star2.png";
}
var id=parseInt(ab)+1;
for(var j=id;j<=5;j++)
{
document.getElementById(cname+j).src="star1.png";
}
var ab=document.getElementById(id+“_hidden”).value;
document.getElementById(cname+“rating”).innerHTML=ab;
对于(变量i=ab;i>=1;i--)
{
document.getElementById(cname+i).src=“star2.png”;
}
var-id=parseInt(ab)+1;
对于(var j=id;j
.明星{
字号:x大号;
宽度:50px;
显示:内联块;
颜色:灰色;
}
明星:最后一个孩子{
右边距:0;
}
明星:以前{
内容:'\2605';
}
星空{
颜色:红色;
}
半:之后{
内容:'\2605';
颜色:红色;
位置:绝对位置;
左边距:-20px;
宽度:10px;
溢出:隐藏;
}
无论何时,请不要忘记提及您正在使用的框架(我编辑了这个问题的标签以反映您的问题)。这一点很重要,因为stackoverflow的标记过滤系统依赖于此。谢谢。您可以回送$q
并确认是否有返回行吗?$rat
如果记录集为空,则不会初始化。$v
)我做到了,它向我展示了:从id=1Ok的评分中选择total_votes,total_value,我想你也在mysql客户端中手动检查了这个查询?我认为这些变量应该被初始化,即使没有找到任何记录。明白我的意思吗?是的,我在关注你,感谢你的帮助,它现在工作很酷,它工作了,但它不是t记录投票,我该怎么做?很酷,它起作用了,但它没有记录投票,我该怎么做?–@John更多地阅读了有关恒星系统的内容。虽然这段代码可能回答了这个问题,但提供了关于如何和/或为什么解决问题的额外上下文将提高答案的长期价值。
<style>
.star {
font-size: x-large;
width: 50px;
display: inline-block;
color: gray;
}
.star:last-child {
margin-right: 0;
}
.star:before {
content:'\2605';
}
.star.on {
color: red;
}
.star.half:after {
content:'\2605';
color: red;
position: absolute;
margin-left: -20px;
width: 10px;
overflow: hidden;
}
</style>
<div class="stars">
<?php
$enable = 5.5; //enter how many stars to enable
$max_stars = 6; //enter maximum no.of stars
$star_rate = is_int($enable) ? 1 : 0;
for ($i = 1; $i <= $max_stars; $i++){ ?>
<?php if(round($enable) == $i && !$star_rate) { ?>
<span class="<?php echo 'star half'; ?>"></span>
<?php } elseif(round($enable) >= $i) { ?>
<span class="<?php echo 'star on'; ?>"></span>
<?php } else { ?>
<span class="<?php echo 'star'; ?>"></span>
<?php }
}?>
</div>