Создание 5-звездной рейтинговой системы с PHP, MySQL, JQuery и Ajax

Я загрузил этот учебник http://megarush.net/5-star-rating-system-with-phpmysqljquery-and-ajax/, но я получаю следующие ошибки:

Примечание. Неопределенная переменная: крыса в C: \ xampp \ htdocs \ rating \ rating.php в строке 37

Примечание. Неопределенная переменная: v в C: \ xampp \ htdocs \ rating \ rating.php в строке 41

<?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; } в 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; } в $rat = 0; $v = 1; while($row=mysql_fetch_array($r)) { $v=$row['total_votes']; $tv=$row['total_value']; $rat=$tv/$v; } 

См. Здесь: http://bgallz.org/988/javascript-php-star-rating-script/

Это сочетает код Javascript, который генерировал URL для разных рейтингов, а также изменение отображения для звезд до и после оценки.

Оверлей DIV отображается после того, как рейтинг указан, так что немедленные оценки могут быть даны тем же самым. Он также сохраняет IP-адрес пользователя с представлением рейтинга, чтобы предотвратить множественные рейтинги от одного пользователя.

Это простой и простой в использовании скрипт с Javascript и PHP для оценки звезд.

Добавьте это в строку в начале, чтобы избежать ошибки уведомления в коде.

 error_reporting(E_ALL ^ E_NOTICE); 

Большая часть времени уведомления об ошибке не влияет на программу. В случае, если ваши голоса не записываются, удалите свои файлы cookie и попытайтесь проголосовать за разные IP-адреса. Этот скрипт имеет функцию, позволяющую не принимать голоса от одного и того же ip или vistitor, чтобы избежать нескольких голосов одних и тех же пользователей на одном и том же продукте.

  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"; } 

Код с сайта http://talkerscode.com/webtricks/star-rating-system-using-php-and-javascript.php

 <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>