此代码中没有错误消息,但它没有';t删除字段


No error message in this code but it doesn't delete the fields

在这段代码中,我没有任何错误消息,但它没有删除数据。顺便说一下,数据库有很多记录,所有字段的名称都是正确的。

<?php
if ($connect = mysqli_connect('localhost', 'root', 'adminpass', 'flip'))
    {
    $id = $_GET['id'];
    $sql = "SELECT * FROM threads ORDER BY id DESC";
    $query = mysqli_query($connect, $sql);
    $num = mysqli_num_rows($query);
    }
?>
    <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST" >
    <table border="1" width="400" cellpadding="0" cellspacing="0">
    <tr>
    <td>#</td>
    <td>id</td>
    <td>subject</td>
    </tr>
    <?php
while ($row = mysqli_fetch_array($query))
    {
?>
    <tr>
    <td> <input type="checkbox" name="checkbox[]" value="<?php echo $row['id'] ?>"></td>
    <td><?php echo $row['id'] ?></td>
    <td><?php echo $row['topic'] ?></td>
    </tr>   
<?php
    }
?>
    <input type="submit" name="delete" value="delete" >
<?php
if (isset($delete))
    {
    for ($i = 0; $i < $num; $i++)
        {
        $del_id = $checkbox[$i];
        $sql2 = "DELETE FROM threads WHERE id='$del_id'";
        $query2 = mysqli_query($connect, $sql2);
        }
    if ($query2)
        {
        echo "<meta http-equiv='"refresh'" content='"0;URL=delete.php'">";
        }
    }
mysqli_close($connect);
?>
</table>
</form>

它有什么问题?

你可以试试这个:

<?php
/* ESTABLISH CONNECTION */
$connect=mysqli_connect("localhost","root","adminpass","flip");
if(mysqli_connect_errno()){
echo "Error".mysqli_connect_error();
}
if(isset($_POST['delete'])){ /* IF DELETE IS CLICKED */
$checkbox=$_POST['checkbox'];
$hiddencounter=mysqli_real_escape_string($connect,$_POST['hiddencounter']); /* PREVENT A BIT OF SQL INJECTION */
for($i=0;$i<$hiddencounter;$i++){ /* FOR LOOP BASED ON THE NUMROWS BELOW */
   if(!empty($checkbox[$i])){ /* IF THE CHECKBOX IS TICKED */
        $del_id=mysqli_real_escape_string($connect,$checkbox[$i]);  /* PREVENT A BIT OF SQL INJECTION */
        $sql2="DELETE FROM threads WHERE id='$del_id'";
        $query2=mysqli_query($connect,$sql2); /* IMPLEMENT THE DELETE QUERY */
   }
} /* END OF FOR LOOP */
echo "<meta http-equiv='"refresh'" content='"0;URL=delete.php'">";
} /* END OF ISSET DELETE */
?>
<form action="" method="POST" > <?php /* YOU CAN LEAVE THE ACTION BLANK, TO SUBMIT THE FORM ON THE PAGE ITSELF */ ?>
<table border="1" width="400" cellpadding="0" cellspacing="0">
<tr>
<td>#</td>
<td>id</td>
<td>subject</td>
</tr>
<?
$sql="SELECT * FROM threads ORDER BY id DESC";
$query=mysqli_query($connect,$sql);
$num=mysqli_num_rows($query);
/* SUBMIT THE NUMBER OF ROWS QUERIED THROUGH HIDDEN INPUT */
echo "<input type='hidden' name='hiddencounter' value='$num'>";
while($row=mysqli_fetch_array($query)){ /* FETCH DATA */
?>
<tr>
<td><input type="checkbox" name="checkbox[]" value="<?php echo $row['id'] ?>"></td>
<td><?php echo $row['id'] ?></td>
<td><?php echo $row['topic'] ?></td>
</tr>   
<?
} /* END OF WHILE LOOP $QUERY */
?>
<input type="submit" name="delete" value="delete" >
<?php
mysqli_close($connect);
?>
</table>
</form>

解释代码不起作用的原因:

  • 您的isset($delete)$delete变量来自哪里
  • 您的for循环无法确定提交的复选框是否有值
  • 您的<meta>重定向。它重定向到for循环之后的delete.php,所以这就是您没有看到任何错误的原因。但我敢肯定,如果删除<meta>重定向,您会看到一些错误
  • 即使删除正在进行,您也不会立即看到结果,因为删除查询是在您获取数据之后进行的

您的变量中有一个错误:

if (isset($delete))

应为:

   if (isset($_POST['$delete']))

我看不出$delete变量在您的代码中设置在哪里。此时$delete未被设置,因此if(isset($delete))为假。

在我看来,您似乎正在尝试使用注册全局参数。或者您只是忘记将$delete设置为$_GET[]$_POST[]变量之一。

"警告此功能从PHP 5.3.0起已弃用,从PHP 5.4.0起已删除。"

PHP手册-Security Globals

预定义变量