【问题标题】:Form with checkbox to update sql table带有复选框的表单以更新 sql 表
【发布时间】:2021-11-27 15:54:02
【问题描述】:

我正在尝试从 html 表单更新 MySQL 表。

这是表格的一部分:

<div id="caricoModal" class="modal fade">
    <div class="modal-dialog">
        <form method="post" id="employeeForm">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="modal-title"><i class="fa fa-plus"></i> Edit User</h4>
                </div>
                <div class="modal-body">
                    <div class="form-group">
                        <label for="tipoOp" class="control-label">Operazione:</label>
                        <select id="tipo" name="tipo" class="form-control">
                            <option value="carico">Carico</option>
                            <option value="scarico">Scarico</option>
                        </select>
                    </div>
                    <div class="form-group">
                    <!-- Record list -->
                    <table border='0' style='border-collapse: collapse;' >
                        <tr style='background: whitesmoke;'>
                            <!-- Check/Uncheck All-->
                            <th>Username</th>
                            <th>Stato</th>
                        </tr>

    <?php 
    $query = "SELECT * FROM users where stato='0'";
    $result = mysqli_query($conn,$query);

    while($row = mysqli_fetch_array($result) ){
        $id = $row['id'];
        $stato = $row['stato'];
    ?>
                        <tr>
                            <!-- Checkbox -->
                            <td><input type='checkbox' name='update[]' value='<?= $id ?>' ></td>
                        
                            <td><?= $id ?></td>

                            <td><input type='number' name='stato_<?= $id ?>' value='<?= $stato ?>' ></td>

                        </tr>
    <?php
    }
    ?>
            </table>
    </div>

    <div class="form-group">                            
        <label for="name" class="control-label">Data Formulario</label>
        <input type="date" class="form-control" id="datafr" name="datafr" placeholder="Data Formulario" value="<?php echo date('Y-m-d'); ?>" required>          
    </div>

当我提交对话框表单时,我调用了一个在我的表中添加新行的方法;我会根据复选框的选择进行查询。

这是添加新行的方法:

public function addCarico(){
            
    $insertQuery = "INSERT INTO ".$this->empTable." 
                (data_fr, data_trasporto, codice_eer, stato_fisico, 
                classi_pericolo, formulario, produttore, trasportatore, 
                destinatario, quantità, note, carico, stato_carico) 
            VALUES ('".$_POST["datafr"]."', '".$_POST["datatr"]."', 
                    '".$_POST["eer"]."', '".$_POST["statof"]."', 
                    '".$_POST["pericolo"]."', '".$_POST["fr"]."', 
                    '".$_POST["prod"]."', '".$_POST["trasp"]."', 
                    '".$_POST["dest"]."', '".$_POST["qta"]."', 
                    '".$_POST["note"]."', '1', '0')";
    $isUpdated = mysqli_query($this->dbConnect, $insertQuery);  
    print_r($_POST['update']);
}

我尝试添加此代码:

if(isset($_POST['update'])){
    foreach($_POST['update'] as $updateid){

        $stato = $_POST['stato_'.$updateid];

        if($stato !=''){
            $updateUser = "UPDATE users SET 
                stato='1' 
            WHERE id=".$updateid;
            mysqli_query($con,$updateUser);
        }
        
    }
}

但我不明白,因为表格没有更新..

【问题讨论】:

  • 您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在MYSQLI_PDO API 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入!
  • 良好的代码缩进将帮助我们阅读代码,更重要的是它会帮助您调试代码 Take a quick look at a coding standard 为您自己的利益。可能会要求您修改此代码
  • 你是否开启了错误报告
  • 要从 PHP 中获取错误即使在 LIVE 环境中,请将这 4 行 在调试时临时添加到任何 MYSQLI_ 的顶部您要调试的基于脚本ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);。这将强制任何MYSQLI_ 错误生成一个您可以在浏览器上看到的异常以及正常的 PHP 错误。
  • 你知道代码是否进入if(isset($_POST['update'])){

标签: php mysql checkbox


【解决方案1】:

我会检查 mysql 错误日志并最终尝试使用 SET GLOBAL general_log = 'ON' 临时启用查询日志。另外,正如@RiggsFolly 建议的那样,尽可能多地启用调试代码并查找是否出现错误并在 if isset($_POST) 中添加echo 'what you want'

【讨论】:

  • action属性由js赋值;在表单的末尾有:&lt;div class="modal-footer"&gt; &lt;input type="hidden" name="empId" id="empId" /&gt; &lt;input type="hidden" name="action" id="action" value="" /&gt; 操作由以下代码分配:``` $('#carico').click(function(){ $('#caricoModal').modal('show') ; $('#employeeForm')[0].reset(); $('.modal-title').html(" Carico/Scarico"); $('#action').val('addEmployee'); $('#save').val('Add'); }); ``` 此代码分配 addEmploye 动作,在 action1.php 中定义
【解决方案2】:

做各种事情来检查更新查询。

  1. 检查您是否收到了变量 $ _POST ['update']

  2. 打印您要执行的查询更新

  3. 检查查询是否正确

如果一切正常,则可能是与数据库的连接不工作。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
相关资源
最近更新 更多