2011-06-02 74 views
-1

我有一个脚本,它应该为MySQL值插入一个投票(-1或+1),但它的确如此,但它也应该将刚刚投票的项目的ID插入另一个表格中,并以阵列格式发送给刚刚投票的用户,以便该用户不会再次出现。将2个值插入到MySQL中,然后停止所述值再次出现

1)我不知道如何停止的值再次出现 2)它不发送该网站的ID

代码:

$sql = "SELECT * FROM webmash ORDER BY RAND() LIMIT 1"; 
    $result = mysql_query($sql) or print ("Can't select entry from table webmash.<br />" . $sql . "<br />" . mysql_error()); 

    while($row = mysql_fetch_array($result)) { 
    $name = stripslashes($row['name']); 
    $description = stripslashes($row['description']); 
    $link =($row['link']); 
    $votes = ($row['votes']); 
    $id = $row['id']; 
    } 

    $sql2 = "SELECT * FROM webmashusers"; 
    $result2 = mysql_query($sql) or print ("Can't select entry from table webmashusers.<br />" . $sql . "<br />" . mysql_error()); 

    while($row = mysql_fetch_array($result2)) { 
    $username = stripslashes($row['username']); 
    $likes = ($row['likes']); 
    $dislikes = ($row['dislikes']); 
    } 

    if(isset($_POST['like'])) { 
    $votes += 1; 
    $sql = "UPDATE webmash SET votes = $votes WHERE id = ".$_POST['id']; 
    mysql_query($sql); 

    $sqllikes = array (serialize($id)); 
    $sql2 = "INSERT '$sqllikes' INTO webmashusers (likes) WHERE 'username' = '$376770'"; 
    mysql_query($sql2); 
    } 


    if(isset($_POST['dislike'])) { 
    $votes -= 1; 
    $sql = "UPDATE webmash SET votes = $votes WHERE id = ".$_POST['id']; 
    mysql_query($sql); 

    $sqldislikes = array (serialize($id)); 
    $sql2 = "INSERT '$sqldislikes' INTO webmashusers (dislikes) WHERE 'username' = '$376770'"; 
    mysql_query($sql2); 

    } 

编辑:$三十七万六千七百七十○是我的用户名Cookie 。

+0

-1因为SQL注入漏洞。 – Johan 2011-06-02 10:56:13

+0

我可以建议你考虑PDO的准备报表。或者mysqli或只是'mysql_real_escape_string'会比没有好!目前你的代码有一个SQL注入攻击的漏洞。 – lethalMango 2011-06-02 11:01:44

回答

0

在mysql中保存序列化数组不是一个好方法。

无论如何,我认为你有开始夫妇错误的搭配:

$sqllikes = array (serialize($id)); 

基本上你是序列化一个简单的int

$id被previsouly设置好的为= $row['id'];

这使得0感。

您应该在一列中存储ID的整数,也许为了避免重复插入,您可以使用另一个键将其作为UNIQUE

+0

它必须设置为,因为那是它从中获取物品的ID。 – AviateX14 2011-06-02 10:52:38

+0

你会如何建议存储数组呢? – AviateX14 2011-06-02 10:53:02

+0

我根本不存储数组。我只是将ID存储在一个列中,也许使用另一个外键的UNIQUE约束,因此无法获得重复值 – dynamic 2011-06-02 10:59:30

0

注意,您在原始查询中使用$ _POST ['id'] ..对于sql注入来说很容易受到攻击。

$sql = "UPDATE webmash SET votes = $votes WHERE id = ".$_POST['id']; 

至于你的问题,你使用INSERT,即使在第二个表中已经有这样的用户。在这种情况下,UPDATE应该很有用。总的来说,你可以谷歌的“INSERT ... ON DUPLICATE UPDATE”为$ sql2查询的Mysql语法并使用它(连同在第二个表中创建用户名唯一索引)。