0

私は管理パネルを作成しています....管理者の特権の1つは、登録ユーザーを削除できることです...データベースに保存されているユーザーを表示するための私のコードは次のとおりです。

<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
<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 つの値のみを返しその値は最後のチェックボックスの値になります。(ユーザーがチェックボックス 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 のような配列が返されます。

(エラー処理、入力の検証などはこのコーディングには含まれていません。前述のように、mysql-functions の代わりに PDO または mysqli を使用する必要があります)。

于 2013-03-30T09:37:29.480 に答える
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

入力配列を使用できます。基本的に、次のようにチェックボックスに名前を付ける必要があります。

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_: 新しいコードでは関数を使用しないでくださいmysql_*。それらはもはや保守されておらず、公式に非推奨です。代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを使用するかを決めるのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

于 2013-03-30T09:11:50.290 に答える