Php 安排勾选框的问题
我正在做一个PHP表单,需要填写字段-在表单提交后,有一个关于在应用程序表单中编辑字段的部分 技能集在原始页面中打勾,但在编辑技能集时,我键入的代码显示的复选框排列顺序与原始页面不同 这是原始应用程序页面,在选中复选框之后,但在提交和可能编辑表单之前,该页面带有复选框: 如果申请者想要编辑字段,那么在服务器将字段提交并处理到数据库中之后,这里是应用程序页面。他们完全乱了! 我希望第二个图像生成一个复选框列表,就像应用程序运行时的第一个一样 字段从名为skillset的数据库表中选择或检索,并与从该表插入另一个名为emprecords的表中的值进行比较。通过在emprecords表中运行for循环,我能够回显或打印技能集列表(在emprecords数据库中用逗号分隔每个技能的字符串内爆后)特定申请人已插入,但我无法按照数组中技能列表的正确顺序打印所选复选框。我希望上面的图片会有所帮助。 以下是页面的PHP代码,用于编辑网站上申请人的字段:Php 安排勾选框的问题,php,arrays,list,loops,checkbox,Php,Arrays,List,Loops,Checkbox,我正在做一个PHP表单,需要填写字段-在表单提交后,有一个关于在应用程序表单中编辑字段的部分 技能集在原始页面中打勾,但在编辑技能集时,我键入的代码显示的复选框排列顺序与原始页面不同 这是原始应用程序页面,在选中复选框之后,但在提交和可能编辑表单之前,该页面带有复选框: 如果申请者想要编辑字段,那么在服务器将字段提交并处理到数据库中之后,这里是应用程序页面。他们完全乱了! 我希望第二个图像生成一个复选框列表,就像应用程序运行时的第一个一样 字段从名为skillset的数据库表中选择或检索,并
<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>
技能集
选择您的技能:
工程服务
信息技术
强制性链接:
让我们从小事做起
您可能需要将技能集
更改为技能集
(请参阅?从小开始:)
在信息技术之后,您缺少一个结束语
您正在这样做:
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 ...
另外,不清楚下面的代码做了什么,我花了几次阅读才明白。我对自己这样做感到内疚,但我想建议您在代码复杂时尝试并评论代码的意图
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>";
}
}
愿意而且能干!你会注意到它并没有出现问题,而是出现了两次。。。emprecords
是否存储属于id的技能?如果你想得到答案,就回答这个问题。而且,你的表格令人不安地乱七八糟。为什么打印这么多表单却从不关闭它们?你只需要一张表格吗?你可能只需要一张表格……是的,emprecords存储属于它从skillsset表中检索到的id的技能,并将其插入emprecords表中…是的,我只需要一个表单…仍然需要找出如何只打印一次…ThnxEmpRecords是将一个人的所有技能保存在一行中,还是每个技能有一行?(因此,对于图片中的示例,是返回3行还是1行?)并将表单echo移到while循环之外、if语句之外,然后在表中停留。在任何情况下,当您循环查看emprecords的结果时,将$id拥有的所有技能存储在一个一维数组中,然后在循环查看skillset
表的结果时,您应该检查$skills
是否位于\u数组($skill,$arrayContainingEmprecordsResults)
中。每次都这样做,不管是否提交。一天结束时(现在是清晨)会有更长的回答,这是一个磨坊的花蕾!我成功了!我通常不使用try/catch子句,但我想它在防止SQL注入时有很好的用途——必须捕获PDO错误。很好!如果这还不能完全回答您的问题,请将您的代码发布给其他人!它确实工作得很好…你给我的代码就是我正在使用的…虽然我可以简化它很多…但我想现在已经足够好了
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>";
}
}
$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>";
}
<br><br><H2 align="center">SKILL SET</H2>
<br>
<label>Pick Your Skill(s):</label>
<br><br>
<table border='1' cellspacing='0'>
<colgroup>
<col span='1'>
</colgroup>
<tr>
<td>Engineering Services</td>
<td>Information Technologies</td>
</tr>
<tr>
<?php
$empSkills = array();
if(isset($_GET['id'])) {
$id = $_GET["id"];
// use this try catch to catch potential errors
try {
// note how $query2 has :id at the end. Using ->prepare() and ->execute(with array parameter) is one good way to protect yourself from SQL injection attacks
// also, only pull the columns that you're going to actually use
$query2 = "SELECT skills FROM emprecords WHERE id =:id";
$record_set2 = $dbs->prepare($query2);
$record_set2 -> execute(array(':id'=>$id));
$row2 = $record_set2->fetch(PDO::FETCH_ASSOC);
$sk = $row2['skills'];
$empSkills = explode(",", $sk);
// always perform clean-up
$record_set2->closeCursor();
} catch (PDOException $e) { // always perform error checking on PDO
// print whatever error messages you feel appropriate
print "Error!: " . $e->getMessage() . "<br/>";
die(); // stop executing the script on error (up to you)
}
}
// CHAR_LENGTH() is a MySQL function that returns the number of characters in the string passed to it
try {
$list = "
SELECT skills
FROM skillsset
WHERE CHAR_LENGTH(skills) > 0 AND category='Engineering'
ORDER BY skills ASC";
$listAHI = $dbs ->prepare($list);
$listAHI -> execute();
// this is a function. it is defined below
printSkillsTd($listAHI, $empSkills);
$listAHI->closeCursor();
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
try {
$list = "
SELECT skills
FROM skillsset
WHERE CHAR_LENGTH(skills) > 0 AND category='Information'
ORDER BY skills ASC";
$listAHI = $dbs ->prepare($list);
$listAHI -> execute();
printSkillsTd($listAHI, $empSkills);
$listAHI->closeCursor();
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
/**
* This function prints out the all skills in the PDOStatement $listAHI as checkboxes. It "checks" the checkbox if the skill is in $empSkills
*/
function printSkillsTd($listAHI,$empSkills) {
echo '
<td valign="top">';
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC)) {
$skill = $row['skills'];
// note how i left out the 'id' attribute. The id attribute of an element must be unique on the entire page. You could make the `id` something like `skill_$skill` but i don't see why you would need an `id` at all from the posted code
echo "
<label><input type='checkbox' name='skills[]' value='$skill'";
if(in_array($skill,$empSkills))
echo " checked";
echo ">$skill</label><br>";
}
echo '
</td>';
}
?>
</tr>
</table>