php - 使用 PHP 根据数组中的复选框值更新 mysql 数据库表

标签 php mysql

我是 PHP 编程新手。

我正在开发一个 PHP 项目,在该项目中,我使用每行一个复选框字段来填充 mysql 数据库中的动态表。

<?php                                          
 $sql = "select * from caseinstruction where fir_nos='$fir_nos'";
      $result = $con->query($sql);

       if ($result->num_rows > 0) {
      // output data of each row
       $i = 1;
       while($row = $result->fetch_assoc()) {  

          echo "<tr><td class='text-center'>". $i++ ."</td>
              <td><input type='text' value='{$row['Instructions']}' class='form-control input-sm' style='border:none'></td>
              <td class='text-center form-group'><input type='checkbox' name='foo[]' value='1'></td>
          </tr>\n";
        }
       }
?>

它工作完美。当我想用检查的值更新同一个 mysql 表时,就会出现问题。假设如果用户选中一个复选框,那么它将在 mysql 表中反射(reflect) 1,如果没有选中任何选项,那么它将在 mysql 表中反射(reflect) 0。

我绑定(bind)运行 foreach 命令,它会按照我的预期填充值,但是当我运行 update 命令时,它只反射(reflect) 0。请帮助我。

<?php
require('../php-includes/connect.php');

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
    $fir_nos = $_POST['fir_nos'];
    $cins = $_POST['foo'];

    echo '<pre>';
    print_r($cins);
    echo '</pre>'

    foreach ($$cins as $value) {
        $sql="update mytable set report02='$value'";
        $result = $con->query($sql);
    }
}

我在这方面遗漏了一些东西。请帮我。提前感谢大家。

# | Instruction | value |
-------------------------
1 | abc         | 1     | //checked
2 | cdf         | 0     | //unckecked
3 | efg         | 1     | //checked
-------------------------

最佳答案

您的代码中有一些错误:

首先:如果您希望能够获取选中了哪些复选框,则需要为每个复选框添加标识符。例如,如果您在表 caseinstruction 中有一个列 id,您可以使用:

<input type='checkbox' name='foo[]' value='{$row['id']}'>

第二:您的代码中有一个拼写错误。将 $$cins 更改为 $cins

第三:我不知道您想对更新查询执行什么操作。由于您的示例没有指定任何 WHERE 子句,因此您只会收到多个更新查询,例如 update mytable set report02='83'update mytable set report02 ='84' 等,这将在循环中再次使用一个值更新表中的所有行。

相反,您需要指定要更新的行和列,例如 update mytable set report02 = 1 where id = '83'。例如:

<?php
require('../php-includes/connect.php');

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
    $fir_nos = $_POST['fir_nos'];
    $cins = $_POST['foo'];

    foreach ($cins as $value) {
        $sql="update mytable set report02 = 1 where id = '$value'";
        $result = $con->query($sql);
    }
}

我建议使用mysqli_real_escape_string()防止sql注入(inject)。出于性能原因,仅使用一次更新调用,而不是对每个复选框值调用一次:

<?php
require('../php-includes/connect.php');

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
    $fir_nos = $_POST['fir_nos'];
    $cins = $_POST['foo'];

    $value = implode(',',$cins); // JOIN ALL ID INTO ONE COMMA SEPARATED STRING
    $value = mysqli_real_escape_string($con, $value); //PREVENT SQL-INJECTION
    // SET VALUE 1 FOR ALLA CHECKED:
    $con->query("update mytable set report02 = 1 where id IN($value)");         
    // SET VALUE 0 FOR ALL THE REST IN THE TABLE:
    $con->query("update mytable set report02 = 0 where id NOT IN($value)"); 
}

关于php - 使用 PHP 根据数组中的复选框值更新 mysql 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42732755/

相关文章:

php - 动态传递 PHP 变量

php登录脚本在本地工作但在主机上不起作用

php - 为什么我上传的数据被重命名,并且相应的数据被添加到不同的行?

java - java mysql 连接中的运行时错误

MySQL - 将两行连接到两列

php - 网页不保留换行符

php - 如何将嵌套集模型数据格式化为数组?

php - 将 simple_html_dom 与 ajax 结合使用

mysql - 这是一个 t sql 存储过程吗

Mysql查询左连接访问变量