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 Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

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: 알림 센터 사용 알림 센터에 액세스할 수 있습니다.

Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까? Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까? Nov 29, 2023 pm 11:21 PM

iOS 17에서 Apple은 모바일 운영 체제에 몇 가지 새로운 개인 정보 보호 및 보안 기능을 도입했습니다. 그 중 하나는 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는 두 개의 새로운 모델로 포트폴리오를 확장합니다. 하나는 빨간색 전면이 있고 전면은 투명합니다. 후자는 각도 디자인의 복고풍 매력과 완벽하게 일치할 뿐만 아니라

블록 체인 데이터 분석 도구는 무엇입니까? 블록 체인 데이터 분석 도구는 무엇입니까? 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

안녕하세요 여러분, 저는 당신의 오랜 친구입니다. 1 년 내내 Binance Plaza의 Crypto Market에 대해 이야기하는 친구입니다. Binance Launchpool은 최근 64 단계 프로젝트 인 레드 스톤 (Red)을 출시했습니다. 오늘날 우리는 빨간색을 심층적으로 분석하여 잠재력과 가격이 어떻게 출시 된 후에 가격이 어떻게 진행될 수 있는지 알아볼 것입니다. Binance Launchpool No. 64 프로젝트 분석 및 가격 예측 : Redstone (Red)가 시장을 발화시킬 수 있습니까? Project Background 및 Core Highlights Redstone (Red)

Nikon은 영화 카메라 회사 RED의 인수 완료를 공식 발표했습니다. Nikon은 영화 카메라 회사 RED의 인수 완료를 공식 발표했습니다. Apr 13, 2024 pm 09:22 PM

4월 13일 본 사이트의 소식에 따르면 니콘은 RED 인수를 완료했다고 공식 발표했으며, RED는 공식적으로 니콘의 자회사가 되었습니다. 공식 발표에 따르면 RED의 전 사장인 Jarred Land와 창립자 James Jannard가 새 회사의 컨설턴트로 활동할 예정이며, Nikon 이미징 사업부 Keiji Oishi가 RED의 전 부사장인 Tommy Rios가 새 회사의 CEO로 임명될 예정입니다. , 새 회사의 공동 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

수직 프록시 : 응용 시나리오 및 암호화 원시 프록시의 파괴적 잠재력 해석 수직 프록시 : 응용 시나리오 및 암호화 원시 프록시의 파괴적 잠재력 해석 Mar 04, 2025 am 10:21 AM

인공 지능 에이전트 (Aiagents)는 대기업에서 소기업에 이르기까지 기업의 일상 운영에 빠르게 통합되고 있으며, 거의 모든 영역 (거의 모든 영역이 영업, 마케팅, 재무, 법률, 프로젝트 관리, 물류, 고객 서비스 및 워크 플로우 자동화를 포함하여 사용되기 시작했습니다. 우리는 데이터의 수동 처리 시대에서 반복적 인 작업을 수행하며 Excel 테이블을 사용하여 시계 주변의 AI 에이전트의 자율 운영 시대로 이동하여 효율성을 향상시킬뿐만 아니라 비용을 크게 줄입니다. Web2에서 AI 에이전트의 응용 사례 : Ycombinator의 관점 Apten : AI 및 SMS 기술을 결합한 영업 및 마케팅 최적화 도구. Bildai : 건축 청사진을 읽을 수있는 모델,

See all articles