我有一个选择了多行的表单。所有列工作正常,但复选框值未正确更新。
$data = $con->query($query);
$data->setFetchMode(PDO::FETCH_ASSOC);
foreach($data as $row){
print " <tr> ";
foreach ($row as $name=>$value){
print " </p><br /><input type=text name='step[]' id=step value =$value size=80>
<label for=correct>Correct:</label>
<input type=hidden name='correct[]' id=correct value = 'Not Correct' checked>
<input type=checkbox name='correct[]' id=correct value = 'Correct'>
<label for=remark>Remark:</label>
<input type=text name='remark[]' id=remark size=75>
<input type=hidden name=date[] id=date value= $dateName>
<input type=hidden name=time[] id=time value= $timeName>
<input type=hidden name=type[] id=type value =$typeName>
<input type=hidden name='resource[]' id=resource value ='$resourceName'>
<input type=hidden name=location[] id=location value = $locationName >
<input type=hidden name='submittedby[]' id=submittedby value= '$submittedby'> ";
} // end field loop
print " </tr> ";
} // end record loop
print "</table> ";
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
} // end try
这是插入部分:
$size = count($_POST['step']);
$i = 0;
while ($i < $size) {
// define each variable
$listno = $_POST['listno'][$i];
$date = $_POST['date'][$i];
$time = $_POST['time'][$i];
$type = $_POST['type'][$i];
$resource = $_POST['resource'][$i];
$location = $_POST['location'][$i];
$step = $_POST['step'][$i];
$correct =$_POST['correct'][$i];
$remark = $_POST['remark'][$i];
$submittedby = $_POST['submittedby'][$i];
// do the update and print out some info just to provide some visual feedback
$sql = "INSERT INTO feedback (date, time, listno, type, resource, location, step, correct, remark, submittedby) VALUES ('$date', '$time', $listno, '$type', '$resource', '$location', $step, '$correct', '$remark', '$submittedby')";
if(mysqli_multi_query($link, $sql)){
echo "Records added successfully.";
}
else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
print "<br />$date<br />$time<br />$listno<br />$type<br />$resource<br />$location<br />$step<br />$correct<br />$remark<br />$submittedby<br />";
++$i;
插入所有“Correct”值,然后插入“Not Correct”值,但所有其他列都按记录顺序排列。
答案 0 :(得分:0)
如果选中复选框,则复选框只是成功的控件。
如果一行没有选中复选框,那么它就不会得到任何结果,并且数组中跟随它的所有内容都会缩小位置以填补空白。
所以给出:
<input type=hidden name='correct[]' id=correct value = 'Not Correct' checked>
<input type=checkbox name='correct[]' id=correct value = 'Correct'>
...如果未选中该复选框,则您将$_POST['correct'][]
中的一个值(来自隐藏的输入)插入一个值,如果它不是,那么您将插入两个(一个来自隐藏的输入)每个输入)。
不要依赖自动编入索引的字段名称。给他们明确的名字:
e.g。
name='correct[<?php echo htmlspecialchars($name); ?>]'
为您拥有的每个字段执行此操作,而不仅仅是复选框。
然后,您可以从$_POST['step'][]
获取密钥,并循环显示该密钥列表以从$_POST[$everything_else][$key]
中提取匹配值。