ホームページ php教程 PHP源码 PHP+jQuery+MySql实现红蓝投票功能

PHP+jQuery+MySql实现红蓝投票功能

Jun 08, 2016 pm 05:20 PM
height nbsp quot red

我们经常会碰到一些投票程序了,今天小编整理了一个简单的红蓝投票功能的实现程序了,有需要了解这种投票的朋友进入来看看吧.

<script>ec(2);</script>

本文是一篇综合知识应用类文章,需要您具备PHP、jQuery、MySQL以及html和css方面的基本知识。本文在《PHP+MySql+jQuery实现的“顶”和“踩”投票功能》一文基础上做了适当改进,共用了数据表,您可以先点击了解这篇文章。

HTML

我们需要在页面中展示红蓝双方的观点,以及对应的投票数和比例,以及用于投票交互的手型图片,本例以#red和#blue分别表示红蓝双方。.redhand和.bluehand用来做手型投票按钮,.redbar和.bluebar展示红蓝双方比例调,#red_num和#blue_num展示双方投票数。
 


   
您对Helloweba提供的文章的看法?

   
非常实用完全看不懂

   

       

       

           
           


       

   

   

       

       

           
           


       

   

CSS

使用CSS将页面美化,加载背景图片,确定相对位置等等,你可以直接复制以下代码,在自己的项目中稍作修改即可。
 
.vote{width:288px; height:220px; margin:60px auto 20px auto;position:relative}
.votetitle{width:100%;height:62px; background:url(icon.png) no-repeat 0 30px; font-size:15px}
.red{position:absolute; left:0; top:90px; height:80px;}
.blue{position:absolute; right:0; top:90px; height:80px;}
.votetxt{line-height:24px}
.votetxt span{float:right}
.redhand{position:absolute; left:0;width:36px; height:36px; background:url(icon.png) no-repeat -1px -38px;cursor:pointer}
.bluehand{position:absolute; right:0;width:36px; height:36px; background:url(icon.png) no-repeat -41px -38px;cursor:pointer}
.grayhand{width:34px; height:34px; background:url(icon.png) no-repeat -83px -38px;cursor:pointer}
.redbar{position:absolute; left:42px; margin-top:8px;}
.bluebar{position:absolute; right:42px; margin-top:8px; }
.redbar span{display:block; height:6px; background:red; width:100%;border-radius:4px;}
.bluebar span{display:block; height:6px; background:#09f; width:100%;border-radius:4px; position:absolute; right:0}
.redbar p{line-height:20px; color:red;}
.bluebar p{line-height:20px; color:#09f; text-align:right; margin-top:6px}

jQuery

当点击手型按钮时,利用jQuery的$.getJSON()向后台php发送Ajax请求,如果请求成功,将会得到后台返回的json数据,jQuery再将json数据进行处理。以下函数:getdata(url,sid),传递了两个参数,url是请求的后台php地址,sid表示当前投票主题ID,我们在该函数中,返回的json数据有红蓝双方的投票数,以及双方比例,根据比例计算比例条的宽度,异步交互展示投票效果。
 
function getdata(url,sid){
    $.getJSON(url,{id:sid},function(data){
        if(data.success==1){
            var w = 208; //定义比例条的总宽度
            //红方投票数
            $("#red_num").html(data.red);
            $("#red").css("width",data.red_percent*100+"%");
            var red_bar_w = w*data.red_percent-10;
            //红方比例条宽度
            $("#red_bar").css("width",red_bar_w);
            //蓝方投票数
            $("#blue_num").html(data.blue);
            $("#blue").css("width",data.blue_percent*100+"%");
            var blue_bar_w = w*data.blue_percent;
            //蓝方比例条宽度
            $("#blue_bar").css("width",blue_bar_w);
        }else{
            alert(data.msg);
        }
    });
}

当页面初次加载时,即调用getdata(),然后点击给红方投票或给蓝方投票同样调用getdata(),只是传递的参数不一样。注意本例中的参数sid我们设置为1,是根据数据表中的id设定的,开发者可以根据实际项目读取准确的id。
 
$(function(){
    //获取初始数据
    getdata("vote.php",1);
    //红方投票
    $(".redhand").click(function(){
        getdata("vote.php?action=red",1);
    });
    //蓝方投票
    $(".bluehand").click(function(){
        getdata("vote.php?action=blue",1);
    });
});

PHP

前端请求了后台的vote.php,vote.php将根据接收的参数,连接数据库,调用相关函数。
 
include_once("connect.php");
 
$action = $_GET['action'];
$id = intval($_GET['id']);
$ip = get_client_ip();//获取ip
 
if($action=='red'){//红方投票
    vote(1,$id,$ip);
}elseif($action=='blue'){//蓝方投票
    vote(0,$id,$ip);
}else{//默认返回初始数据
    echo jsons($id);
}

函数vote($type,$id,$ip)用来做出投票动作,$type表示投票方,$id表示投票主题的id,$ip表示用户当前ip。首先根据用户当前IP,查询投票记录表votes_ip中是否已经存在当前ip记录,如果存在,则说明用户已投票,否则更新红方或蓝方的投票数,并将当前用户投票记录写入到votes_ip表中以防重复投票。
 
function vote($type,$id,$ip){
    $ip_sql=mysql_query("select ip from votes_ip where vid='$id' and ip='$ip'");
    $count=mysql_num_rows($ip_sql);
    if($count==0){//还没有投票
        if($type==1){//红方
            $sql = "update votes set likes=likes+1 where id=".$id;
        }else{//蓝方
            $sql = "update votes set unlikes=unlikes+1 where id=".$id;
        }
        mysql_query($sql);
        
        $sql_in = "insert into votes_ip (vid,ip) values ('$id','$ip')";
        mysql_query($sql_in);
        if(mysql_insert_id()>0){
            echo jsons($id);
        }else{
            $arr['success'] = 0;
            $arr['msg'] = '操作失败,请重试';
            echo json_encode($arr);
        }
    }else{
        $arr['success'] = 0;
        $arr['msg'] = '已经投票过了';
        echo json_encode($arr);
    }
}
函数jsons($id)通过查询当前id的投票数,计算比例并返回json数据格式供前端调用。
 
function jsons($id){
    $query = mysql_query("select * from votes where id=".$id);
    $row = mysql_fetch_array($query);
    $red = $row['likes'];
    $blue = $row['unlikes'];
    $arr['success']=1;
    $arr['red'] = $red;
    $arr['blue'] = $blue;
    $red_percent = round($red/($red+$blue),3);
    $arr['red_percent'] = $red_percent;
    $arr['blue_percent'] = 1-$red_percent;
    
    return json_encode($arr);
}

文中还涉及到获取用户真实IP的函数:get_client_ip(),点击这里可以看相关代码:

//获取用户真实IP
function getIp() {
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
        $ip = getenv("HTTP_CLIENT_IP");
    else
        if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        else
            if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
                $ip = getenv("REMOTE_ADDR");
            else
                if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
                    $ip = $_SERVER['REMOTE_ADDR'];
                else
                    $ip = "unknown";
    return ($ip);
}


最后,贴上Mysql数据表,votes表用来记录红蓝双方的投票总数,votes_ip表则用来存放用户的投票IP记录。

CREATE TABLE IF NOT EXISTS `votes` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `likes` int(10) NOT NULL DEFAULT '0',
  `unlikes` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
 
 
INSERT INTO `votes` (`id`, `likes`, `unlikes`) VALUES
(1, 30, 10);
 
CREATE TABLE IF NOT EXISTS `votes_ip` (
  `id` int(10) NOT NULL,
  `vid` int(10) NOT NULL,
  `ip` varchar(40) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


再次提醒,下载的demo如果运行不了,请先检查数据库连接配置是否正确

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11で明るさを調整する10の方法 Windows 11で明るさを調整する10の方法 Dec 18, 2023 pm 02:21 PM

画面の明るさは、最新のコンピューティング デバイスを使用する上で不可欠な部分であり、特に長時間画面を見る場合には重要です。目の疲れを軽減し、可読性を向上させ、コンテンツを簡単かつ効率的に表示するのに役立ちます。ただし、設定によっては、特に新しい UI が変更された Windows 11 では、明るさの管理が難しい場合があります。明るさの調整に問題がある場合は、Windows 11 で明るさを管理するすべての方法を次に示します。 Windows 11で明るさを変更する方法【10の方法を解説】 シングルモニターユーザーは、次の方法でWindows 11の明るさを調整できます。これには、ラップトップだけでなく、単一のモニターを使用するデスクトップ システムも含まれます。はじめましょう。方法 1: アクション センターを使用する アクション センターにアクセスできる

iPhoneのSafariでプライベートブラウジング認証をオフにする方法は? iPhoneのSafariでプライベートブラウジング認証をオフにする方法は? Nov 29, 2023 pm 11:21 PM

iOS 17 では、Apple はモバイル オペレーティング システムにいくつかの新しいプライバシーおよびセキュリティ機能を導入しました。その 1 つは、Safari のプライベート ブラウジング タブに対して 2 段階認証を要求する機能です。その仕組みとオフにする方法は次のとおりです。 iOS 17 または iPadOS 17 を実行している iPhone または iPad では、Safari でプライベート ブラウズ タブを開いていて、再度アクセスするためにセッションまたはアプリを終了する場合、Apple のブラウザでは Face ID/Touch ID 認証またはパスコードが必要になります。言い換えれば、ロックが解除されている iPhone または iPad を誰かが手に入れても、パスコードを知らなければプライバシーを閲覧することはできません。

FiiO CP13 カセットプレーヤーは透明なレトロな外観で発売 FiiO CP13 カセットプレーヤーは透明なレトロな外観で発売 Jun 16, 2024 am 09:52 AM

FiiOCP13カセットプレーヤーは1月に発表されました。現在、FiiOは2つの新しいモデルでポートフォリオを拡大しています。1つは前面が赤で、もう1つは透明な前面です。後者は、角張ったデザインのレトロな魅力に完全に一致するだけでなく、

ブロックチェーンデータ分析ツールは何ですか? ブロックチェーンデータ分析ツールは何ですか? Feb 21, 2025 pm 10:24 PM

ブロックチェーンテクノロジーの急速な開発により、信頼できる効率的な分析ツールが必要になりました。これらのツールは、ブロックチェーントランザクションから貴重な洞察を抽出するために不可欠です。この記事では、能力、利点、制限など、市場にある主要なブロックチェーンデータ分析ツールのいくつかについて説明します。これらのツールを理解することにより、ユーザーはブロックチェーンテクノロジーの可能性を最大化するために必要な洞察を得ることができます。

Binance LaunchPool No. 64プロジェクト分析と価格予測:Redstone(Red)は市場に火をつけることができますか? Binance LaunchPool No. 64プロジェクト分析と価格予測:Redstone(Red)は市場に火をつけることができますか? Mar 03, 2025 pm 11:45 PM

みなさん、こんにちは。私はあなたの古い友人であり、一年中ビナンスプラザの暗号市場について話す友人です。 Binance Launchpoolは最近、第64フェーズプロジェクトであるRedstone(Red)を開始しました。今日は、赤の詳細な分析を行い、その可能性と価格がどのように開始されたかを確認します。 Binance LaunchPool No. 64プロジェクト分析と価格予測:Redstone(Red)は市場に火をつけることができますか?プロジェクトのバックグラウンドとコアハイライトRedstone(Red)は、Eの目標を持って、分散財務(DEFI)に焦点を当てたマルチチェーンOracleプラットフォームです。

ニコンが映画カメラ会社REDの買収完了を正式発表 ニコンが映画カメラ会社REDの買収完了を正式発表 Apr 13, 2024 pm 09:22 PM

4月13日の当サイトのニュースによると、ニコンはREDの買収を完了したことを正式に発表し、REDは正式にニコンの子会社となった。公式発表によると、新会社のコンサルタントにはRED前社長のジャレッド・ランド氏と創業者のジェームス・ジャナード氏が就任し、新会社のCEOには元RED執行副社長のトミー・リオス氏が就任する。 、新会社の共同CEOに昇格する。発表では、REDの現在の製品ラインナップ、パートナー、ディーラーとの関係に変更はないと述べた。 RED は、保証、修理サービス、カスタマー サービス、および製品全体のサポートを通じて、そのポリシーを引き続きサポートしていきます。ニコンは、ニコンとREDが両社の強みを組み合わせて、独自の製品を開発し、

トラックは寒いです、垂直フィールドのAIエージェントはデッドロックを壊すことができますか? トラックは寒いです、垂直フィールドのAIエージェントはデッドロックを壊すことができますか? Mar 05, 2025 am 07:57 AM

web3垂直aiagent:伝統を破壊し、業界の景観を再構築しますか?このペーパーでは、Web2およびWeb3におけるAIAgentのアプリケーションの違いと、Web3Agentの将来の可能性について説明します。 Web2は、販売、マーケティング、その他の分野をカバーする効率を改善するために広く使用されており、経済的利益が大きく達成されています。 Web3Agentは、ブロックチェーンテクノロジーを組み合わせて、特にDefiフィールドで新しいアプリケーションシナリオを開きます。トークンのインセンティブ、分散型プラットフォーム、およびチェーンデータ分析を介して、Web2Agentを超えた潜在的な潜在性を示しています。 Web3agentは現在課題に直面していますが、その独特の利点により、中期的にはWeb2と競合し、業界の景観を再構築することが期待されています。 web2ai

Dogecoin ETFの価格は何回上昇しますか? Dogecoin ETFの価格は何回上昇しますか? Mar 28, 2025 pm 03:42 PM

承認後のDogeCoin ETFの価格上昇の可能性は2〜5倍であり、現在の価格は0.18ドルに0.6ドルから1.2ドルに上昇する可能性があります。 1)楽観的なシナリオでは、強気市場とムスクの後押しにより、増加は3倍から10倍に達する可能性があります。 2)中立シナリオでは、中程度の資本流入により、増加は1.5倍から3倍です。 3)悲観的なシナリオでは、クマ市場と低流動性により、増加は0.5倍から1.5倍です。

See all articles