从一个表单插入多条记录


Multiple records inserted from one form

我有一个表单可以将数据上传到多个MySQL表,其中一部分需要四个相同的部分才能将视频位置数据上传到一个表。所有四个视频部分不会总是被填写,有时它们可能都是空白的,然后任何数字都有数据,最多四个都有数据。以下是显示一个视频位置上传的表格的一部分,这需要在表格上出现四次:

<tr>
    <td>Video 1:</td>
    <td></td>
</tr>
    <tr>
        <td>Location</td>
        <td><input type="text" name="location"></td>
    </tr>
    <tr>
        <td>Park Video</td>
        <td><input type="checkbox" name="park_id_video" 
                   value="<?=$park_id?>">Park Video</td>
    </tr>
    <tr>
        <td>Ride</td>
        <td>
            <select name="ride_id_video">
            <option value="">Select Ride</option>
            <?php echo $options ?>
            </select>
        </td>
</tr>

下面显示了我使用并将用于此操作的典型插入查询。不过,我从来没有像这样插入过多个记录,也不确定如何做到这一点,以便在一个查询中上传所有四组数据。此外,如果四组数据中的任何一组是空白的,则不会插入空白记录。

$news_id = $pdo->lastInsertId() ;
    $location = $_POST['headline'];
    $park_id_video = $_POST['park_id_video'];
    $ride_id_video =  $_POST['ride_id_video'];
    $query4 = $pdo->prepare('INSERT INTO tpf_videos
                                   (location, park_id, ride_id, news_id) 
                            VALUES (?, ?, ?, ?)');
    $query4->execute(array($location, $park_id, $ride_id, $news_id));

据我所知,它需要一个数组,但我不知道如何做到这一点。有人能帮我修改表格和查询吗?

谢谢。

只需将表单的字段重命名为类似filed_name[]的字段,然后使用循环就可以执行多次插入。

for ($i = 0; $i < count($_POST['location']); $i++){
    //Do your insert code. 
}
<tr>
<td>Video 1:</td>
<td></td>
</tr>
<tr>
    <td>Location</td>
    <td><input type="text" name="location[1]"></td>
</tr>
<tr>
    <td>Park Video</td>
    <td><input type="checkbox" name="park_id_video[1]" 
               value="<?=$park_id?>">Park Video</td>
</tr>
<tr>
    <td>Ride</td>
    <td>
        <select name="ride_id_video[1]">
        <option value="">Select Ride</option>
        <?php echo $options ?>
        </select>
    </td>
</tr>
for ($i = 0; $i < count($_POST['location']); $i++{
   //Do your insert code.
}

HTML示例

<tr>
    <td>Video 1:</td><td>&nbsp</td>
</tr>
<tr>
    <td>Location</td><td><input type="text" name="videos[1][location]"></td>
</tr>
<tr>
    <td>Park Video</td><td><input type="checkbox" name="videos[1][park_id_video]" value="<?=$park_id?>">Park Video</td>
</tr>
<tr>
    <td>Ride</td>
    <td>
        <select name="videos[1][ride_id_video]">
            <option value="">Select Ride</option>
            <?php echo $options ?>
        </select>
    </td>
</tr>
<tr>
    <td>Video 2:</td><td>&nbsp</td>
</tr>
<tr>
    <td>Location</td><td><input type="text" name="videos[2][location]"></td>
</tr>
<tr>
    <td>Park Video</td><td><input type="checkbox" name="videos[2][park_id_video]" value="<?=$park_id?>">Park Video</td>
</tr>
<tr>
    <td>Ride</td>
    <td>
        <select name="videos[2][ride_id_video]">
            <option value="">Select Ride</option>
            <?php echo $options ?>
        </select>
    </td>
</tr>

您的后端PHP用于单个插入

$news_id = $pdo->lastInsertId() ;
$videos = $_POST['videos'];
$inserts = array();
$args = array();
foreach ($videos as $video) {
    $vid_args = array(
        $video['location'],
        $video['park_id_video'],
        $video['ride_id_video'],
        $news_id
    );
    $inserts[] = "(?,?,?,?)";
    $args = array_merge($args, $vid_args);
}
$sth = $pdo->prepare('INSERT INTO tpf_videos (location, park_id, ride_id, news_id) VALUES ' . implode(',', $inserts));
$sth->execute($args);

这里面可能有一两个语法错误。我没有通过PHP运行它。但我相信这正是你想要实现的。