代码之家  ›  专栏  ›  技术社区  ›  Maevari

向数据库插入多个同名输入

  •  0
  • Maevari  · 技术社区  · 7 年前

    我知道这里已经有人问过这个问题,但我已经问了20多遍了,无法得到下面的代码

    <form action="" method="post" >
     <td><input name="field1[]" value="" ></td>
     <td><input name="field2[]" value="" ></td>
     <td><input name="field3[]" value="" ></td>
     <td><input name="field1[]" value=""></td> 
     <td><input name="field2[]" value=""></td>
     <td><input name="field3[]" value=""></td>
     <td><input name="field1[]" value=""></td>
     <td><input name="field2[]" value=""></td>
     <td><input name="field3[]" value=""></td>
     <button type="submit" id="submit" name="submit" > Go </button>
    </form>
    
    
    
    
    
    <?php
    if(isset($_POST["submit"])){
    
        foreach($_POST['field1'] as $key => $value) {
    
            /* Attempt MySQL server connection. Assuming you are running MySQL
            server with default setting (user 'root' with no password) */
            $link = mysqli_connect("localhost", "dbuser", "dbpass", "dbname");
    
            // Check connection
            if($link === false){
                die("ERROR: Could not connect. " . mysqli_connect_error());
            }
    
            // Prepare an insert statement
            $sql = "INSERT INTO test (field1, field2, field3) VALUES (?, ?, ?)";
    
            if($stmt = mysqli_prepare($link, $sql)){
                // Bind variables to the prepared statement as parameters
                mysqli_stmt_bind_param($stmt, "sss", $field1, $field2, $field3);
    
                // Set parameters
                $field1 = $_REQUEST['field1'];
                $field2 = $_REQUEST['field2'];
                $field3 = $_REQUEST['field3'];
    
                // Attempt to execute the prepared statement
                if(mysqli_stmt_execute($stmt)){
                    echo "Records inserted successfully.";
                } else{
                    echo "ERROR: Could not execute query: $sql. " . mysqli_error($link);
                }
            } else{
                echo "ERROR: Could not prepare query: $sql. " . mysqli_error($link);
            }
    
            // Close statement
            mysqli_stmt_close($stmt);
    
            // Close connection
            mysqli_close($link);    
        }       
    }
    ?>
    

    我的问题很清楚——如何将这个数组存储到数据库中。我做错了,因为我的DB存储的是数组字而不是值。任何帮助都将不胜感激

    1 回复  |  直到 7 年前
        1
  •  2
  •   RiggsFolly    7 年前

    您正在引用 $_POST['field1'] 这是一个数组,因此是您的结果。

    您需要引用数组的项,即。 $_POST['field1'][0] 等等

    您也不需要在 foreach 。在循环外执行一次,并保存n*到服务器的往返路径和n*查询编译。

    <?php
    if(isset($_POST["submit"])){
    
        /* Attempt MySQL server connection. Assuming you are running MySQL
            server with default setting (user 'root' with no password) */
        $link = mysqli_connect("localhost", "dbuser", "dbpass", "dbname");
    
        // Check connection
        if($link === false){
            die("ERROR: Could not connect. " . mysqli_connect_error());
        }
    
        // Prepare an insert statement
        $sql = "INSERT INTO test (field1, field2, field3) VALUES (?, ?, ?)";
        $stmt = mysqli_prepare($link, $sql);
    
        // Bind variables to the prepared statement as parameters
        mysqli_stmt_bind_param($stmt, "sss", $field1, $field2, $field3);
    
        foreach($_POST['field1'] as $key => $value) {
    
            // Set parameters
            $field1 = $_POST['field1'][$key];
            $field2 = $_POST['field2'][$key];
            $field3 = $_POST['field3'][$key];
    
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                echo "Records inserted successfully.";
            } else{
                echo "ERROR: Could not execute query: $sql. " . mysqli_error($link);
            }
        }        
    }
    ?>
    
    推荐文章