2016-07-23 7 views
2

このコードのために私を助けてください私はすでにこのコードのために助けを求められましたが、いずれかからヘルプを得ることができませんでした。また、すべての登録ユーザのUnlikesとは全く同じ(ログインユーザ)のユーザは、その登録ユーザーどのように私はこのコードを登録ユーザーのためのシステムのようにFacebookを作成しますか

私は、ユーザーのデータとフィールド1 userID 2を持っている別のテーブルlikesを持つテーブルuserを持っているために複数回を好むべきではないことを確認したいですstatus_id 3. like 4.

私もConfusion in M Y WHERE句とストアド$userID Varaiableは、あなたがこれを実装するために異なるアプローチを取ることができ、また、そのために

<?php 
session_start(); 
include('../config.php'); 
$userID = intval($_REQUEST['userID']); 

$sql = "SELECT * FROM likes WHERE userID = '".$userID."'"; 
$res = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_assoc($res); 

$like  = $row['like']; 
$unlike  = $row['un-like']; 
if($_POST) 
{ 
    if(mysql_real_escape_string($_POST['op']) == 'like') 
    { 
     $update = "`like`=`like`+1"; 
    } 
    if(mysql_real_escape_string($_POST['op']) == 'un-like') 
    { 
     $update = "`un-like`=`un-like`+1"; 
    } 

    mysql_query("UPDATE likes SET $update WHERE userID ='".$userID."'"); 
    echo 1; 
    exit; 
} 
?> 
<div class="grid"> 
<span id="status"></span><br> 
<input type="button" value="<?php echo $like; ?>" class="button_like" id="likeBtn" /> 
<input type="button" value="<?php echo $unlike; ?>" class="button_unlike" id="unlikeBtn" /> 
</div> 
+0

ようになり、挿入/更新クエリを持つユーザーをかどうかを確認する前に、別のクエリを追加することができます与えられたステータスIDは誰かを好きだったり好まなかったりしています。このようにして、同じ人が複数の好き嫌いを追加することができます。私はそれが1対2の関係であると仮定します。 – Nitin

+0

データの永続性については、PDOに切り替えてください。 mysql(i)クエリと比較してはるかに安全です。 – Nitin

答えて

1

を助けてください。フィールドのuserIDstatus_idlikesテーブルにUNIQUE KEYIndexを構成し、UPDATEINSERT ... ON DUPLICATE KEY UPDATEタイプのクエリに変更する方法もあります。これにより、すでに好き嫌いがある場合は新しいレコードを追加し、likeレコードがすでに挿入されている場合はフィールドを更新できます。これを実装する

ステップ:

ステップ1:

フィールド上UNIQUE KEYインデックスuserIdstatus_id

CREATE UNIQUE INDEX userId_statusId ON `likes` (`userId`, `status_id`) 

ステップ2追加:

を何かにあなたのUPDATEクエリを変更以下のように

INSERT INTO `likes` (`userId`, `status_id`, `like`, `un-like`) VALUES ($userID, $statusId, 1, 0) 
    ON DUPLICATE KEY UPDATE 
    `like`= VALUES(`like`), 
    `un-like` = VALUES(`un-like`); 

ご質問には、コードに含まれていないstatus_idが追加されています。あなたはuserIdのようにこのページにそれを渡す必要があります。

また、likeun-likeフィールドは、クエリでハードコードされています。 IFブロックで動的にすることができます。

よりは読む:

http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html http://dev.mysql.com/doc/refman/5.7/en/create-index.html

あなたの最終的なコードは、この

<?php 
session_start(); 
include('../config.php'); 
$userID = intval($_REQUEST['userID']); 
$statusId = intval($_REQUEST['statusID']); 

if($_POST) 
{ 

    $like = 0; 
    $unlike = 0; 

    if(mysql_real_escape_string($_POST['op']) == 'like') 
    { 
     $like = 1; 
    } 
    if(mysql_real_escape_string($_POST['op']) == 'un-like') 
    { 
     $unlike = 1; 
    } 

    mysql_query("INSERT INTO `likes` (`userId`, `status_id`, `likes`, `un-like`) VALUES ($userID, $statusId, $like, $unlike) 
        ON DUPLICATE KEY UPDATE 
        `likes`= VALUES(`likes`), 
        `un-like` = VALUES(`un-like`);"); 
    echo 1; 
    exit; 
} 
?> 
+0

クイックノート: "aは自動インクリメントカラムのInnoDBテーブルとは異なります。自動インクリメントカラムの場合、INSERT文は自動インクリメント値を増加させますが、UPDATEは増加しません。 – Nitin

+1

はいはい。それが問題であれば、代わりに 'REPLACE'を使うことができます。あるいは、2つのクエリに分解することができます。 – Deepak

+0

あなたの助けてくれてありがとう –

関連する問題