使用一个查询插入多个数组
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,以便查看其结构。
祝你好运!
【讨论】:
以上是关于使用一个查询插入多个数组的主要内容,如果未能解决你的问题,请参考以下文章