0

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

<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

4 回答 4

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 )";
于 2013-03-30T09:14:27.287 回答
0

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

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

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

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

关于mysql_函数: 请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-03-30T09:11:50.290 回答
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
    }
}
?>
于 2013-03-30T09:33:22.687 回答
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'] 只会返回一个值,该值将是最后一个复选框的值。(如果用户选择复选框 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] => 1 [1] => 2 的数组。

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

于 2013-03-30T09:37:29.480 回答