2017-06-30 14 views
0

我正在嘗試創建一個upvote系統,在檢查是否已登錄並獲取用戶標識之後,它將檢查該表是否包含已在其中的postid的用戶標識,如果確實如此,則表示它意味着它已經upvoted。我只想知道我的代碼中有什麼問題,這是用於學習的,我不需要任何複雜的東西。在同一語句中訪問兩個表?

代碼:

if (isset($_GET['upvote'])) { 
     if ($_SESSION["loggedin"] == true) { 
       $upvoteid = $_GET["upvote"]; 
       $servername = ""; 
       $username = ""; 
       $password = ""; 
       $dbname = ""; 

       // Create connection 
       $conn = new mysqli($servername, $username, $password, $dbname); 
       // Check connection 
       if (!$conn) { 
         die("Connection failed: " . $conn->connect_error); 
       } 

       $sql = "SELECT id FROM users WHERE username=".$_SESSION["loggedinusername"]; 
       $result = $conn->query($sql); 

       if ($result->num_rows > 0) { 
         while($row = $result->fetch_assoc()) { 
           $userid = $row["id"]; 
         } 
         $sql2 = "SELECT userid, postid FROM upvotedposts WHERE userid='".$userid."' AND postid='".$upvoteid."'"; 
         $result2 = $conn->query($sql); 

         if (!$result2->numrows > 0) { 
           $sql = "UPDATE posts SET upvotes = upvotes + 1 WHERE id = ".$upvoteid; 
           if ($conn->query($sql) === TRUE) { 
             echo "Sucessfully upvoted"; 
           } else { 
             echo "Error: " . $sql . "<br>" . $conn->error; 
           } 
         } 
       } else {           
         echo "Failed; 
       } 
       $conn->close(); 
     } 

    } 

當我點擊按鈕給予好評,它只是什麼都不做。這裏的問題是,據我所知,它看起來會起作用,但我可能會忘記一些我不知道或不正確使用某些東西的東西。

+1

字符串,比如'$ _SESSION [ 「loggedinusername」]',需要加引號。你是開放的SQL注入。由於您使用的是mysqli,請利用[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[bind_param](http://php.net/手動/ EN/mysqli的-stmt.bind-param.php)。這也將解決你討厭的報價問題。 – aynber

+0

[在MySQL中何時使用單引號,雙引號和反引號]可能的副本(https://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks- in-mysql) – aynber

+1

**警告**:使用'mysqli'時,應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[' bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,如果有人試圖利用您的錯誤,這可能會非常有害。 – tadman

回答

0

你缺少一個右"

echo "Failed; 

應該是:

echo "Failed"; 
+0

這不是問題所在。它仍然不起作用。 – Prince