PHP& MySQL - 删除表行问题

时间:2010-04-29 06:27:32

标签: php mysql xhtml

好的我的脚本应该删除存储在2个MySQL表中的特定用户案例但由于某种原因,当用户删除特定案例时,它会删除所有用户案例,我只希望它删除用户选择的案例。我想知道如何解决这个问题?在此先感谢您的帮助。

这是PHP& MySQL代码。

if(isset($_POST['delete_case'])) {

$cases_ids = array();

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT cases.*, users_cases.* FROM cases INNER JOIN users_cases ON users_cases.cases_id = cases.id WHERE users_cases.user_id='$user_id'");

if (!$dbc) {
    print mysqli_error($mysqli);
}  else {
    while($row = mysqli_fetch_array($dbc)){ 
        $cases_ids[] = $row["cases_id"];
    }
}

foreach($_POST['delete_id'] as $di) {
    if(in_array($di, $cases_ids)) {
        $mysqli = mysqli_connect("localhost", "root", "", "sitename");
        $dbc = mysqli_query($mysqli,"DELETE FROM users_cases WHERE cases_id = '$di'");

        $dbc2 = mysqli_query($mysqli,"DELETE FROM cases WHERE id = '$di'");
    }

}

}

这是XHTML代码。

<li>
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" />
</li>

<li>
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" /> 
</li>

<li>
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" /> 
</li>

这是MySQL表。

CREATE TABLE cases (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
file VARCHAR(255) NOT NULL,
case VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE users_cases (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
cases_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);

2 个答案:

答案 0 :(得分:1)

从第一眼看,这可能是因为所有HTML都包含在同一个表单中。因此,无论您点击哪个删除大小写按钮,每个 delete_id [] 隐藏字段都将提交给服务器。

所以你需要将每一行分成它自己的形式,如......

<li>
<form method="POST" action="someURL.php">
<input type="text" name="file[]" size="25" />
<input type="text" name="case[]" size="25" />
<input type="text" name="name[]" size="25" />
<input type="submit" name="delete_case" id="delete_case" value="Delete Case" />
<input type="hidden" name="delete_id[]" value="' . $row['cases_id'] . '" />
</form>
</li>

或其他更新提交按钮只是简单的按钮并添加一些javascript ...

答案 1 :(得分:0)

这可能是因为即使用户选择了一个案例,所有案例的id也都被传递了......

以下内容可能仅用于获取用户选择的值...

  1. 将复选框与每个具有唯一ID
  2. 的li相关联
  3. 让用户选中他要删除的案例的复选框
  4. 当用户按下“删除”或其他内容时,使用javascript收集复选框被选中的ID ...
  5. 然后将这些ID提交到下一页....