我有一些动态构建输入字段,其形式如下:
<input type="text" class="form-control" name="person[]" placeholder="Person" />
<input type="text" class="form-control" name="function[]" placeholder="Function" />
<input type="text" class="form-control" name="person[]" placeholder="Person" />
<input type="text" class="form-control" name="function[]" placeholder="Function" />
<input type="text" class="form-control" name="person[]" placeholder="Person" />
<input type="text" class="form-control" name="function[]" placeholder="Function" />
因为我写了这样的输入名称:person[]
&amp; function[]
我在$_POST
数组中获得了一个数字索引数组。
由于输入字段是动态的,因此无法确定有多少person[]
&amp; function[]
中会有$_POST
个索引号。
我该如何处理?换句话说,如果我想INSERT
person[0] + function[0] & person[1] + function[1] + ...
(可变数量的人和他们的功能)进入我的数据库怎么办?我怎么能提取这个,所以有可能这样做?
注意:每个人都有自己的功能,因此保持在一起非常重要。
我没有走得太远所以我无法提供更多我尝试过的代码:
foreach ($_POST['person'] as $value){
...
}
这为我提供了person[]
内部特定数组$_POST
的列表,但这对我没用..
答案 0 :(得分:2)
听起来有“人”的数量与“功能”的数量相同。如果是这种情况,那么你可以这样做:
foreach($_POST['person'] as $key => $value) {
echo 'Person ' . $value . ' has function ' . $_POST['function'][$key] . '<br>';
}
答案 1 :(得分:1)
如果您没有办法确保此人和功能输入以某种方式捆绑在一起,则此表单设计将导致问题。想象一下有人填写表格,他们将这个功能留空了一个人:
Person Function
Anna array_map
Betty
Claire count
date_format
表单逻辑不会将Betty
的函数视为空白,而是将Betty
与count
和Claire
与date_format
配对。因此,最好将每个人/功能组合与ID分组,以便您区分它们。使用JS或PHP中的迭代器很容易。
新表格:
<input type="text" class="form-control" name="persfunc[1][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[1][f]" placeholder="Function" />
<input type="text" class="form-control" name="persfunc[2][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[2][f]" placeholder="Function" />
<input type="text" class="form-control" name="persfunc[3][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[3][f]" placeholder="Function" />
<input type="text" class="form-control" name="persfunc[4][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[4][f]" placeholder="Function" />
然后,您可以使用这样的函数来处理数据:
# gather up all the 'persfunc' data from $_POST
if (! empty($_POST['persfunc'])) {
# initialise an array for the results
$pers_func_arr = array();
foreach ($_POST['persfunc'] as $pf) {
# make sure that both $persfunc[x]['p'] and $persfunc[x]['f'] have values
if (
isset($pf['p'])
&& isset($pf['f'])
&& strlen($pf['p']) > 0
&& strlen($pf['f']) > 0
) {
# you've got a pair! Do whatever you want with them.
# e.g. print out the name/function pair:
echo "<p>Person " . $pf["p"]
. " has function " . $pf["f"]."</p>";
# e.g. add them to a data structure for later use
$pers_func_arr[] = array( $pf["p"], $pf["f"] );
}
}
}
为此表单提供之前的狡猾的输入数据,并检查输出:
Person Anna has function array_map
Missing full data for person_2
Person Claire has function count
Missing full data for person_person_4
这是处理表单数据的一种更健壮的方式,而不仅仅是相信您的输入会匹配,并且它不需要更多的编码。
答案 2 :(得分:0)
这样的事情可能会起作用
$sql = "INSERT INTO tbl (Person,Function) VALUES ";
$components = array();
$totalitemcount = count($_POST['person']);
for ($i=0;$i<=$totalitemcount;$i++) {
$components[] = "('".$_POST['person'][$i]."','".$_POST['function'][$i]."')";
}
$insertstring = implode(",",$components);
$finalsql = $sql.$insertstring;
//do insert here