Система за гласуване като на Vbox7
Здравейте,
почти съм 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://hunter-bg.net/demo/vote/vote_up.gif
http://hunter-bg.net/demo/vote/vote_up2.gif
http://hunter-bg.net/demo/vote/vote_down.gif
http://hunter-bg.net/demo/vote/vote_down2.gif


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

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


Това става по следния начин:
yoursite.com/index.php?id=1
В примера зареждаме ID с номер 1.

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



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



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

/ Трябва да сте регистриран за да напишете коментар /
От: despper
4:54 02-01-2010
суперрр е системата мерси много !
От: izvunzemnotooo
20:38 04-01-2010
А ако например искам на всяка старница да има вот, няма ли те да бъдат еднакви ? И ако може да ми обясните как да си го направя на всяка страница различен вот. Благодаря Ви !
От: HunteR
21:02 04-01-2010
yoursite.com/index.php?id=1
В примера зареждаме ID с номер 1.

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


--- С две думи сменяш Id-то за всяка страница, по този начин резултатите ще са индивидуални(различни) за всяка страница :)
От: kasm3t4o
22:48 23-01-2010
А каде е това yoursite.com/index.php?id=1 Че немога го намеря
От: Gavin
17:26 17-02-2010
Бачка, супер е :P
От: kasm3t4o
0:33 20-03-2010
---> А каде е това yoursite.com/index.php?id=1 Че немога го намеря
От: paco
22:15 01-04-2010
taka molq opravete snimkite nemogat da se teglqt
От: HunteR
22:29 01-04-2010
Ops. Извинявам се, че са изчезнали :)

Ето свали ги от тук http://web-tourist.net/userfiles/1/1822.rar
От: monte123
9:56 30-05-2010
Извинявам се предварително за невежеството си,но какво да се прави човек неможе да знае всичко...Та въпроса ми е какво точно трябва да направя ако искам да сложа тази система за вот на моя сайт като с еима в предвид,че го правя с една програма web page maker знам,че въпроса ми е нелеп но все пак може ли да ми обясните...
Благодаря предвварително.
От: luckyme
2:08 02-06-2010
линковете ти не работят обнови ги
От: nepoznatia
21:28 28-10-2010
Линковете не работят, затова е дал архив http://web-tourist.net/userfiles/1/1822.rar . Гледаите поне малко, преди да пускате коментари.
От: vbox7_system32
12:00 01-11-2010
Здравейте Бихте ли ми Казали Как да Сложа тази Таблица или този фаил .sql
Обяснете ми го :) За Връзка с мен Скайп: rapara_pz98
От: xmmm
22:38 18-01-2011
Дава ми следната грешка: Parse error: syntax error, unexpected $end in C:\xampp\htdocs\test\index.php on line 38 ,идеи ?
От: xmmm
22:40 18-01-2011
Дава ми следната грешка: Parse error: syntax error, unexpected $end in C:\xampp\htdocs\test\index.php on line 38 ,идеи ?
От: Hous
23:14 12-04-2011
Не разбрах какъв е смисълът на $ q във vote.php
точно след $ id = get id
От: damned
10:37 11-09-2011
Мога ли да помоля някои ако може да ми направи една такава systemа за гласуване, надявам се да има добродушен човек който ще се свърже с мен и да ми помогне, че наистина немога да се справя, мерси.
1