【发布时间】:2023-03-10 15:19:01
【问题描述】:
我有一个名为 Question 的 PHP 类。在Question 内部是一个名为$q_id 的公共变量。
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: 30,那么isset($_POST["like"]) 中的查询将更新q_id: 29 而不是q_id: 30 的喜欢数量,为什么它会更新以前的q_id 和不是当前的q_id?
【问题讨论】:
-
你应该使用prepared statements来避免sql注入;)