2017-01-17 7 views
0

私はQuestionというPHPクラスを持っています。 Questionの内部は、$q_idと呼ばれるパブリック変数です。isset呼び出しが最後の変数値を取得する

class Question{ 
     public $url; 
     public $q_id; 

     function __construct(){ 
      global $db; 
      $this->url = $_GET["url"]; 


      $result = $db->query("SELECT q_id FROM wyr_questions WHERE `url` = '$this->url'"); 

      if ($result->num_rows == 0){ 
       header('Location: 404'); 
       die(); 
      } 

      else{ 
       $row = $result->fetch_array(); 

       $this->q_id = $row["q_id"]; 

      } 
     } 
$user = new Question(); 

ここでは2つのボタン、嫌いなボタンなどがあります。ユーザーが好きなボタンまたは嫌いなボタンを押すと、$_POSTメソッドが呼び出されます。 issetメソッドは、クラスの外で$userオブジェクトの下にあります。

if (isset($_POST["like"])){ 
     $q_id = $user->q_id; 

     if ($_POST["like"] == 1){ 
      $db->query("UPDATE wyr_questions SET thumbs_up = thumbs_up + 1 WHERE `q_id` = '$user->q_id'"); 

     } 

     else{ 
      $db->query("UPDATE wyr_questions SET thumbs_down = thumbs_down+1 WHERE `q_id` = '$q_id'");  

     } 
} 

は今、私のようなボタンをクリックするたびに、同類の数が最後q_idが何であったかに基づいて更新されます。たとえば、のは、私がq_id: 29が好きで、それが現在のq_id以前q_idを更新していないなぜ、isset($_POST["like"])でのクエリはq_id: 29なくq_id: 30のために同類の数を更新しますq_id: 30を好きに移動しましょうか?

+0

は、SQLインジェクションを防ぐために、[プリペアドステートメント](http://php.net/manual/en/pdo.prepared-statements.php)を使用する必要があります。) –

答えて

0

ちょうどあなたのコードISSET呼び出し内部

$user = new Question(); 

を移動します。

このような何か:

class Question{ 
    public $url; 
    public $q_id; 

    function __construct(){ 
     global $db; 
     $this->url = $_GET["url"]; 


     $result = $db->query("SELECT q_id FROM wyr_questions WHERE `url` = '$this->url'"); 

     if ($result->num_rows == 0){ 
      header('Location: 404'); 
      die(); 
     } 

     else{ 
      $row = $result->fetch_array(); 

      $this->q_id = $row["q_id"]; 

     } 
    } 

if (isset($_POST["like"])){ 
    $user = new Question(); //here is the new position of this code 
    $q_id = $user->q_id; 

    if ($_POST["like"] == 1){ 
     $db->query("UPDATE wyr_questions SET thumbs_up = thumbs_up + 1 WHERE `q_id` = '$user->q_id'"); 

    } 

    else{ 
     $db->query("UPDATE wyr_questions SET thumbs_down = thumbs_down+1 WHERE `q_id` = '$q_id'");  

    } 
} 
+0

うーんそれでも、私はまだ現在のものの代わりに前の 'q_id'を得ています。 – user2896120

+0

あなたのURLの内容は何ですか? –

+0

urlは私のテーブルの列名です。最初にURLが存在するかどうかをチェックし、そうでなければ404エラーを表示します。 HTMLのpタグでq_idをエコーすると、正しいq_idが表示されます。例: '

<?php echo $ user-> q_id; ?>

' – user2896120

関連する問題