【问题标题】:Deleting checkbox values from the MySQL Database using PHP使用 PHP 从 MySQL 数据库中删除复选框值
【发布时间】:2017-09-24 11:39:05
【问题描述】:

所以,这里有一个表格,显示 MySQL 数据库中的数据。我在第一行附加了复选框,用于选择要删除的唯一名称。如何使用数组或 PHP 中的任何其他方式从数据库中删除表单中的已检查数据。

这是我的代码,

我的 PHP 脚本来显示数据,

            <form method='POST' action='../../panel/delete_others.php'>
          <table id='example1' class='table table-bordered table-hover'>
            <thead>
            <tr>
              <th>Mark User </th>
              <th>User name</th>
              <th>User Password</th>
              <th>User Type</th>
              <th>User Status</th>
            </tr>
            </thead>
            <tbody>";
            while($row = mysqli_fetch_array($result2)){
           echo "<tr>
              <td> <input type='checkbox' name='others_delete[]' value='".$row['USER_NAME']."'/></td>
              <td>".$row['USER_NAME']."</td>
              <td>".$row['USER_PASSWORD'].
              "</td>
              <td>".$row['USER_type']."</td>
              <td>".$row['USER_STATUS']."</td>
            </tr>";
            }
            echo "</tbody>
          </table>
          </form>

我的删除数据的 PHP 脚本,

<?php
include('config.php');
if(isset($_POST['submit'])){//to run PHP script on submit
    if(!empty($_POST['others_delete'])){
        foreach($_POST['others_delete'] as $selected){
            $sql ="DELETE FROM users WHERE USER_NAME='$selected' and USER_type='Others'";
            echo $selected;
            if(mysqli_query($db, $sql)){
                mysqli_query($db, $sql);
            }
             else{
                 echo "error: ".$sql. "<br>" . mysqli_error($db);
            }

            }
        }
    }
mysqli_close($db);

?>

所以,我编写的代码看起来是正确的,但是每当我点击提交按钮时,我都会得到空白页。

【问题讨论】:

  • 您已经在使用支持 prepared statements 的 API 和有界变量输入,您应该使用带占位符的参数化查询(prepared statements)来保护您的数据库免受SQL-injection !开始使用 mysqli::prepare()mysqli_stmt::bind_param()
  • 如果你得到一个空白页,要么是因为没有条件为真,要么你有一个致命错误。如果是后者,请检查您的日志。如果是第一个,请通过添加 else 和一些输出(或记录一些内容)来检查哪些条件失败。
  • 空白页最有可能表明存在禁用错误..请启用error_reporting(E_ALL)ini_set('display_errors', true);
  • 好像提交按钮根本不在表单内 - 或者这不是实际代码。
  • @Qirel 可能是由 AJAX 请求触发的。我投票结束了这个问题,因为它不完整。

标签: php mysql


【解决方案1】:

你得到空白页,因为下面的代码行都返回false

if(!empty($_POST['others_delete'])){

if(isset($_POST['submit'])){

【讨论】:

  • others_delete[] 表示您可以拥有 HTML 输入的“数组”。它完全有效。
  • 可以将数组作为后值发送。在这种情况下看起来不像是错误。
【解决方案2】:

您检查了if(isset($_POST['submit'])),但您不包含具有该名称的输入元素,因此您的$_POST 变量不应具有该键,从而导致您的 then 部分被跳过。

您可以通过在您的 php 文件的末尾或开头调用 var_dump($_POST); 来检查。

如您问题的 cmets 所述:您正在使用 mysqli。您应该考虑使用准备好的语句。它们在单次使用(个人观察)时速度更快,如果像您的情况一样重用,它们会更快。另一个优点:它们可以对抗 sql 注入!

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 2017-08-19
    • 2014-07-18
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2016-05-30
    相关资源
    最近更新 更多