用复选框删除用户

时间:2013-03-30 09:07:41

标签: php mysql

我正在创建一个管理面板....管理员的一个特权就是他可以删除注册用户...... 这是我的代码,用于显示存储在数据库中的用户:

<h2>Select users to remove</h2>
<form method="post" action="user_deleted.php">

<?php 
$qry_cam=mysql_query("SELECT* FROM login ORDER BY login.id",$con);

    while($row=mysql_fetch_array($qry_cam))
{

    echo"<input name='users' type='checkbox' value='".$row['id']."' /><span style='color:#000fff;'>$row[user]<br /></span>";

}



?>
<input type="submit" value="submit" />

以下是user_deleted.php页面的代码,该页面将删除复选框选中的用户:

<?php 
$delete_id = $_POST['users'];
     $id = count($delete_id );
     if (count($id) > 0)
      {
         while ($delete_id)
         {
            $sql = "DELETE FROM login WHERE id='$delete_id'";
            $delete = mysql_query($sql);
            $delete_id--;
            mysql_query("alter table login auto_increment = 1;");
        }
    }
    if($delete)
    {
        echo "Records deleted Successfully.";
    }

 ?>

现在我遇到的问题是,当我按照像user1 user2 user3等序列从上到下选择用户时,它工作正常......但是当我随机选择即user3 user1 user2 user5 user8等时,并单击提交按钮...它删除数据库中的所有用户..即使我选择了user3,它也会再次删除所有其他用户...我正在尝试但我不知道是什么问题..需要你帮助的人......谢谢

4 个答案:

答案 0 :(得分:1)

您必须在users[]属性中使用name作为复选框输入。

<input name='users[]' type='checkbox' value='<?= $row['id']; ?>' />

然后,在你的PHP中:

$delete_id = implode(", ", $_POST['users'] ); // if the id is numerical.
$sql = "DELETE FROM `tableName` WHERE `id` IN( $delete_id )";

答案 1 :(得分:0)

您可以使用输入数组。基本上你必须像这样命名你的复选框:

echo"<input name='users[]' type='checkbox' value='".$row['id']."' /><span style='color:#000fff;'>$row[user]<br /></span>";

如您所见,name属性具有数组形式。这样,您可以将$_POST['users']视为数组(而不是单个字符串)。

尝试查看PHP文档:http://www.php.net/manual/en/faq.html.php#faq.html.arrays

关于mysql_功能: Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 2 :(得分:0)

try this code. 
<?php
echo"<input name='users[]' type='checkbox' value='".$row['id']."' /><span style='color:#000fff;'>$row[user]<br /></span>";
if(isset($_GET['delete']))
{
    @$deleteCb = $_REQUEST['user'];
    for($i=0;$i<count($deleteCb);$i++)
    {
        @$news_id = $deleteCb[$i];
        @$q = "delete from subscribe where id= ".$news_id;
        @$yes=mysql_query($q);
    }
    if($yes)
    {
        ?>
        <script type="text/javascript">
        window.location='subscriber.php';
        </script>
        <?php
    }
}
?>

答案 3 :(得分:0)

<h2>Select users to remove</h2>
<form method="post" action="user_deleted.php">
<input name="users" value="1" type="checkbox" />
<input name="users" value="2" type="checkbox" />
<input name="users" value="3" type="checkbox" />
<input type="submit" value="submit" />
</form>

<?php

if (isset($_POST['users'])) {
    $delete_id = $_POST['users'];
    echo print_r($delete_id, true);
}

?>

在此代码中,$ _POST ['users']只返回 ONE 值,该值将是最后一个复选框的值。 (如果用户选中复选框1和复选框3,则$ _POST将返回值为3的复选框。)

虽然

<h2>Select users to remove</h2>
<form method="post" action="user_deleted.php">
<input name="users[]" value="1" type="checkbox" />
<input name="users[]" value="2" type="checkbox" />
<input name="users[]" value="3" type="checkbox" />
<input type="submit" value="submit" />
</form>

会使$ _POST ['users']返回一组已选中的复选框。

您可以使用以下内容替换您的PHP代码:

if (isset($_POST['users'])) {
    $delete_id = implode(", ", $_POST['users'] ); 
    $query = "DELETE FROM `login` WHERE `id` IN( $delete_id )";
    mysql_query($query);
}

如果选中复选框1和2,则像[0] =&gt;这样的数组1 [1] =&gt; 2将被退回。

(错误处理,验证输入等不包含在此编码中,如前所述,应使用PDO或mysqli代替mysql函数)。