从一个表单插入多个记录

时间:2013-08-16 00:20:35

标签: php mysql forms

我有一个表格可以将数据上传到多个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));

从我所读到的它需要一个数组,但我不知道如何做到这一点。有人可以帮我修改表单和查询以使其工作吗?

感谢。

3 个答案:

答案 0 :(得分:3)

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

for ($i = 0; $i < count($_POST['location']); $i++){
    //Do your insert code. 
}

答案 1 :(得分:1)

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运行它。但我相信这是你想要完成的事情。

答案 2 :(得分:1)

<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.

}