每个陈述同时为2个?

时间:2015-05-03 20:41:11

标签: php mysql forms

我最近一直试图在我的表单上轻松添加更多字段,而不必返回并向我的数据库结构中添加更多行。所以,为了开始这个,我创建了一个表格,结构如下:

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());
}

3 个答案:

答案 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());
}