2017-01-03 8 views
0

facebookのような機能に似た機能を開発中です。ログインとセッションとすべてがありますが、問題は、ユーザーがサインインすると数回以上クリックすることができ、毎回値が更新されることです。私はこれが起こることを望んでいない。私はその特定のコードのために一度だけクリックするようにユーザーを望みます。その後、ユーザーが再度クリックしても何も起こらないはずです。私はこれをインターネット上で検索しましたが、うまくいきませんでした。 答えがPHPまたはJavaScriptの観点から与えられた場合、私はそれを感謝します。PHP - ユーザーに対してタスクを1回だけ実行する

$likes = $row['like']; 
if(is_null($likes)){ 
    echo "<p>No Likes Yet.</p>"; 
}else{ 
    echo "<p style='display: inline; color: #808080;'>".$likes." Likes</p><br>"; 
} 
echo "<br><a href='like.php?id=".$id."'><img src='images/like.png' style='width:30px; height: 30px; margin-left: 10px;'/></a>"; 
?> 

が好むがデータベースに更新された場合、上記アンカータグでlike.phpがあることに注意してください:ここでは

はコードです。

+1

ローカルストレージを活用またはそのためのセッションストレージ – Jigar7521

+6

好きなものはどこに保存されていますか? – Tom

+1

ユーザIDと投稿IDを両方のカラムの2つの主キー(user_id、post_id)を持つテーブルに入れることができます。そのような仕組みについては非常に幅広い質問がありますが、これがリードです。がんばろう。 –

答えて

0

ユーザーの操作をテーブルに保存する必要があります。非常に簡単です。 'user_id'と 'like'をクリックした 'item_id'を記録するために新しいテーブルを作成します。次に、ユーザーが訪問したときにこの表をチェックしたり、既にアイテムを好きにしたりしようとすると、PHP関数を使用することができます。チェックする

機能のようなものです:

function checkUserAction() { 
     $actionQuery = mysql_query("SELECT COUNT(*) AS total FROM actions WHERE user_id={$_SESSION['user']} AND item_id = {$_GET['item']}"); 
     $actionTotal = mysql_fetch_array($actionQuery); 
     return $actionTotal['total']; 
    } 

機能の項目に、ユーザの好みの数を返します。

if(checkUserAction()) { // if true don't link 

echo "<br><img src='images/like.png' style='width:30px; height: 30px; margin-left: 10px;'/>"; 

} else { // if false link 

echo "<br><a href='like.php?id=".$id."'><img src='images/like.png' style='width:30px; height: 30px; margin-left: 10px;'/></a>"; 

} 

彼はすでにあなたは彼を知っているように別の画像を表示することができますクリックした場合:彼はすでに好きな場合は、リンクを表示したりしないように、真または偽のチェックを行うことができます。これにより0でない場合には、1になります。

mysql_query("INSERT INTO actions(user_id,item_id) VALUES({$_SESSION['user']},{$_GET['item']})"); 

UPDATE::これは、単一で、ユーザの好みを保存する方法のラフスケッチであるあなたが好きなの数を記録する場合、単純なINSERTクエリを実行する必要があるアクションを記録するために

行数千の作成を避けるためにテーブル内のフィールドは、「好き」の数字の文字列を格納するVARCHARTフィールドに変更する必要があります:

// The first time a user likes INSERT a new row 
mysql_query("INSERT INTO test.doarray(user,likes) VALUES(1,'25,12')"); 
// New likes are added with CONCAT() separated with commas (or other char you choose) 
mysql_query("UPDATE test.doarray SET likes = CONCAT(likes,',24,53') WHERE user = 1"); 
// Now when you fetch the data you can transform it in an array using explode() 
$doQuery = mysql_query("SELECT * FROM test.doarray WHERE user = 1"); 
while($doFetch = mysql_fetch_array($doQuery)) { 
    $result = explode(",",$doFetch['likes']); 
} 
print_r($result); 

項目がすでに使用して気に入っている場合今、あなたは確認することができます。

in_array($_GET['item_id],$result); 
+0

答えをありがとう。私はあなたが話したことを試して、それは動作します。しかし、私に関係する唯一のことは、新しいユーザーがlikeボタンをクリックするたびに、新しい行がactionsテーブルに作成され、これは異なる投稿と異なるユーザーのために続くことです。百万人のユーザーがいる場合、これは後で問題になることはありませんか? :)これはちょうど私の推測です。私は間違っているかもしれません。 –

+0

あなたはそうです。ユーザーごとに1行に好きなものを保存する方法のアイデアを追加するように編集しました。それは少し難しいですが、それはできます;) – MarioZ

0


onclick="this.remove()" 

<a>タグにこれを追加あなたが投票のためにボタンを押すと、これは削除して、再度投票することができません。