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

Система за гласуване

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

Здравейте,

 

почти съм 100% сигурен, че сте виждали системата за гласуване с ръчичките като във Vbox7.

 

 

Точно такава система съм решил да ви покажа как се прави в днешния урок.

 

Ще видите сами, че изобщо не е сложно :)

 

Първото нещо, което трябва да направите е разбира се базата данни.

След, което ще трябва да създадем и таблиците.

Ето ги и тях:

 

CREATE TABLE `votes` (
`id` int(12) NOT NULL,
`yes` int(10) NOT NULL default '0',
`no` int(10) NOT NULL default '0',
UNIQUE KEY(`id`)
);

CREATE TABLE `ips` (
`id` int(12) NOT NULL,
`ip` varchar(25) NOT NULL,
`vote` enum('-1','1') NOT NULL,
`timestamp` int(15) NOT NULL
);

 

 

Така готови сме с базата данни и таблиците в нея.

 

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

 

Нека го кръстим connect.php. В него сложете:

 

<?php
define("HOST", "localhost"); // хост на MySQL - default: localhost
define("USER", "root"); // усер за MySQL - default: root
define("PASS", ""); // парола за MySQL - default: празна
define("BD", "votes"); // име на база данни - default: votes

$db_conn = @mysql_connect(HOST, USER, PASS) or die(mysql_error());
@mysql_select_db(BD, $db_conn) or die(mysql_error());

define("TIMESTAMP_VOTE", 24); // през колко време да може да гласува дадено IP в часова. 0 - само по 1 път.
?>

 

Както сами виждате, имаме възможност да нагласим през колко време да може да гласува даден потребител. Като разбира се може да направите само веднъж за ID.

 

Сега нека преминем към AJAX файла.

 

Създайте си файл vote.js и в него поставете следния код:

 

var xmlHttp

function showHint(str, id)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request")
return
}
var url="vote.php"
url=url+"?q="+str
url=url+"&id="+id+"&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("txtHint").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
}

 

Така. Готови сме и с AJAX файла. Останаха ни два файла. index.php и vote.php.

 

Добре сега създайте файл с име vote.php и в него поставете:

 

<?php
require "connect.php";

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

if (($q == -1 || $q == 1) && is_numeric($id) && $id > 0)
{
$glasove = mysql_fetch_object(mysql_query("SELECT `yes`,`no` FROM `votes` WHERE `id` = '$id' LIMIT 1"));
$timestamp_vote = (is_numeric(TIMESTAMP_VOTE) && TIMESTAMP_VOTE > 0) ? time() - (TIMESTAMP_VOTE * 3600) : 0;
$ip_count = @mysql_result(mysql_query("SELECT COUNT(*) FROM `ips` WHERE `id` = '$id' AND `ip` = '$ip' AND `timestamp` > '$timestamp_vote' LIMIT 1"), 0);
if (!$ip_count)
{
$yes = ($q == 1) ? 1 : 0;
$no = ($q == -1) ? 1 : 0;
$procent_yes = @round((($glasove -> yes + $yes) / (($glasove -> yes + $yes) + $glasove -> no)) * 100);
$procent_no = @round((($glasove -> no + $no) / ($glasove -> yes + ($glasove -> no + $no))) * 100);
$vote_yes = ($q == 1) ? "vote_up" : "vote_up2";
$vote_no = ($q == -1) ? "vote_down" : "vote_down2";
$sql = "INSERT INTO `votes` (`id`,`yes`,`no`) VALUES ('$id','$yes','$no')";
if (!mysql_query($sql))
{
mysql_query("UPDATE `votes` SET `yes` = yes + $yes,`no` = no + $no WHERE `id` = '$id'");
}

$count_ip = mysql_fetch_object(mysql_query("SELECT COUNT(*) as 'kolko' FROM `ips` WHERE `id` = '$id' AND `ip` = '$ip' LIMIT 1"));
if (!$count_ip -> kolko)
{
mysql_query("INSERT INTO `ips` (`id`,`ip`,`vote`,`timestamp`) VALUES ('$id','$ip','$q','".time()."')");
}
else
{
mysql_query("UPDATE `ips` SET `vote` = '$q',`timestamp` = '".time()."' WHERE `id` = '$id' AND `ip` = '$ip' LIMIT 1");
}

echo "<img src="".$vote_yes.".gif" border="0"> <b>".(($glasove -> yes) + $yes)." ($procent_yes%)</b> <img src="".$vote_no.".gif" border="0"> <b>".(($glasove -> no) + $no)." ($procent_no%)</b><br />Гласували: <b>".(($glasove -> yes + $yes) + ($glasove -> no + $no))."</b>";
}
else
{
echo "<img src="".$vote_yes.".gif" border="0"> <b>".(($glasove -> yes) + $yes)." ($procent_yes%)</b> <img src="".$vote_no.".gif" border="0"> <b>".(($glasove -> no) + $no)." ($procent_no%)</b><br />Гласували: <b>".(($glasove -> yes + $yes) + ($glasove -> no + $no))."</b>";
}
}
?>

 

Така, след като сме създали и този файл ни остана последният файл, а той е index.php

 

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

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Система за гласуване</title>
<?php $id = (is_numeric($_GET['id']) && $_GET['id'] > 0) ? $_GET['id'] : 0; ?>
<script type="text/javascript" src="vote.js"></script>
<script language="JavaScript">
function movepic(img_name,img_src) {
document[img_name].src=img_src;
}
</script>
</head>
<?php
require "connect.php";
$row = mysql_fetch_array(mysql_query("SELECT `yes`,`no` FROM `votes` WHERE `id` = '$id'"));
$yess = (empty($row['yes'])) ? 0 : $row['yes'];
$noo = (empty($row['no'])) ? 0 : $row['no'];

$timestamp_vote = (is_numeric(TIMESTAMP_VOTE) && TIMESTAMP_VOTE > 0) ? time() - (TIMESTAMP_VOTE * 3600) : 0;

$query = mysql_query("SELECT `vote` FROM `ips` WHERE `id` = '$id' AND `ip` = '".$_SERVER['REMOTE_ADDR']."' AND `timestamp` > '$timestamp_vote' LIMIT 1");
$vote_ip = mysql_fetch_object($query);
$vote_yes = (($vote_ip -> vote) == 1) ? "vote_up" : "vote_up2";
$vote_no = (($vote_ip -> vote) == -1) ? "vote_down" : "vote_down2";

$procent_yes = @round(($yess / ($yess + $noo)) * 100);
$procent_no = @round(($noo / ($yess + $noo)) * 100);
?>
<body>

<div id="txtHint"><?php if (!mysql_num_rows($query)) { ?><a href="javascript:void(null)" onclick="showHint('1','<?=$id?>')" onmouseover="movepic('pic1','vote_up.gif');"
onmouseout="movepic('pic1','vote_up2.gif');"><? } ?><img name="pic1" src="<?=$vote_yes?>.gif" border="0"><?php if (!mysql_num_rows($query)) { ?></a><? } ?> <b><?=$yess?> (<?=$procent_yes?>%)</b>
<?php if (!mysql_num_rows($query)) { ?><a href="javascript:void(null)" onclick="showHint('-1','<?=$id?>')" onmouseover="movepic('pic2','vote_down.gif');"
onmouseout="movepic('pic2','vote_down2.gif');"><? } ?><img name="pic2" src="<?=$vote_no?>.gif" border="0"><?php if (!mysql_num_rows($query)) { ?></a><? } ?> <b><?=$noo?> (<?=$procent_no?>%)</b><br />
Гласували: <b><?=($yess+$noo)?></b></div>

</body>
</html>

 

Готови сме с файловете :)

 

Остава ви да свалите четирите картинки и да ги поставите в директорията с файловете.

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

 

 

Сега да ви обясня как се използва системата.

 

Влизате във index.php, който създадохме по-горе като трябва да зададете кое ID да отоври.

Това става по следния начин:

yoursite.com/index.php?id=1

В примера зареждаме ID с номер 1.

 

Резултатите за всяко ID са индивидуални!

 

Демо може да видите тук -> ДЕМО

 

 

Това е системата. Надявам се да ви е полезна :)



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

geko на 19.12 2009 в 01:49ч.
сипер е браво за урока
bgwolf на 21.12 2009 в 21:51ч.
браво !!!
rumenrs на 23.01 2010 в 13:12ч.
дава ми грешка: "Access denied for user 'root'@'localhost' (using password: NO)"
martyyy на 29.01 2010 в 05:02ч.
има грешка някаде в кода ама немога да намеря каде
martyyy на 29.01 2010 в 13:21ч.
има грешка някаде в кода ама немога да намеря каде
martyyy на 29.01 2010 в 13:25ч.
Parse error: syntax error, unexpected $end in C:\xampp\htdocs\gaf\dindex.php on line 33 това ми изписва
martyyy на 29.01 2010 в 14:25ч.
намерих ама сега пак когато натисна да гласувам ми изчезват картинките и всичко е празно
oonnzzyy на 15.03 2010 в 10:45ч.
брато точно такъв прграмист търся скайпа ми е oonnzzyy очаквам те HunteR
hristos на 18.03 2010 в 09:32ч.
сори но демото не се активира
Qarizma на 18.11 2010 в 16:24ч.
добър ден може ли да ми кажете как да си добавям тая система в сайта си но на всеки User да не ми покаже един и същ глас .... скайп:phpmanqk@abv.bg Моля ви Спешно ми Трябва ПОМОЩА ви ,,,,
djskype на 10.08 2013 в 15:03ч.
Здравейте,

Всичко съм направил както е показано в урока, но когато кликна да гласувам ми излиза следната грешка:

Parse error: syntax error, unexpected '"', expecting ',' or ';' in /home/mallonli/public_html/blog/vote.php on line 37,
според вас от какво може да е това?
kras79 на 14.02 2015 в 17:39ч.
echo " ".(($glasove -> yes) + $yes)." ($procent_yes%) ".(($glasove -> no) + $no)." ($procent_no%)Гласували: ".(($glasove -> yes + $yes) + ($glasove -> no + $no))."";
}
else
{
echo " ".(($glasove -> yes) + $yes)." ($procent_yes%) ".(($glasove -> no) + $no)." ($procent_no%)Гласували: ".(($glasove -> yes + $yes) + ($glasove -> no + $no))."";


тука тези редове така требва да бъдат изпуснати са \ тези 4ерти за да не си влияят кавичките

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


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