在循环中插入语句

时间:2015-03-31 12:57:06

标签: php html mysqli

所以我让客户填写表格。表格包含以下信息:

name, weight, number of axles, number of bogies

填写表单后,会将其发送到数据库,放在表train_information中,如下所示:

Form filled in

现在,number_of_axles是一个FK,并且在插入火车后填充也是表axle。表格如下:

Example 2

现在,我拥有的是:

<div id="distances">
                <tr>
                    <?php
                        $_POST['number_of_axles'];
                            if(isset($_POST['number_of_axles'])){
                            for($i=0; $i<$_POST['number_of_axles']; $i++){
                                echo "<td>" . "<input type='text' placeholder='Distance $i' id='field' name='distance[$i]'>" . "</td>";
                            }
                        }
                    ?>
                </tr>
            </div>

这是在他们提交表单之后,另一页显示了基于轴数的文本字段数。 例如:他们输入了12个轴(见图像)。他们现在可以看到12个文本字段。 在这些领域,他们需要增加距离。当他们按下提交(提交按钮还没有)时,我希望在表axle中填写距离。 (见第二张图片,现在说它为NULL)

我该怎么做???

2 个答案:

答案 0 :(得分:0)

你可以遍历$ _POST ['distance'],此时这将是一个数组,因此构建插入查询。但你也需要通过train_id。

$train_id = $_POST['train_id'];
$distances = $_POST['distance'];

$sql = "INSERT INTO axle VALUES ";

$values = array();

foreach ($distances as $axle => $distance) {
    $values = " (NULL, $train_id, $axle, $distance)";
}

$sql .= implode($values, ",");
$sql .= ';';

这是构建查询的简单实现,可以(并且可能应该)更改适合在PDO或其他lib中工作。

答案 1 :(得分:0)

axle_id 用作input 名称属性的一部分:name=distance[$axle_id]。例如:

axles.php

<?php

// assuming db connection $conn available
// insert train info, makes mysqli_insert_id available
// form action="axles_update.php"

$result = mysqli_query($conn, // mysqli_insert_id is trusted
    "SELECT axle_id FROM axle WHERE train_id = " . mysqli_insert_id($conn));

$ii = 1;
while ($row = mysqli_fetch_assoc($result)){
    echo "<td><input type='text' placeholder='Distance " . $ii+ . 
         "' id='field' name='distance[" . $row['axle_id'] . "]'></td>\n";
}

?>

update_axles.php

<?php

// assuming db connection $conn available

$stmt = mysqli_prepare($conn, "UPDATE axle SET distance = ? WHERE axle_id = ?");
mysqli_stmt_bind_param($stmt, 'si', $value, $key);

foreach ( $_POST['distance'] as $key => $value ) {
    if ( '' != $value ) { mysqli_stmt_execute($stmt); }
}
mysqli_stmt_close($stmt);

?>

这里缺少很多细节和检查,但它显示了基本概念。