用于填充数据库的表单必须与数据库中的各个字段保持最新。
因此,需要一个动态表单字段:
<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...
}
将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
您的变量。
如何循环POST变量,并使用$key=>$value 插入它们
foreach($_POST as $skillname => $skillvalue){
$sql = "INSERT INTO PersonSkill (PersonID, SkillName, SkillValue) values $personid, $skillname, $skillvalue);";
}