2011-06-02 75 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語法並使用它(連同在第二個表中創建用戶名唯一索引)。