像不喜欢的代码一样,在数据库中输入重复的值


like dislike code enter duplicate value in database

在我的like_dislike表中,我有3列prod_id、user_id和like_dislike。我在下面的代码中插入0表示不喜欢,1表示喜欢。如果没有具有相同like_disike.it的特定prod_id和user_id的条目,如果用户从喜欢变为不喜欢,反之亦然。但如果用户喜欢他喜欢的任何prod_id,它将输入重复的值。这是我的密码。

<?php
session_start();
require('config.php');
$pid=$_REQUEST['prod_id'];
$uid=$_SESSION['uid'];
$act=$_REQUEST['act'];
if ($uid=='') {
header('location:login.php');
}
else
{
$like_sql=mysql_query("SELECT COUNT(*) FROM like_dislike_tbl WHERE 
prod_id='".$pid."' AND user_id='".$uid."' AND like_dislike=1");
$like_count=mysql_result($like_sql, 0);
$dislike_sql=mysql_query("SELECT COUNT(*) FROM like_dislike_tbl WHERE 
prod_id='".$pid."' AND user_id='".$uid."' AND like_dislike=0");
$dislike_count=mysql_result($like_sql, 0);
if($act == 'like'): //if the user click on "like"
    if($like_count == 1){
        header('location:'. $_SERVER['HTTP_REFERER']);
    }
    if(($like_count == 0) && ($dislike_count == 0)){
        mysql_query("INSERT INTO like_dislike_tbl(prod_id,user_id,like_dislike) 
    VALUES('".$pid."','".$uid."',1)");
    }
    if($dislike_count == 1){
        mysql_query('UPDATE like_dislike_tbl SET like_dislike = 1 WHERE 
    prod_id = "'.$pid.'" and user_id ="'.$uid.'"');
    }
    header('location:'. $_SERVER['HTTP_REFERER']);
endif;
if($act == 'dislike'): //if the user click on "dislike"
    if($dislike_count == 1){
        header('location:'. $_SERVER['HTTP_REFERER']);
    }
    if(($like_count == 0) && ($dislike_count == 0)){
        mysql_query("INSERT INTO like_dislike_tbl(prod_id,user_id,like_dislike) 
    VALUES('".$pid."','".$uid."',0)");
    }
    if($like_count == 1){
        mysql_query('UPDATE like_dislike_tbl SET like_dislike = 0 WHERE 
    prod_id = "'.$pid.'" and user_id ="'.$uid.'"');
    }
    header('location:'. $_SERVER['HTTP_REFERER']);
endif;
}
?>

把你的建议给我。提前说。如果你不懂我的语言。无论你不懂什么,我都会评论。

我的like_dislike_tbl是

------------------------------------------
|  prod_id  |  user_id  |  like_dislike  |    
------------------------------------------
|    8      |   20      |      0         |
------------------------------------------
|    9      |   20      |      0         |
------------------------------------------
|    8      |   20      |      0         |
------------------------------------------
|    9      |   20      |      0         |
------------------------------------------
|    10     |   20      |      1         |
------------------------------------------
|    10     |   20      |      1         |
------------------------------------------

更改代码。。。。

$dislike_count=mysql_result($like_sql, 0);

有了这个。。。。

$dislike_count=mysql_result($dislike_sql, 0);

如果表已经有重复项,COUNT(*)可能会返回多个1。所以改变

if (like_count == 1) {

至:

if (like_count >= 1) {

并且类似地用于CCD_ 2。

顺便说一句,你可以通过一个查询获得喜欢和不喜欢的计数:

SELECT SUM(like_dislike = 1) AS like_count, SUM(like_dislike = 0) AS dislike_count
FROM like_dislike_tbl
WHERE prod_id = $pid AND user_id = $uid