本文介绍使用PHP+MySql+js制作简易的网上投票系统,先介绍一下最终的功能:访客没有投票前,显示投票链接,点击投票链接后调用js函数,通过js函数加载PHP程序,通过PHP程序连接MySql数据库,将投票数据插入到MySql数据库并返回全部票数,同时隐藏投票链接,防止访客多次恶意点击,当然,并不能真正的实现防作弊。

我在“如何增加博客评论数?”一文中曾介绍说,可以在博客评论处添加美女图片来勾引访客评论,所以,这两天我就给自己博客评论处添加了美女照片,为了防止访客每天都看到相同的美女导致审美疲劳,我通过PHP+Ajax技术实现了美女照片每分钟自动切换一张,一共有24*60=1440张,里面有女星、女优、校花、萝莉和御姐等等等等……应有尽有,同时欢迎大家推荐自己收藏的美女照片。目前时区使用的是中国上海时间,打算每月换一次时区。具体实现的方法可以查看我之前写的“美女时钟的制作”这篇文章。

另外,我突然想到可以做一个图片投票功能,让大家评选出自己喜欢的美女,所以,我先研究了一下可能吧的评论投票功能,未果,主要是不知道下面的这个链接网页具体是怎么实现的:

http://www.kenengba.com/wp-admin/?acv_ajax=true&option=0&ID=44131

所以,我只能靠自己仅有的那点PHP+MySql知识硬上了。不知道可能吧的评论投票功能是否用到了MySql数据库,反正我不用MySql数据库是实现不了投票功能的。

欢迎大家评论的同时为自己喜欢的美女投上一票。理论上,这种方法也应该能实现评论投票功能。

php

图片和投票链接显示部分

<script type=text/javascript src=http://www.google.com/jsapi></script>
<script type=text/javascript>
<!
google.load(jquery, 1.2);
function displaymessage(){
$.get(http://www.shuilog.com/time.php, function(data){
var lefttime = data;
setTimeout(displaymessage(),1000*lefttime);
});
$(’#time_clock).load(http://www.shuilog.com/pic.php);
$(’#picvote).load(http://www.shuilog.com/votelink.php);
}
//–>
</script>

通过body onload=”displaymessage()”,每次访问时自动调用js函数displaymessage(),加载pic.php中的美女照片和votelink.php中的投票链接,并每当下一分钟到来时,利用Ajax自动重新加载美女照片和投票链接。美女照片部分请见之前介绍的“美女时钟的制作

投票链接votelink.php部分

<?php
echo $votestr=“<a href=\”javascript:picvote();\”>投票</a>”
?>

当点击“投票”链接时,调用js函数picvote()。

js函数picvote()部分

<script type=“text/javascript”>
<!–
google.load(“jquery”, “1.2″);
function picvote(){
$(‘#picvote’).load(‘http://www.shuilog.com/picvote.php’);
}
//–>
</script>

picvote()函数加载picvote.php文件显示总票数并隐藏投票链接(因为之前加载的投票链接和现在加载的总票数都是在ID为#picvote的div中显示,所以,点击投票链接后就会自动隐藏投票链接并显示总票数,然后在下一分钟到来后又会自动调用js函数displaymessage()重新加载投票链接,以便为新的照片投票)。

修改并读取MySql数据库图片投票数据部分picvote.php

<?php
date_default_timezone_set(‘Asia/Shanghai’);
$nowtime=date(“Hi”);
$mysql_server_name=“localhost”;
$mysql_username=“root”;
$mysql_password=“123456″;
$mysql_database=“shuil”;
$conn=mysql_connect($mysql_server_name, $mysql_username, $mysql_password);
$i_sql=“SELECT  `vote` FROM  `picvote` WHERE TIME =  ‘$nowtime‘”;
$i_result=mysql_db_query($mysql_database, $i_sql, $conn);
$i_row=mysql_fetch_row($i_result);
if(!$i_row[0])
{
$insert_sql=“INSERT INTO  `shuil_shuil`.`picvote` (`time` ,`vote`)VALUES (’$nowtime‘,  ‘0′)”;
$insert_result=mysql_db_query($mysql_database, $insert_sql, $conn);
}
$j=$i_row[0]+1;
$j_sql=“UPDATE  `shuil_shuil`.`picvote` SET  `vote` =  ‘$j‘ WHERE TIME =  ‘$nowtime‘”;
$j_result=mysql_db_query($mysql_database, $j_sql, $conn);
$vote_sql=“SELECT  `vote` FROM  `picvote` WHERE TIME =  ‘$nowtime‘”;
$vote_result=mysql_db_query($mysql_database, $vote_sql, $conn);
$vote_row=mysql_fetch_row($vote_result);
for($i=0;$i < strlen($vote_row[0]);$i++)
{
$numbit=substr($vote_row[0],$i,1);
$imgstr.=“<img src=\”http://www.shuilog.com/img/num/$numbit.png\” height=\”15px\” width=\”15px\”></img>”;
}
echo $img_str=“<p>$imgstr</p>”;
?>

picvote.php文件中先判断是否有当前图片的数据,如果没有则先插入一条当前图片的投票数据time=$nowtime和vote=0,然后将vote值加1并修改数据库;如果已经有了当前图片的投票数据,则直接将vote值加1并修改数据库。然后,读取出总票数并将总票数用图片显示在网页。

读取总票数的语句好像有点多余,不管了,反正也花不了多少时间。

将票数用图片显示

关于PHP函数substr()

substr()函数用来提取字符串中的一段字符串。

使用范例:

<?
echo substr(“abcdef”, 1, 3); // 返回 “bcd”
echo substr(“abcdef”, -2); // 返回 “ef”
echo substr(“abcdef”, -3, 1); // 返回 “d”
echo substr(“abcdef”, 1, -1); // 返回 “bcde”
?>

为了美观一点,让显示的票数和MM们的照片相匹配,我将总票数用图片来显示。

首先,Google 10张0、1、2……9的数字png格式的图片。然后从字符串总票数中提取出单个的数字字符。比如,总票数为254,则从”254″中提取出数字2、5和4。

使用PHP函数strlen()计算出总票数(”254″)的字符串长度$i(3),用PHP函数substr()提取出单个的数字(2、5和4),用“.”将html图片显示代码以string形式连接起来。

for($i=0;$i < strlen($vote_row[0]);$i++)
{
$numbit=substr(”$vote_row[0]“,$i,1);
$imgstr.=”<img src=\”http://www.shuilog.com/img/num/$numbit.png\” height=\”15px\” width=\”15px\”></img>”;
}

人家还要...

已有5 条评论

  1. Avatar

    这个学不来,只能 CP

    [回复]

    shuil 回复:

    CP是什么?

    [回复]

    zwwooooo 回复:

    Copy Paste :lol:

    [回复]

    shuil 回复:

    :arrow: 还有这简写 学习了

  2. Avatar

    这个是我自创的,只在小范围得到传播 :lol:

    [回复]

发表您的高见

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:

.