我最近一直试图在我的表单上轻松添加更多字段,而不必返回并向我的数据库结构中添加更多行。所以,为了开始这个,我创建了一个表格,结构如下:
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());
}
答案 0 :(得分:1)
您是否尝试过为选项数组提供密钥?
echo "<select name=\"option1[$row2[optiontitle]]\" id=\"option1\">";
然后将你的foreach改为:
foreach($_POST['option1'] as $title=>$val)
答案 1 :(得分:0)
对于隐藏的输入解决方案:只需像往常一样执行每个查询,但添加$_POST['optiontitle']
:
foreach($_POST['option1'] as $val){
$val = $db->escape_string($val);
$query30 = $db->query("
INSERT `usersoption` SET
`gid` = '".$id."',
`fid` = '".$fid."',
`optiontitle` = '".$_POST['optiontitle']."',
`option1` = '$val'
")or die(mysqli_error());
}
顺便说一句,你应该阅读prepared statements。这些允许您在插入数据库之前清理数据。它们对良好的编码实践至关重要。
答案 2 :(得分:0)
您可以使用key
中的foreach
来访问更多数组:
试试这个代码:
foreach($_POST['option1'] as $key=>$val){
$val = $db->escape_string($val);
$val2 = $db->escape_string(isset($_POST['optiontitle'][$key])?$_POST['optiontitle'][$key]:'');
$query30 = $db->query("INSERT `usersoption` SET `gid` = '".$id."', `fid` = '".$fid."', `optiontitle` = '$val2', `option1` = '$val'")or die( mysqli_error());
}