用于填充数据库的表单必须与数据库中的相应字段保持同步。
因此需要动态表单字段:
<table>
<tr>
<th>Intermediate</th>
<th>Advanced</th>
<th>No selection</th>
</tr>
<?php
$sth = $dbh->prepare("SELECT SkillName FROM Skill");
$sth->execute();
$tempCounter = 1;
while($row = $sth->fetch()) {
echo ("<tr>
<td colspan=\"3\">
<label for=\"td".$tempCounter."\">".$tempCounter.". ".$row['SkillName']."</label>
</td>
</tr>");
echo ("
<tr>
<td>
<input type=\"radio\" name=\"".$row['SkillName']."\" id=\"tdA".$tempCounter."\" value=\"1\"/>
</td>
<td><input type=\"radio\" name=\"".$row['SkillName']."\" id=\"tdB".$tempCounter."\" value=\"2\"/>
</td>
<td><input type=\"radio\" name=\"".$row['SkillName']."\" id=\"tdC".$tempCounter."\" value=\"\" /></td>
</tr>");
$tempCounter++;
}
?>
</table>
但是,当不清楚数据是什么时(特别是SkillName),我不知道如何将数据插入数据库
在伪代码中,它将是("INSERT INTO PersonSkill (PersonID, SkillName, SkillValue) values ($personid, $skillname, $skillvalue)")
其中$personid
已定义,$skillname
在撰写表单时未知,$skillvalue
是整数。
因此,如果HTTP标头信息可能类似于
- [personid] => 101
- [firstaid] => 2
- [swimming] => 1
- [mechanics] => 0
- [firearms] =>
- [athletics] => 2
我如何迭代这些值?我总是可以使用数据库本身来预测价值观,但最后一块拼图正在躲避我......
while($row = $sth->fetch()) {
if (isset($_POST[''.$row['SkillName'].'']))
// And er... save some variable at this point I suppose, or perhaps append to an array...
}
答案 0 :(得分:2)
将您的skill
inputs
变为array
:
<input type=\"radio\" name=\"skill[".$row['SkillName']."\]" id=\"tdA".$tempCounter."\" value=\"1\"/>
因此,您可以在其发布的页面中构建您的查询(因为我从阅读您的问题的评论中了解到这一点):
$query = '
INSERT INTO
PersonSkill
(
"PersonID",
"'.implode('","', array_keys($_POST['skill'])).'"
)
VALUES
(
'.$personid.',
"'.implode('","', array_values($_POST['skill'])).'"
)
';
如果您将firearms
留在空值上并在表单中为dance
选择2,则应该输出这样的内容:
string(195) "
INSERT INTO
PersonSkill
(
"PersonID",
"firearms","dance"
)
VALUES
(
69,
"","2"
)
"
但是,如果您不想发布空值,可以使用array_filter
清除它们:
$skills = array_filter($_POST['skill']);
$query = '
INSERT INTO
PersonSkill
(
"PersonID",
"'.implode('","', array_keys($skills)).'"
)
VALUES
(
'.$personid.',
"'.implode('","', array_values($skills)).'"
)
';
除非我当然误解了你。注意:这只是一个例子。至少escape
个变量。
答案 1 :(得分:1)
如何循环使用POST变量,并使用$ key =&gt;插入它们? $值
foreach($_POST as $skillname => $skillvalue){
$sql = "INSERT INTO PersonSkill (PersonID, SkillName, SkillValue) values $personid, $skillname, $skillvalue);";
}