从表单提交中插入行,获取插入的 id,然后使用新 id 作为外键将可重复字段作为多行插入

问题描述 投票:0回答:2

我有一个 HTML 表单,我使用“foreach”循环从数据库填充该表单,因此名称中的字段具有相同的名称。我想要回发到数据库的数据来自数组变量。此时,当我插入数据库时,我得到了正确的插入次数,只有插入的值(在本例中为 4 次)是相同的值,如 HTML 表单的最后一行。

我尝试过内爆,甚至从 VAR 中提取值,但我确信我走错了路。

if(isset($_GET['submit']))
{    
    $client_id = ($value->ID);
    $qry = "INSERT INTO salesorder (client_id)
            VALUES ('$client_id')";
    $result = mysqli_query($mysql,$qry) or die(mysqli_error($mysql));
    $order_id = mysqli_insert_id($mysql);
    foreach ($results as $result) :  
        $food_id = $_GET['foodid'];
        print_r($food_id);
        $qty = $_GET['qty'];
        $qry="INSERT INTO orderline (order_id, food_id, qty) VALUES ($order_id, '$food_id', '$qty') ";
        $result = mysqli_query($mysql,$qry);
    endforeach; 
}               
<tbody>
    <form action="" method="GET">
        <?php foreach ( $results as $result ) : ?>
            <tr>
                <td><input name="qty" size="2" type="number"></td>
                <td><?php print($result->food_type); ?></td>
                <td><input name="foodid[]" size="4" type="number" value=<?php print($result->food_id); ?>></td>
            <tr>
        <?php endforeach; ?>
</tbody>

这就是表格的样子:

因此,表单首先从数据库动态加载。可以是 2 行,也可以是 50 行... 但我的问题是,在客户填写了他想要下订单的数量后,“读取”整个表格,并将其加载回数据库

php arrays mysqli insert form-submit
2个回答
1
投票

如果您从 HTML 表单中获取一个数组,那么您需要循环该数组并将每一行单独插入到数据库中。为此,您需要使用准备好的语句和循环。

if (isset($_GET['submit'])) {
    $client_id = $value->ID; // Wherever this value comes from...

    // Insert new sales order
    $stmt = $mysql->prepare('INSERT INTO salesorder (client_id) VALUES (?)');
    $stmt->bind_param('s', $client_id);
    $stmt->execute();
    $stmt->store_result();

    $order_id = $mysql->insert_id;

    // prepare the SQL statement
    $orderline_stmt = $mysql->prepare('INSERT INTO orderline (order_id, food_id, qty) VALUES (?,?,?)');

    // loop on each element from HTML form 
    // i.e. <input name="foodid[]" >
    foreach ($_GET['foodid'] as $key => $food_id) {
        $qty = $_GET['qty']; // should this be an array too?
        // $qty = $_GET['qty'][$key]; <-- if it's also an array

        $orderline_stmt->bind_param('sss', $order_id, $food_id, $qty);
        $orderline_stmt->execute();
    }
}

0
投票

我不确定您的 HTML 是什么样子,但所有输入具有相同的名称并不一定意味着它们已成为数组。您需要使用

[]
将它们定义为 HTML 中的数组。下面是一个例子

HTML

<form method="post" name="myform">
<input type="text" name="array[]" Value="101"/>
<input type="text" name="array[]" Value="102"/>
<input type="text" name="array[]" Value="103"/>
<input type="text" name="array[]" Value="104"/>
<input type="submit" name="submit" Value="submit"/>
</form>

PHP

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

foreach($_POST['array'] as $myarray) {

    echo $myarray.'<br>';

}

这应该让你从每个输入中获得唯一的值,然后你可以用它做你想做的事。

这里是其他几个可以提供帮助的解决方案的链接:Post text box array in PHP

© www.soinside.com 2019 - 2024. All rights reserved.