使用一个查询插入多个数组

Posted

技术标签:

【中文标题】使用一个查询插入多个数组【英文标题】:insert more than one array using one query 【发布时间】:2015-06-28 02:25:34 【问题描述】:

我想在数据库中插入一组复选框、下拉菜单和日期。如果我选中了所有复选框,一切正常。但是,当我选中某些复选框时,可以插入复选框的值,但不能插入下拉列表和日期的值。

这是复选框、下拉菜单和日期的代码:

<div class='field'>
    <div class='checkboxes'>
        <div class='checkbox'>
            <input type='checkbox' id='spesimen$i' name='spesimen[]' value='$JenisSpesimen' required minlength='1'/><label>$JenisSpesimen</label><br>
        </div>
        <div class='select'>
            <select id='bilangan$i' name='bilangan[]' class='med' style='display: none;'>
                <option></option>
                <option value='Pertama'>Pertama</option>
                <option value='Kedua'>Kedua</option>
            </select>
        </div>
        <br>
        <div class='input' id='tarikh_ambil$i' style='display: none;'>
            <input type='text' id='tarikh_ambil_spesimen$i' name='tarikh_ambil_spesimen[]' class='small' readonly/>
        </div>
    </div>
</div>

这个过程:

$spesimen = $_POST['spesimen'];         
$countSpesimen = count($_POST['spesimen']);

$bilangan = $_POST['bilangan'];
//$countBilagan = count($_POST['bilangan']);

$tarikh_ambil = $_POST['tarikh_ambil_spesimen'];    
//$countTarikh = count($_POST['tarikh_ambil_spesimen']);

for ( $x = 0; $x < $countSpesimen; $x++)
    
        $xx = $x+1;
        $SubIDMohon = $IDMohonx.'-'.$xx;

        $dd=substr($tarikh_ambil[$x], 0, 2);
        $mm=substr($tarikh_ambil[$x], 3, 2);
        $yy=substr($tarikh_ambil[$x], 6, 4);
        $tarikh_ambil[$x] = $yy."-".$mm."-".$dd;
        if($tarikh_ambil[$x] == '--')  $tarikh_ambil[$x] = '0000-00-00'; 

        $pdo->exec("insert into simka_spesimen(IDMohon,SubIDMohon, Nama, LainLain, TarikhAmbil, TarikhHantar, TarikhMakmalTerima)
            values ('".$IDMohonx."','".$SubIDMohon."','".$spesimen[$x]."','".$bilangan[$x]."','".$tarikh_ambil[$x]."','".$tarikh_hantar_spesimen."','".$tarikh_terima_spesimen."')");
    

【问题讨论】:

欢迎。看起来像你的第一篇文章。请描述如何将表单数据发布到 php。请包含更多代码示例。 另外,name='spesimen[]' 不是必需的,因为您只有一个元素。由于您没有很多具有相同name 的元素,因此不会创建数组。只建议name='spesimen'$_POST['spesimen'] [ ] Value A -dropdown list- -date- [ ] Value B -dropdown list- -date- 这是应该出现的。所以,当我检查值 B 时,下拉列表和日期没有插入数据库。只有当我检查了 Value A 时,他们才没有任何问题 如果我没有将名称设置为 spesimen[],我可以计算帖子总数吗? @Twisty 你为什么需要计算它? 【参考方案1】:

我建议将您的字段包装成一个通用名称,以便您可以在每个“字段集”上运行 foreach,然后访问其对应的字段,而不是像现在这样将它们分开和独立。

html 应该是这样的:(根据需要实现计数器,但一定要在添加另一个集合之前增加它)

  <div class='field'>
    <div class='checkboxes'>
        <div class='checkbox'>
            <label><input type='checkbox' id='spesimen$i' name='fieldset[$counter][spesimen]' value='$JenisSpesimen' required minlength='1'/>$JenisSpesimen</label>
        </div>
        <div class='select'>
            <select id='bilangan$i' name='fieldset[$counter][bilangan]' class='med' style='display:none;'>
                <option></option>
                <option value='Pertama'>Pertama</option>
                <option value='Kedua'>Kedua</option>
            </select>
        </div>
        <div class='input' id='tarikh_ambil$i' style='display:none;'>
            <input type='text' id='tarikh_ambil_spesimen$i' name='fieldset[$counter][tarikh_ambil_spesimen]' class='small' readonly/>
        </div>
    </div>
</div>

你的PHP代码如下:

foreach($_POST['fieldset'] as $i=>$fields)

    $SubIDMohon = $IDMohonx .'-' . ($i + 1) ;

    //If specimen is checked, the value comes with post, otherwise set it to default ''
    $specimen = ( isset($fields['specimen']) ) ? $fields['specimen'] : '';

    //check if the date is valid format
    $date = '';
    if(preg_match('^([0-9]2-)2[0-9]4$', $fields['tarikh_ambil_spesimen'])) 
        $date = implode('-', array_reverse( explode('-', $fields['tarikh_ambil_spesimen']) ) );
    
    else
        $date = '0000-00-00';
    


    $pdo->exec(
        "insert into simka_spesimen(IDMohon,SubIDMohon, Nama, LainLain, TarikhAmbil, TarikhHantar, TarikhMakmalTerima)
            values (
                '" . $IDMohonx . "',
                '" . $SubIDMohon . "',
                '" . $spesimen . "',
                '" . $fields['bilangan'] . "',
                '" . $date . "',
                '" . $tarikh_hantar_spesimen . "',
                '" . $tarikh_terima_spesimen . "'
            )"
    );

尝试对您的$_POST 执行 print_r,以便查看其结构。

祝你好运!

【讨论】:

以上是关于使用一个查询插入多个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js 插入多个 mysql 查询?

在一个查询中插入多个表

在一个查询中插入多个表

使用 Excel VBA 将多个值插入连接查询

如何同时对多个表使用插入查询?

使用 UNION 增强来自多个表的插入查询的性能