PHP開發 紅藍兩方投票功能教學之PHP

建立vote.php檔案


#前端請求了後台的vote .php,vote.php將根據接收的參數,連接資料庫,呼叫相關函數。


<?php
header("Content-type:text/html;charset=utf-8");
$action = $_GET['action'];
$id = 1;
$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){

#   $conn=mysqli_connect("localhost","root","root","vote");
   $ip_sql="select ip from votes_ip where vid='$id' and ip='$ip'";
   $que=mysqli_query($conn,$ip__##   $que=mysqli_query($conn,$ip_);##a_ ); $que);
   if($count==0){//尚未投票
       if($type==1){//紅方
        +1 where id=".$id;
       }else{//藍色方
            $ }
mysqli_query($conn,$sql);

       $sql_in = "insert into votes_ip (vid,ip) values  conn,$sql_in);
       if($result > 0){
            $arr['success'] = 0;
$arr['msg'] = '操作失敗,重試';
           echo json_encode($arr);
      0;
       $arr['msg'] = '已經投票過了';
       echo json_encode($arr);
   }
#}
#}





'}

函數jsons($id)透過查詢目前id的投票數,計算比例並傳回json資料格式供前端呼叫。

function jsons($id){ 
    $query = mysql_query("select * from votes where id=".$id
    $red = $row['likes']; 
    $blue = $row['unlikes']; 
    $arr['success']=1; 
    $arr['success']=1; 
   ] = $red; 
    $arr['blue'] = $blue; 
    $red_percent = round($red/($red+$ ),3); = $red_percent; 
    $arr['blue_percent'] = 1-$red_percent; 
     
   # return json_encode($arr 
   #1return json_encode($arr 
  

取得使用者真實IP的函數:get_client_ip()

function get_client_ip() {
   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP") , "未知"))
       $ip = getenv("HTTP_CLIENT_IP");
   else
      ED_FOR"), "未知"))
           $ip = getenv("HTTP_X_FORWARDED_FOR");
       elsec mp(getenv("REMOTE_ADDR"), "未知"))
               $ ip = getenv( "REMOTE_ADDR");
           else
               if secmp($_SERVER['REMOTE_ADDR'], "未知"))
                   $ip = $_SERVER['REMOTE_ADDR'];
          $ip = 「未知」;
   return ($ip);
#}




######################################################################################################################################### # ######vote.php完整程式碼##########
<?php
header("Content-type:text/html;charset=utf-8");
$action = $_GET['action'];
$id = 1;
$ip = get_client_ip();//获取ip
if($action=='red'){//红方投票
    vote(1,$id,$ip);
}elseif($action=='blue'){//蓝方投票
    vote(0,$id,$ip);
}else{
    echo jsons($id);
}
function vote($type,$id,$ip){
    $conn=mysqli_connect("localhost","root","root","vote");
    $ip_sql="select ip from votes_ip where vid='$id' and ip='$ip'";
    $que=mysqli_query($conn,$ip_sql);
    $count=mysqli_num_rows($que);
    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;
        }
        mysqli_query($conn,$sql);
        $sql_in = "insert into votes_ip (vid,ip) values ('$id','$ip')";
        $result = mysqli_query($conn,$sql_in);
        if($result > 0){
            echo jsons($id);
        }else{
            $arr['success'] = 0;
            $arr['msg'] = '操作失败,请重试';
            echo json_encode($arr);
        }
    }else{
        $arr['success'] = 0;
        $arr['msg'] = '已经投票过了';
        echo json_encode($arr);
    }
}
function jsons($id){
    $conn=mysqli_connect("localhost","root","root","vote");
    $que_sql="select * from votes where id=".$id;
    $query = mysqli_query($conn,$que_sql);
    $row = mysqli_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
function get_client_ip() {
    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);
}
?>
##################
繼續學習
||
<?php header("Content-type:text/html;charset=utf-8"); $action = $_GET['action']; $id = 1; $ip = get_client_ip();//获取ip if($action=='red'){//红方投票 vote(1,$id,$ip); }elseif($action=='blue'){//蓝方投票 vote(0,$id,$ip); }else{ echo jsons($id); } function vote($type,$id,$ip){ $conn=mysqli_connect("localhost","root","root","vote"); $ip_sql="select ip from votes_ip where vid='$id' and ip='$ip'"; $que=mysqli_query($conn,$ip_sql); $count=mysqli_num_rows($que); 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; } mysqli_query($conn,$sql); $sql_in = "insert into votes_ip (vid,ip) values ('$id','$ip')"; $result = mysqli_query($conn,$sql_in); if($result > 0){ echo jsons($id); }else{ $arr['success'] = 0; $arr['msg'] = '操作失败,请重试'; echo json_encode($arr); } }else{ $arr['success'] = 0; $arr['msg'] = '已经投票过了'; echo json_encode($arr); } } function jsons($id){ $conn=mysqli_connect("localhost","root","root","vote"); $que_sql="select * from votes where id=".$id; $query = mysqli_query($conn,$que_sql); $row = mysqli_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 function get_client_ip() { 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); } ?>