2010-08-22 92 views
1

我有一个PHP函数,允许用户选择应该显示哪些类别的帖子。我希望能够从数据库中删除用户选择的类别时,他们取消选中复选框。但是我所尝试的一切似乎都删除了所有的用户类别,或根本不工作。有人可以帮我解决这个问题吗?PHP&MySQL函数删除数据库问题中的未经检查的类别

这是我的PHP函数的一部分,它应该删除未经检查的类别。

for ($x = 0; $x < count($query_cat_id); $x++){ 
    if($query_cat_id[$x] == $cat['id']){ 
     echo 'checked="checked"'; 
    } else if(!isset($query_cat_id[$x])) { 
     $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
     $delete_id = mysqli_query($mysqli,"DELETE FROM posts_categories WHERE post_id = '" . $post_id . "'"); 
     if (!$delete_id) { 
      print mysqli_error($mysqli); 
     } 
    } 
} 
+0

我希望'$ post_id'对SQL注入进行了消毒 – 2010-08-22 23:33:40

+0

好看,但这不是我的问题。 – maximus 2010-08-22 23:34:15

+0

我的猜测是'!isset($ query_cat_id [$ x])'没有返回你认为应该的值。注释删除相关的东西,并输出到屏幕上查看值。 – 2010-08-22 23:41:52

回答

1

此查询从您的帖子中删除所有类别,因为您要告诉它与您的where子句。你基本上是说,从表格posts_categories中删除每个记录的帖子id = $ post_id。您需要添加到您的where子句中以使其更具体。

$delete_id = mysqli_query($mysqli,"DELETE FROM posts_categories WHERE post_id = '" . $post_id . "' AND categoryID = '". $query_cat_id[$x] ."'"); 

这现在说的是你做的同样的事情,但增加了一个额外的限定词。仅从post_id为$ post_id且类别标识为(未选中复选框的值)的表中删除行。

声明:我正在猜测你在哪里存储你的类别ID在你的函数中($ query_cat_id [$ x])。