试图添加一个“喜欢”的系统

时间:2011-09-06 12:11:50

标签: php mysql

以下内容传递给浏览器:http://localhost/like.php?f=1

其中f = 1是我想要的文章ID。有一个用户系统,我只希望他们能够喜欢这篇文章一次(原因很明显)。我的代码,从数据库中提取有关文章的信息,然后提取用户信息(从当前会话中获取ID)然后检查用户是否已经喜欢这个,如果没有插入到类似的数据库中,或者返回文章页面。这是我到目前为止的代码..

正如您在代码中看到的那样,我一直在尝试调试,但它进展不顺利......

<?php
include "connect.php";
session_start();
$feed = $_GET['f']; 
$feeddb = "SELECT * from feeddb where ID=$feed";
$feeddb2 = mysql_query($feeddb) or die("Whuuut?");
$feeddb3 = mysql_fetch_array($feeddb2);
if (isset($_SESSION['usrname']))
{
    $player=$_SESSION['usrname'];
    $userstats="SELECT * from feedus where tit='$player'";
    $userstats2=mysql_query($userstats) or die("Could not get user stats");
    $userstats3=mysql_fetch_array($userstats2);
    $feedli = "SELECT * from feedli where PID=$feed";
    $feedli2 = mysql_query($feedli) or die("Could not get likes");
    while($feedli3=mysql_fetch_array($feedli2))
    {
        if($userstats3['ID'] == $feedli3['UID'])
        {
            echo $userstats3[ID];
            echo $feedli3[UID];
        } else { 
            $updatelike =
                "INSERT into feedli (PID, UID) values('$feed','$userstats3[ID]')";
            $updatelike2 = mysql_query($updatelike);
            echo $userstats3[ID];
            echo $feedli3[UID];
        }
    }
}
else
{
}
?>

任何帮助将不胜感激!

编辑:对于Clarity - 我希望代码在表FEEDLI中插入PID($ feed中的文章ID)和UID($ userstats3 [ID]中的用户ID),如果他们没有之前喜欢这篇文章,如果有的话,请跳过代码并返回上一篇文章。

3 个答案:

答案 0 :(得分:1)

我认为您在代码中没有使用$ feeddb3 ..这可能很有用。也尽量避免sql注入。

 <?php
 session_start();
 include "connect.php";
 $feed = $_GET['f']; 

 if (isset($_SESSION['usrname']))
 {
    $player=$_SESSION['usrname'];
    $userstats2=mysql_query("SELECT * from feedus where tit='".mysql_real_escape_string(stripslashes($player))."'") or die("Could not get user stats");
    $userstats3=mysql_fetch_array($userstats2);

    $feedli2 = mysql_query("SELECT * from feedli where PID='".mysql_real_escape_string(stripslashes($feed))."' AND UID = '".$userstats3['ID']."'");

    if(!mysql_num_rows($feedli2))
    {
        $updatelike2 = mysql_query("INSERT into feedli (PID, UID) values('".mysql_real_escape_string(stripslashes($feed))."','".mysql_real_escape_string(stripslashes($userstats3['ID']))."')");
        echo $userstats3['ID'];
    }
    else
    {
        echo "already liked";   
    }

 }
 ?>

答案 1 :(得分:0)

在执行insert-query $updatelike = "INSERT into feedli (PID, UID) values('$feed','$userstats3[ID]')";之前,您应该检查是否存在带有传输的PID和UID的数据集。如果有的话,什么都不做......如果没有,执行插入。 我希望,我没有误解你的问题。

答案 2 :(得分:0)

首先,您可能希望为变量赋予更多有意义的名称 - 只是提示可读性的提示。另外,请注意可能的SQL注入!

其次,如上所述,您可以通过检查您的likes表中是否存在元组(user_id,feed_id)以更快的方式执行此操作。虽然你可以合并feedli2和userstats2查询,但我已经停止写了,因为上面应该可以正常工作。