Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用每行包含许多数据的多行chekecd从表单更新mysql数据库_Php_Mysql - Fatal编程技术网

Php 如何使用每行包含许多数据的多行chekecd从表单更新mysql数据库

Php 如何使用每行包含许多数据的多行chekecd从表单更新mysql数据库,php,mysql,Php,Mysql,在表中: 身份证件 客户名称 价格 控制 更新数据库 如果我理解正确,那么以下内容可能会有帮助 首先修改表单元素,使其使用与指定给checkbox字段相同的语法-但这是一个不寻常的名称 <form action="" method="post"> <table> <tr> <td>ID</td> <td>Customer Name</td> <td>P

在表中:

身份证件 客户名称 价格 控制 更新数据库
如果我理解正确,那么以下内容可能会有帮助

首先修改表单元素,使其使用与指定给checkbox字段相同的语法-但这是一个不寻常的名称

<form action="" method="post">
  <table>
    <tr>
      <td>ID</td>
      <td>Customer Name</td>
      <td>Price</td>
      <td>Control</td>
    </tr>
    <tr>
      <td><input type="text" value="111" name="userID[]" /></td>
      <td><input type="text" value="john" name="fname[]" /></td>
      <td><input type="text" value="1000" name="price[]" /></td>
      <td><input type="checkbox" value="120" name="checkbox[]" /></td>
    </tr>
    <tr>
      <td><input type="text" value="115" name="userID[]" /></td>
      <td><input type="text" value="mike" name="fname[]" /></td>
      <td><input type="text" value="800" name="price[]" /></td>
      <td><input type="checkbox" value="120" name="checkbox[]" /></td>
    </tr>
    <tr>
      <td><input type="text" value="98" name="userID[]" /></td>
      <td><input type="text" value="tetra" name="fname[]" /></td>
      <td><input type="text" value="125" name="price[]" /></td>
      <td><input type="checkbox" value="120" name="checkbox[]" /></td>
    </tr>
  </table>

  <button type="submit">Update Database</button>
</form>
然后,处理请求的PHP的基本形式可能如下所示:

<?php

    if( $_SERVER['REQUEST_METHOD']=='POST' ){

        $userids=!empty( $_POST['userID'] ) ? $_POST['userID'] : false;
        $fnames=!empty( $_POST['fname'] ) ? $_POST['fname'] : false;
        $prices=!empty( $_POST['price'] ) ? $_POST['price'] : false;
        $checkboxes=!empty( $_POST['checkbox'] ) ? $_POST['checkbox'] : false;

        $sql='update `TABLE` set `fname`=?, `price`=?, `control`=? where `userID`=?';
        $stmt=$db->prepare( $sql );

        if( $stmt ){

            $stmt->bind_param('siii', $fname, $price, $control, $uid );


            foreach( $checkboxes as $index => $control ){
                if( !empty( $control ) ){
                    $uid=$userids[ $index ];
                    $fname=$fnames[ $index ];
                    $price=$prices[ $index ];

                    $stmt->execute();
                }
            }
            $stmt->close();
            $db->close();
        }
    }

?>

由于有多个元素具有相同的名称,但没有使用array[]语法,因此只能看到一个userID、fname和price。。。使用like userID[]代替为什么复选框的值总是120?@RamRaider,这是我的错误,可以使用任何值吗?为什么不使用elvis运算符?谢谢,但在这个解决方案中只更新了一行,如何更新多行?真的吗?你确定吗?@RamRaider,是的。在act中:当一个复选框选中D时,该复选框的值将传递给POST,这很好,但问题是:另一个字段将通过null值传递给POST。那么构建的数组没有相等的计数。我解决了我的问题。但是谢谢你的帮助,如果上面有小变化的话!空$control{…它应该解释空值和空值,所以我希望索引和其他值应该保持同步