php - 使用复选框从表中删除用户

标签 php mysql

我知道有类似的问题,但我无法确定我的 PHP 代码的问题。我试图从学生表和类(class)表之间的中间表(称为 Student_has_Class)中删除学生。 SQL 代码可以工作,但页面不行。它成功列出了表中的学生,但是当我选中学生的复选框以删除它们并单击提交时,它会像预期的那样重定向到同一页面(基本上是刷新)(即使它不会重新加载表)由于某种原因),并且该学生仍在 Student_has_Class 表中。请帮忙,因为在线发帖对我来说是最后的手段。

请看一下代码:

注意:出于隐私考虑,我删除了一些登录名和网址信息。用 { } 表示。

<?php

// Connects to your Database
session_start();
$x = $_SESSION['user'];
$y = $_GET['id'];
mysql_connect("{removed site for privacy}", "{username removed}", "{password removed}") or die(mysql_error
    ());
mysql_select_db("test") or die(mysql_error());

if (isset($_POST['delete']))
{
    if (isset($_POST['checkbox']))
    {
        $checkbox = $_POST['checkbox'];
        if (is_array($checkbox)) {

            foreach ($checkbox as $key => $x)
            {
                $mysql->query("DELETE FROM Student_has_Class WHERE User_idUser='$x'"); 
                }
            }
        }
    }  
?>

<?php

$sql = "SELECT User.idUser, User.UserFirstName, User.UserLastName
FROM Student_has_Class
INNER JOIN User ON User.idUser = Student_has_Class.User_idUser AND User.Role = 'Student'
INNER JOIN Class ON Class.idClass = Student_has_Class.Class_idClass
WHERE Student_has_Class.Class_idClass = 2 AND Class.User_idUser = ".$x."
ORDER BY User.UserLastName";

$result = mysql_query($sql);

$count = mysql_num_rows($result);

?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Class Roster</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">Drop</td>
<td align="center" bgcolor="#FFFFFF"><strong>ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Last Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>First Name</strong></td>
</tr>

<?php
while ($rows = mysql_fetch_array($result))
{ 
?>

<tr>
<td align="center" bgcolor="#FFFFFF">
<input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $rows['idUser'];?>"></td>

<td bgcolor="#FFFFFF"><?php echo $rows['idUser'];?></td>

<td bgcolor="#FFFFFF"><?php echo $rows['UserLastName'];?></td>

<td bgcolor="#FFFFFF"><?php echo $rows['UserFirstName'];?></td>
</tr>

<?php
}
?>

<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF">
<input name="delete" type="submit" id="delete" value="Submit"></td>
</tr>

<?php

// Check if delete button active, start this
if ($_POST['delete'])
{
    for ($i = 0; $i < $count; $i++)
    {
        $del_id = $checkbox[$i];
        $sql = "DELETE FROM Student_has_Class WHERE User_idUser=".$del_id."";
        $result = mysql_query($sql);
    }
    // if successful redirect to same page
    if ($result)
    {
        echo "<meta http-equiv=\"refresh\" content=\"0;URL={address}/{page}.php\">";
    }
}
mysql_close();

?>

更新:

我使用 Internet Explorer 调试器获取了 Chrome 调试器未提供的一些信息。这是该页面,请注意复选框中的值。我不确定这是否正确。

<!doctype html>
<html>

<head>
<meta charset="utf-8">
<title>*HIDDEN*</title>
<style type="text/css">
body {
                background-color: #D9D7D7;
}
h1 {
                color: #FBF8F8;
}
</style>
<style>
table,th,td
{
border:1px solid black;
}
</style>


</head>


<body bgcolor="#D7D3D3">
<a href="main_login.php" >
<img src="banner2.jpg" width="1340" height="90">
</a></img>
<div id="shHeader">
<center>
  <div class="div"> 
Welcome to *HIDDEN*!</div></center>
<table width ="1345" height="30" align="top" border=1"> 
<tr align= top>
<tr>
<td width="40"> <a href = "PicChart.php?id="> Category </a> </td>

<td width="40"> <a href = "HWGraph.php?id="> Homework Graph </a> </td> 

<td width="40"> <a href = "TestGraph.php?id="> Test Graph </a> </td>

<td width="40"> <a href = "MainPageTabs.php?id= "> Overview Graph </a> </td>

<td width="40"> <a href = "MainPageTabs.php?id="> Progress Bar </a> </td>

<td width="40"> <a href = "MainPageTabs.php?id="> Timeline </a> </td>
</tr>





<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Class Roster</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">Drop</td>
<td align="center" bgcolor="#FFFFFF"><strong>ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Last Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>First Name</strong></td>
</tr>


<tr>
<td align="center" bgcolor="#FFFFFF">
<input name='checkbox[0]' type='checkbox' id='checkbox[]' value=''></td>
<td bgcolor="#FFFFFF">5</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>
</tr>


<tr>
<td align="center" bgcolor="#FFFFFF">
<input name='checkbox[1]' type='checkbox' id='checkbox[]' value=''></td>
<td bgcolor="#FFFFFF">3</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>
</tr>


<tr>
<td align="center" bgcolor="#FFFFFF">
<input name='checkbox[2]' type='checkbox' id='checkbox[]' value=''></td>
<td bgcolor="#FFFFFF">12</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>
</tr>


<tr>
<td align="center" bgcolor="#FFFFFF">
<input name='checkbox[3]' type='checkbox' id='checkbox[]' value=''></td>
<td bgcolor="#FFFFFF">4</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>
</tr>


<tr>
<td align="center" bgcolor="#FFFFFF">
<input name='checkbox[4]' type='checkbox' id='checkbox[]' value=''></td>
<td bgcolor="#FFFFFF">6</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>

<td bgcolor="#FFFFFF">*HIDDEN*</td>
</tr>

<input type='hidden' name='hiddencounter' value='5'>


<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF">
<input name="delete" type="submit" id="delete" value="Delete"></td>
</tr>


</table>
</form>
</td>
</tr>
</table>



</body>
</html>

更新:

当我尝试通过选中姓名左侧的复选框并单击“删除”按钮(以前称为“提交”按钮)来删除表中的第三个人时,POST 参数如下。要删除的人的用户 ID 为 12。

数组 ( [checkbox] => 数组 ( [2] => ) [hiddencounter] => 5 [delete] => 删除 )

最佳答案

你可以试试这个。但我会将您的代码从 MySQL 更改为 MySQLi

<?php

// Connects to your Database
session_start();
$x = $_SESSION['user'];
$y = $_GET['id'];

/* ESTABLISH CONNECTION */

$connect=mysqli_connect("YourHost","YourUsername","YourPassword","YourDatabaseName"); /* REPLACE THE NECESSARY HOST, USERNAME, PASSWORD, AND DATABASE */

if(mysqli_connect_errno()){

echo "Error".mysqli_connect_error();
}

if (isset($_POST['delete'])){ /* IF DELETE IS SET/CLICKED */

   $counter=mysqli_real_escape_string($connect,$_POST['hiddencounter']);
   $checkbox=$_POST['checkbox'];

   for($x=0;$x<=$counter;$x++){

       if(!empty($checkbox[$x])){ /* IF SELECTED ITEM */

       $checked=mysqli_real_escape_string($connect,$checkbox[$x]);

       mysqli_query($connect,"DELETE FROM Student_has_Class WHERE User_idUser='$checked'"); 

       } /* END OF IF NOT EMPTY CHECKBOX SELECTED */

   } /* END OF FOR LOOP */

} /* END OF ISSET DELETE */

?>

<?php

$sql = "SELECT User.idUser, User.UserFirstName, User.UserLastName
FROM Student_has_Class
INNER JOIN User ON User.idUser = Student_has_Class.User_idUser AND User.Role = 'Student'
INNER JOIN Class ON Class.idClass = Student_has_Class.Class_idClass
WHERE Student_has_Class.Class_idClass = 2 AND Class.User_idUser = ".$x."
ORDER BY User.UserLastName";

$result = mysqli_query($connect,$sql);

$count = mysqli_num_rows($result);

?>

<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Class Roster</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">Drop</td>
<td align="center" bgcolor="#FFFFFF"><strong>ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Last Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>First Name</strong></td>
</tr>

<?php
$counter=0; /* FOR COUNTING PURPOSES */
while ($rows = mysqli_fetch_array($result))
{ 
?>

<tr>
<td align="center" bgcolor="#FFFFFF">
<?php
$iduser=$rows['idUser'];
echo "<input name='checkbox[$counter]' type='checkbox' id='checkbox[]' value='$iduser'></td>";
/* I HAVE ASSIGNED THE COUNTER INSIDE THE CHECKBOX ARRAY ABOVE. AND DO YOU REALLY NEED [] IN YOUR ID? */ ?>

<td bgcolor="#FFFFFF"><?php echo $rows['idUser'];?></td>

<td bgcolor="#FFFFFF"><?php echo $rows['UserLastName'];?></td>

<td bgcolor="#FFFFFF"><?php echo $rows['UserFirstName'];?></td>
</tr>

<?php
$counter=$counter+1; /* INCREMENT COUNTER EVERY LOOP */
} /* END OF WHILE LOOP */

echo "<input type='hidden' name='hiddencounter' value='$counter'>"; /* SUBMIT A HIDDEN INPUT CONTAINING THE OVERALL COUNTER */

?>

<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF">
<input name="delete" type="submit" id="delete" value="Submit"></td>
</tr>
</table>
</form>

关于php - 使用复选框从表中删除用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23465646/

相关文章:

php - 在 laravel 5.2 中使用 Redis 作为队列驱动程序时是否需要创建失败的作业表?

PHP,如何使用 header 和正文重定向/转发 HTTP 请求?

php - stripslashes 和 mysql_escape_string 没有删除所有斜杠

php - Laravel - 获取所有记录而不仅仅是第一个并将它们放在一起?

php - CakePHP 在创建新用户失败时填写密码字段

php - 在 Wordpress 中嵌套短代码导致内部短代码根本不打印出来

php - Laravel Eloquent 模型 - 无法访问数据库

php - 在已经建立的连接中使用 mysqli::prepare 使用prepare?

java - MySQL Connector/J - 将 Java 字符串映射到 MySQL INT

mysql - 在 Amazon EC2 上备份 MySQL 数据库