2017-06-30 20 views
0

私はあなたがログインしているかどうかを確認した後、あなたのユーザーIDを取得した後、テーブルにあなたのuseridが既にそこにあるpostidを持っているかどうかをチェックし、それはすでにupvotedされました。私はちょうど私のコードで何が間違っているか知りたい、これは学習に使用されている、私は複雑なことは必要ありません。同じステートメント内の2つのテーブルにアクセスしますか?

コード:

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(); 
     } 

    } 

私はupvoteボタンをクリックして実行すると、それは単に何もしません。ここの問題は、私が知る限り、それはうまくいくように見えますが、私は何かを知らない、あるいは間違って何かを忘れているかもしれないということです。あなたがクロージングに"

echo "Failed; 

が欠落している

+1

ストリングス、'、引用符で囲む必要があります。あなたはSQLインジェクションのために広く開いています。 mysqliを使用しているので、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[bind_param](http://php.net/ manual/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

は次のようになります。 `$ _SESSION [ "loggedinusername"]のような

echo "Failed"; 
+0

これは問題ではありません。それでも動作しません。 – Prince

関連する問題