【发布时间】:2016-03-04 19:13:40
【问题描述】:
我正在做一个需要填写字段的 PHP 表单 - 在提交表单后,冲浪者有一个部分是关于编辑申请表中的字段...
技能集在原始页面中打勾,但在编辑技能集时,我输入的代码显示复选框的排列顺序与原始页面不同。
这是原始申请页面,其中复选框在被选中后但在提交之前以及可能对表单进行编辑之前:
如果申请人想编辑字段,这里是字段提交并由服务器处理到数据库后的申请页面。他们完全混乱了!
我希望第二个图像在应用程序完成时生成一个复选框列表,就像第一个图像一样。
从名为 Skillset 的数据库表中选择或检索字段,并与从该表插入到另一个名为 emprecords 的表中的值进行比较。通过在 emprecords 表中运行 for 循环,我能够回显或打印出特定申请人已插入但我不能为阵列中的技能列表以正确的顺序打印选定的复选框。我希望上面的图片会有所帮助。 这是在网站上为申请人编辑字段的页面的 PHP 代码:
<br><br><H2 align="center">SKILLS SET</H2>
<br>
<label for="skills" size="3">Pick Your Skill(s): </label>
<br><br>
<tr>
<table border='1' cellspacing='0'>
<colgroup>
<col span='1'>
</colgroup>
<tr>
<td>Engineering Services</td>
<td>Information Technologies</td>
<tr>
<td valign="top">
<?php
$id = $_GET["id"];
$query2 = "SELECT * FROM emprecords WHERE id ='$id'";
$record_set2 = $dbs->prepare($query2);
$record_set2 -> execute();
$row2 = $record_set2->fetch(PDO::FETCH_ASSOC);
$sk = $row2['skills'];
$skills1 = explode(",", $sk);
for ($i=0; $i< count($skills1); $i++) {
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills1'checked>$skills1[$i]<br>";
}
$list = "
SELECT *
FROM skillsset
WHERE category='Engineering'
ORDER BY skills ASC";
$listAHI = $dbs ->prepare($list);
$listAHI -> execute();
if(!isset($_POST['submitd'])) {
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC))
{
$skills = $row["skills"];
echo "
<form action='' method='post'>
<input type='checkbox' id='skills' name='skills[]' value='$skills'> $skills<br> ";
}
}
else {
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC)) {
$skills = $row["skills"];
if(strlen($skills)>0){
if(isset($_POST['skills']) and in_array($skills, $_POST['skills'])) {
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills' checked>$skills<br>";
}
if(isset($_POST['skills']) and !in_array($skills, $_POST['skills'])){
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills' unchecked>$skills<br>";
} else {
if(!in_array($skills, $_POST['skills'])) {
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills' unchecked>$skills<br>";
}
}
}
echo "</form>";
}
}
?>
</td>
<td valign="top">
<?php
$list = "
SELECT *
FROM skillsset
WHERE category='Information'
ORDER BY skills ASC";
$listAHI = $dbs ->prepare($list);
$listAHI -> execute();
if(!isset($_POST['submitd'])){
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC))
{
$skills = $row["skills"];
echo "
<form action='' method='post'>
<input type='checkbox' id='skills' name='skills[]' value='$skills'> $skills<br> ";
}
}
else {
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC)) {
$skills = $row["skills"];
if(strlen($skills)>0) {
if(isset($_POST['skills']) and in_array($skills, $_POST['skills'])) {
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills' checked>$skills<br>";
}
if(isset($_POST['skills']) and !in_array($skills, $_POST['skills'])) {
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills' unchecked>$skills<br>";
} else {
if(!in_array($skills, $_POST['skills'])){
echo "<input type='checkbox' id='skills' name='skills[]' value='$skills' unchecked>$skills<br>";
}
}
}
echo "</form>";
}
}
?>
</td>
</tr>
</table>
请帮我解决这个难题。
【问题讨论】:
-
有意愿有能力!您会注意到它并没有出现乱序,而是出现了两次......
emprecords是否存储了属于某个 id 的 skills?如果你想得到答案,请回答。此外,您的表格混乱得令人不安。为什么你打印了这么多表格却从不关闭它们?您只需要 1 个表格吗?您可能只需要一种形式... -
是的,emprecords 存储属于它从技能集表中检索的 id 并将其插入到 emprecords 表中的技能...
-
是的,我只想要 1 个表格...仍然需要弄清楚如何只打印一次...thnx
-
emprecords 是将一个人的所有技能保存在一行中,还是每个技能都有一行? (所以对于图片中的示例,是返回 3 行还是 1 行?)并将表单 echo 移到 while 循环之外,在 if 语句之外,然后停留在桌子周围。
-
在任何情况下,当你遍历 emprecords 的结果时,将 $id 拥有的所有技能存储在一个一维数组中,然后当你遍历
skillset表的结果时,你应该检查$skills是否为in_array($skill, $arrayContainingEmprecordsResults)。并且每次都这样做,无论是否提交了帖子。更长的答案将在一天结束时出现(这里是清晨)
标签: php arrays list loops checkbox