Помогни ни да направим Uroci.net по - богат! Добави урок

5 Stars Rating система

PHP » PHP
HunteR   трудност:    видян: 6275

Здравейте,

 

сега съм решил да споделя с вас една система за гласуване, която преди време правих за 1 сайт, който така и не беше завършен.

 

Това е така наречената 5 Stars Rating система.

 

Сега като за начало ще започнем от структурата на базата данни.

 

Правим си една база данни и вътре слагаме:

 

CREATE TABLE `star_vote` (
`id` int(15) NOT NULL,
`rating` int(10) NOT NULL default '0',
`glasuvali` int(5) NOT NULL default '0',
UNIQUE KEY(`id`)
);

CREATE TABLE `star_vote_ip` (
`id` int(15) NOT NULL,
`ip` varchar(30) NOT NULL
);

 

Така след като сме създали и вкарали структурата на таблицата в базата данни, следва да преминем към следващия файл.

 

Значи създавате си файл connect.php и в него слагате:

 

<?php
define(DB_HOST, "localhost");
define(DB_USER, "root");
define(DB_PASS, "");
define(DB_NAME, "5stars");

$conn = @mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
@mysql_select_db(DB_NAME, $conn) or die(mysql_error());

define(STARS, 5); // от тук може да окажете колко звезди да се изобразяват
?>

 

След като сте го създали трябва да промените настройките за връзка с базата данни, като имате възможност да промените и звездите, които да бъдат изобразявани.

 

Сега следва да си направим файл config.php. В него слагаме:

 

<?php
require "connect.php";

$id = $_GET['id']; // взимаме ID;

$display_rating = false;
if (is_numeric($id) && $id > 0) // проверяваме дали ID е число и дали е по-голямо от 0
{
$display_rating = true;
$vote_allow = true;

$votes = array();

$row = mysql_fetch_object(mysql_query("SELECT `rating`, `glasuvali`, COUNT(*) as 'kolko' FROM `star_vote` WHERE `id` = '$id' LIMIT 1"));
if ($row -> kolko) // правим проверка дали вече е гласувано поне 1 път за това ID
{
$rating = @round($row -> rating / $row -> glasuvali); // присвояваме рейтинга в променлива $rating

$votes = array_pad($votes, $rating, "starvoted.png"); // пълним масива $votes със starvoted.png(пълни звездички)
$ip_vote = @mysql_result(mysql_query("SELECT COUNT(*) FROM `star_vote_ip` WHERE `id` = '$id' AND `ip` = '".$_SERVER['REMOTE_ADDR']."'"), 0);
if ($ip_vote) $vote_allow = false; // правим проверка дали вече е гласувано през това IP и ако е гласувано забраняваме следващо гласуване
}
$votes = array_pad($votes, STARS, "starunvoted.png"); // допълваме масива $votes със starunvoted.png(празни звездички)
}
?>

 

Така, готови сме и с този файл. Няма какво да променяте по него.

 

Сега се предвижваме до файл vote_star.js. В него също няма какво да променяте.

 

Ето го и неговото съдържание:

 

var xmlHttp

function vote_star(id, str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request")
return
}
var url="vote_star.php"
url=url+"?id="+id
url=url+"&str="+str+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("star_votes").innerHTML=xmlHttp.responseText;
}
}

function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

 

Сега следва файла vote_star.php. В него сложете:

 

<?php
require "connect.php";

$id = $_GET['id'];
$str = $_GET['str'];
$ip = $_SERVER['REMOTE_ADDR'];

if (is_numeric($id) && $id > 0 && in_array($str, range(1,STARS))) // правим проверка дали ID е число и дали е по-голямо от 0. Правим също проверка дали рейтинга, който сме избрали е от 1 до променливата STARS
{ // ако всико е ОК продължаваме

$votes = array();

$row = mysql_fetch_object(mysql_query("SELECT `rating`, `glasuvali`, COUNT(*) as 'kolko' FROM `star_vote` WHERE `id` = '$id' LIMIT 1"));
if ($row -> kolko) // правим проверка дали вече е гласувано за това ID
{ // ако е гласувано
$ip_vote = @mysql_result(mysql_query("SELECT COUNT(*) FROM `star_vote_ip` WHERE `id` = '$id' AND `ip` = '$ip'"), 0);

if (!$ip_vote) // правим проверка дали IP е гласувало за това ID. Ако не е гласувано продължаваме
{
$new_rating = $row -> rating + $str; // добавяме новия рейтинг към стария
$new_glasuvali = $row -> glasuvali + 1; // добавяме 1 към общо гласувалите

$rating = @round($new_rating / $new_glasuvali); // изчисляваме средния рейтинг
$votes = array_pad($votes, $rating, "starvoted.png"); // пълним масива $votes със starvoted.png(пълни звездички)

mysql_query("UPDATE `star_vote` SET `rating` = '$new_rating',`glasuvali` = '$new_glasuvali' WHERE `id` = '$id'"); // упдейтваме информацията за даденото ID
mysql_query("INSERT INTO `star_vote_ip` (`id`,`ip`) VALUES ('$id','$ip')"); // записваме IP на гласувалия
}
}
else // ако все още никой не е бил гласувал за това ID
{
$rating = $str;
$votes = array_pad($votes, $rating, "starvoted.png"); // пълним масива $votes със starvoted.png(пълни звездички)

mysql_query("INSERT INTO `star_vote` (`id`, `rating`, `glasuvali`) VALUES ('$id', '$str', '1')"); // създаваме ново ID с неговия рейтинг
mysql_query("INSERT INTO `star_vote_ip` (`id`,`ip`) VALUES ('$id','$ip')"); // записваме IP на гласувалия
}

$votes = array_pad($votes, STARS, "starunvoted.png"); // допълваме масива $votes със starunvoted.png(празни звездички)

if ($rating)
{
for ($i=0;$i<STARS;$i++)
echo "<img src="".$votes[$i]."" border="0">";
}
}
?>

 

Така почти приключихме. Остана ни само index.php.

Създайте го и сложете в него:

 

<?php
require "config.php";
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Демо</title>
<?php
if ($display_rating)
{
?>
<script src="vote_star.js" type="text/javascript"></script>
<script type="text/javascript">
function star_vote(id)
{
for (i=1;i<=<?=STARS?>;i++)
{
if (i <= id)
{
document[i].src="starvoted.png";
}
else
{
document[i].src="starunvoted.png";
}
}
}
function normal()
{
<?php
for ($i=0,$i2=1;$i<STARS;$i++,$i2++)
{
echo "document[$i2].src="".$votes[$i]."";n";
}
?>
}
</script>
<?php
}
?>
</head>
<body>

<?php
if ($display_rating)
{
?>
<b>Гласувай:</b>
<div id="star_votes">
<?php
for ($i=0,$i2=1;$i<STARS;$i++,$i2++)
{
?>
<?php if ($vote_allow) { ?><a href="javascript:void(null)" onMouseOver="star_vote('<?=$i2?>')" onMouseOut="normal()" onClick="vote_star('<?=$id?>', '<?=$i2?>')"><?php } ?><img id="<?=$i2?>" src="<?=$votes[$i]?>" border="0"><?php if ($vote_allow) { ?></a><?php }
}
?>
</div>
<?php
}
else echo "<b>Невалидно ID!</b>";
?>

</body>
</html>

 

Това е урока. Ако всичко сте направили както трябва, би трябвало да ви се получи това -> ДЕМО

А и да не забравя. Ето и картинките от системата. Сложете ги при файловете.

 

http://uroci.net/downloads/vote2.zip

 

 

Ето и как да го използвате. Отваряте си index.php като след него слагате ?id=[тук ID]

Примерно: site.com/index.php?id=1

За всяко ID рейтинга е индивидуален :)

Надявам се системата да ви е от полза!



Коментари (4)

NePoZnAtIa на 30.08 2009 в 18:54ч.
Ааа, помощ не успях тва с базата данни каде и как да го напиша, че да направи база данни?Щото не знам как да го кръстя например дали да е base.txt или vote.txt а може би base.php, vote.php, vote.html, base,html?Не схващам това с базата данни...
presk0o на 04.03 2010 в 11:49ч.
И аз не разбрах как и къде да напиша базата данни и също така как да ги кръстя ??
lekov на 04.03 2010 в 13:52ч.
урочето е супер браво на автора супер лесно го подкарах благодаря
djskype на 31.08 2013 в 15:52ч.
Някой малко да помогне!!! Имам лек проблем със системата. Изкача ми следната грешка: Parse error: syntax error, unexpected T_LNUMBER, expecting ',' or ';' in /home/mallonli/public_html/reitingbg.com/reiting/vote_star.php on line 44

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com