ホームページ  >  記事  >  バックエンド開発  >  PHP、MySql、jQuery は「好き」と「嫌い」の投票機能を実装します

PHP、MySql、jQuery は「好き」と「嫌い」の投票機能を実装します

WBOY
WBOYオリジナル
2016-07-25 08:55:30900ブラウズ
  1. CREATE TABLE IF NOT EXISTS `votes` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `likes` int(10) NOT NULL DEFAULT '0',
  4. `unlikes` int(10) NOT NULL デフォルト '0',
  5. 主キー (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  7. `votes` (`id`, `likes`, `unlikes`) 値
  8. (1, 30, 10);
  9. `votes_ip` が存在しない場合はテーブルを作成 (
  10. `id` int(10) NOT NULL、
  11. `vid` int(10) NOT NULL、
  12. `ip` varchar(40) NOT NULL
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
コードをコピー

2、htmlページ部分 このページには、「好き」と「嫌い」を表す 2 つのボタン (#dig_up と #dig_down) があり、ボタンには投票数とその割合が記録されており、投票結果を非常に直感的に比較できます。

  1. ;p>非常に優れており、非常に強力です。

  2. コードをコピー
  3. 3、CSSコード部分 CSS を使用してページを美しくし、diggs.png という画像を使用してさまざまなボタンの背景を配置し、各要素間の関係を配置する位置を設定する必要があります。
.digg{幅:420px; 高さ:80px 自動; 位置:相対} #dig_up,#dig_down{幅:200px; 位置:相対} ;
border:1px ソリッド #d3d3d3; カーソル:ポインタ}

.digup{background:url(diggs.png) no-repeat 4px 2px;}

.digup_on{background:url(diggs.png) ) リピートなし 4px -49px;}
.digdown{background:url(diggs.png) リピートなし 4px -102px;}
.digdown_on{background:url(diggs.png) リピートなし 4px -154px;}
    # num_up,#num_down{position:absolute; right:18px; font-size:20px;}
  1. #dig_up p{height:24px; color:#360}高さ:24px; 色:#f30}
  2. .bar{幅:12px; 境界線:1px; 位置:相対; }
  3. .bar スパン{表示:ブロック; 高さ:12px; }
  4. .bar i{位置:絶対; 左:104px;}
  5. #bar_up スパン{背景:#360}
  6. #bar_down スパン: # f60}
  7. #msg{position:absolute; right:20px; font-size:18px; color:#f00}
  8. 2、jquery部分 この例も jQuery に依存しているため、最初に jquery ライブラリ ファイルをページにロードすることを忘れないでください。 まず、jQuery は、マウスが 2 つの投票ボタンの上をそれぞれスライドすると変化する背景画像を処理する必要があります。これは、addClass() と RemoveClass() によって実現されます。
  9. $(function(){
  10. //マウスが投票ボタンに近づいたり遠ざかったりするときに背景のスタイルを変更します
  11. $("#dig_up").hover(function(){
  12. $(this) .addClass( "digup_on");
},function(){
$("#dig_down").hover(function(){ $( this).addClass("digdown_on"); },function(){
$(this).removeClass("digdown_on")

});

//データを初期化します
getdata("do.php",1) );
  1. //「いいね」をクリックしたとき
  2. $("#dig_up").click(function(){
  3. getdata("do.php?action=like",1);
  4. }); " "ダウンロード"
  5. $("#dig_down").click(function(){
  6. getdata("do.php?action=unlike",1);
  7. });
  8. });
  9. コードをコピー
  10. 次に、データを初期化します。つまり、ページがロードされた後、投票数と割合を含む最初の投票結果が表示されます。 データを取得する操作をカスタム関数 getdata() に記述し、さまざまなリクエスト アドレスと ID パラメーターを渡すことでデータのロードを完了します。 getdata() 関数では、バックグラウンド処理の戻り結果に従って URL に送信され、投票が成功すると、ページ内の対応する要素のコンテンツ (投票数や投票数など) が変更されます。割合。

    1. function getdata(url,sid){
    2. $.getJSON(url,{id:sid},function(data){
    3. if(data.success==1){//投票は成功しました
    4. $( "#num_up").html(data.like);
    5. //幅を制御して進行状況バーの効果を表示します
    6. $("#bar_up span").css("width",data.like_percent); $(" #bar_up i").html(data.like_percent);
    7. $("#num_down").html(data.unlike);
    8. $("#bar_down span").css("width",data. like_percent);
    9. $("#bar_down i").html(data.unlike_percent);
    10. }else{//投票は失敗しました bbs.it-home.org
    11. $("#msg").html(data.msg) .show( ).css({'opacity':1,'top':'40px'})
    12. .animate({top:'-50px',opacity:0}, "遅い"); ;
    13. }
    14. コードをコピー
    4、PHPコード部分 データの取得は do.php を通じて完了します。 Do.php はフロントエンド ページから渡されたパラメータに従ってデータベースに接続し、条件に従って「top」、「dislike」、および初期データ処理モジュールに入ります。 do.php モジュールのコード構造は次のとおりです。

    include_once("connect.php");//データベースに接続します
    1. $action = $_GET['action'];
    2. $ip = get_client_ip; () ;//IP を取得
    3. if($action=='like'){//いいね
    4. likes(1,$id,$ip)
    5. }elseif($action=='unlike'); Dislike
    6. likes(0,$id,$ip);
    7. }else{
    8. echo jsons($id);
    9. コードをコピー
    10. 関数 likes() は、「いいね」と「嫌い」投票モジュールの場合、最初のステップは、ユーザー IP がすでに投票しているかどうかを判断することです。ユーザー IP が投票している場合は、対応するプロンプトが直接返されます。ユーザー IP に投票レコードがない場合は、投票テーブルが更新されます。 、対応する投票数が 1 増加され、ユーザーの IP が votes_ip テーブルに挿入されます。操作が成功すると、jsons() を呼び出して投票後の投票数や割合などのデータを出力します。それ以外の場合は、操作が失敗したことを示すプロンプト メッセージを入力します。
function likes($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){//好きです
  1. $sql = "いいね! を更新しますlikes+1 where id=".$id;
  2. }else{//dislike
  3. $sql = "update votes set Likes=unlikes+1 where id=".$id;
  4. }
  5. mysql_query($sql);
  6. $sql_in = "votes_ip (vid,ip) 値に挿入 ('$id','$ip')";
  7. mysql_query($sql_in);
  8. if(mysql_insert_id()>0){
  9. echo jsons ( $id);
  10. }else{
  11. $arr['success'] = 0;
  12. $arr['msg'] = '操作が失敗しました。再試行してください';
  13. echo json_encode($arr); else {
  14. $msg = $type==1?'あなたは好きです':'あなたは嫌いです';
  15. $arr['msg'] = $msg; ($arr);
  16. }
  17. }
  18. コードをコピー
  19. 関数 jsons() を使用して、投票テーブル内の対応する ID の投票数を読み取り、パーセンテージを計算し、最後にこの情報を出力します。 json 形式。フロントエンド ページで使用されます。
  20. function jsons($id){
$query = mysql_query("select * from votes where id=".$id);
$row = mysql_fetch_array($query);好き = $row['好き']; $嫌い = $row[成功']=1; $arr['好き'] = $arr['違う'] = $違う;
$like_percent =round($like/($like+$unlike),3)*100;

$arr['like_percent'] = $like_percent.'%'; 'unlike_percent '] = (100-$like_percent).'%';

​​
return json_encode($arr);
  1. コードをコピー
  2. この例は、一般的な「いいね!」に適用できます投票システムなどのシナリオでは、Ajax の原則を使用して実装されたフロントエンドとバックエンドの対話型関数が使用されます。 do.php には、ユーザーの実際の IP を取得する関数 get_client_ip() もあります。この記事で提供されているソース コード パッケージをダウンロードして調べることができます。


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