最近,我一直在尝试一种方法,可以轻松地在表单上添加更多字段,而不必回头向数据库结构添加更多行。因此,为了开始进行此工作,我创建了一个结构如下的表:

OptionTitle
Option1
Option2
Option3
Option4
Option5
Option6


如您所见,它最多包含6个选项,而OptionTitle是表单的标签名称。然后,我制作了另一个表,该表反映了上一个表的用户输入。该表名为usersoption

fid
OptionTitle
Option1


好的,FID反映了它所引用的形式。这样,当显示提交的表单时,它将从该表中提取FID相同的信息。 OptionTitle是表单的标签,而Option1是用户提交的选项。

现在,在窗体上实际包括要选择的选项。这是我的代码包含方式的简化版本:

$query100 = $db->query("SELECT * FROM options WHERE fid='" . $id . "'");

while($row2 = mysqli_fetch_array($query100))
 {
echo "
  <div class=\"divform\" id=\"optiontitle\">
    <label for=\"optiontitle\">$row2[optiontitle]:</label>
    <select name=\"option1[]\" id=\"option1\">";

echo "<option value='$row6[option1]'>$row6[option1]</option>";
echo "<option value='$row6[option2]'>$row6[option2]</option>";
echo "<option value='$row6[option3]'>$row6[option3]</option>";
echo "<option value='$row6[option4]'>$row6[option4]</option>";
echo "<option value='$row6[option5]'>$row6[option5]</option>";
echo "<option value='$row6[option6]'>$row6[option6]</option>";

    echo "
  </select>
  </div>
";
 }


如您所见,选择名称为option1 []。这样一来,我可以在同一表单上拥有多个选择字段,作为回报,这会将多个差异选择字段带到提交的流程中。现在,在提交过程中讨论我的问题所在。这是我到目前为止的内容:

foreach($_POST['option1'] as $val){
$val = $db->escape_string($val);
   $query30 = $db->query("INSERT `usersoption` SET `gid` = '".$id."', `fid` = '".$fid."', `optiontitle` = 'Where OptionTitle should go', `option1` = '$val'")or die(        mysqli_error());
}


如您所见,我可以通过一个foreach语句成功实现该选项。我不能做的是带上OptionTitle。似乎几乎没有必要引入OptionTitle,但是阅读提交表单的人必须知道要提交哪个选项。我不确定如何保留OptionTitle,这似乎很简单,但是我的所有尝试都失败了。我进行了一些研究,建议之一是创建一个带有名称的隐藏输入,并以这种方式进行输入。这是格式的插件:

<input type=\"hidden\" name=\"optiontitle[]\" value=\"test\">


这将被添加到表单中,然后继续进行,但是问题是如何将其移到表单上?我将需要执行多个不起作用的foreach语句。例如,这是我试图带来的(无效):

foreach($_POST['option1'] as $val) && ($_POST['optiontitle'] as $val2)){
$val = $db->escape_string($val);
$val2 = $db->escape_string($val2);
   $query30 = $db->query("INSERT `usersoption` SET `gid` = '".$id."', `fid` = '".$fid."', `optiontitle` = '$val2', `option1` = '$val'")or die(      mysqli_error());
}

最佳答案

您是否尝试过为您的选项数组设置键?

echo "<select name=\"option1[$row2[optiontitle]]\" id=\"option1\">";


然后将您的foreach更改为:

foreach($_POST['option1'] as $title=>$val)

09-25 21:40