- Joined
- Nov 15, 2009
- Messages
- 2,234
- Reaction score
- 819
Здравейте,
почти съм 100% сигурен, че сте виждали системата за гласуване с ръчичките като във Vbox7.
Точно такава система съм решил да ви покажа как се прави в днешния урок.
Ще видите сами, че изобщо не е сложно
Първото нещо, което трябва да направите е разбира се базата данни.
След, което ще трябва да създадем и таблиците.
Ето ги и тях:
Така готови сме с базата данни и таблиците в нея.
Сега следва да създадем файла, който ще се свързва с тази база данни.
Нека го кръстим connect.php. В него сложете:
Както сами виждате, имаме възможност да нагласим през колко време да може да гласува даден потребител. Като разбира се може да направите само веднъж за ID.
Сега нека преминем към AJAX файла.
Създайте си файл vote.js и в него поставете следния код:
Така. Готови сме и с AJAX файла. Останаха ни два файла. index.php и vote.php.
Добре сега създайте файл с име vote.php и в него поставете:
Така, след като сме създали и този файл ни остана последният файл, а той е index.php
Създайте го и сложете в него:
Готови сме с файловете 
Остава ви да свалите четирите картинки и да ги поставите в директорията с файловете.
http://uroci.net/downloads/vote.zip
Сега да ви обясня как се използва системата.
Влизате във index.php, който създадохме по-горе като трябва да зададете кое ID да отоври.
Това става по следния начин:
yoursite.com/index.php?id=1
В примера зареждаме ID с номер 1.
Резултатите за всяко ID са индивидуални!
Това е системата. Надявам се да ви е полезна
Credits : HunteR
почти съм 100% сигурен, че сте виждали системата за гласуване с ръчичките като във Vbox7.
Точно такава система съм решил да ви покажа как се прави в днешния урок.
Ще видите сами, че изобщо не е сложно
Първото нещо, което трябва да направите е разбира се базата данни.
След, което ще трябва да създадем и таблиците.
Ето ги и тях:
Code:
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:
<?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 път.
?>
Сега нека преминем към AJAX файла.
Създайте си файл vote.js и в него поставете следния код:
Code:
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
}
Добре сега създайте файл с име vote.php и в него поставете:
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>";
}
}
?>
Създайте го и сложете в него:
HTML:
<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 са индивидуални!
Това е системата. Надявам се да ви е полезна
Credits : HunteR
Attachments
Last edited by a moderator: