我正在尝试编写可以更新表中记录的代码。我有一个带有两个复选框的FORM,s 使用以下格式命名为“已修复”:
<input name="repaired[]" type="checkbox" id="repaired" value="1" />
当FORM加载时,它可以逐行包含任意数量的记录,每行都有一个“HIDDEN”FORM字段,其中包含该记录的unquieid。
如果用户通过选择相应的“CHECKBOX”来选择任何记录,然后通过每个选定的记录提交我需要LOOP的表单 并更新表格。
我的表格代码:
<form id="form1" name="form1" method="post" action="<?php echo $editFormAction;?>">
<?php
do {
echo $row_Faults['SeqID'];
echo $row_Faults['SeqHeader'];
echo $row_Faults['Room'];
<input name="repaired[]" type="checkbox" id="repaired" value="1" />
<input name="UniqueID" type="hidden" value="<?php echo $row_Faults['UniqueID'];?>" />
} while ($row_Faults = mysql_fetch_assoc($Faults));
?>
<input type="image" src="../images/actioned_button.png" name="button" id="button" value="1" />
<input name="MM_update" type="hidden" value="form1" />
<input name="submit" type="hidden" value="submit" />
</form>
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
if(!empty($_POST['UniqueID']) && $_POST['repaired'] == "1"){
foreach($_POST['repaired'] as $Selected){
//THIS IS WHERE I AM STUCK
UPDATE QUERY.......
}
}
}
这就是我陷入困境的地方,我如何遍历$ _POST数据并更新“UniqueID”与$ _POST ['UniqueID']匹配的记录以及$ _POST ['repaired'] == 1。
任何帮助或指向我需要做的事情都会很棒,
非常感谢你的时间。
答案 0 :(得分:1)
您的代码存在一些问题,例如:
运行代码后,您的do-while
循环时抛出未定义变量$ row_Faults 错误,这是因为它稍后在while(...);
语句中定义。在这种情况下,您需要使用简单的while()
循环,如下所示:
while ($row_Faults = mysql_fetch_assoc($Faults)){
...
}
此外,你不能在PHP中使用修复的和 UniqueID <input>
HTML元素,比如 ,它会抛出其他错误。
对于唯一ID,每行每个都不需要单独的<input>
元素,您也可以将其合并到复选框输入元素中,如下所示:
<input name="repaired[<?php echo $row_Faults['UniqueID']; ?>]" type="checkbox" id="repaired" value="1" />
因此,基于以上两点,请使用以下do-while
循环替换while
循环。
while ($row_Faults = mysql_fetch_assoc($Faults)){
echo $row_Faults['SeqID'];
echo $row_Faults['SeqHeader'];
echo $row_Faults['Room'];
?>
<input name="repaired[<?php echo $row_Faults['UniqueID']; ?>]" type="checkbox" id="repaired" value="1" />
<?php
}
由于您使用image
输入元素进行表单提交,因此使用单独的hidden
提交元素毫无意义。所以你可以完全删除以下行,
<input name="submit" type="hidden" value="submit" />
因此,一旦您提交表单,就可以处理表单并更新相应的已检查行,
if (isset($_POST["MM_update"]) && $_POST["MM_update"] == "form1"){
foreach($_POST['repaired'] as $uniqueID => $repairedValue){
// your UPDATE query
}
}
旁注:不使用mysql_*
函数,从PHP 5.5开始不推荐使用它们,在PHP 7.0中完全删除它们。请改用mysqli
或pdo
。 And this is why you shouldn't use mysql_*
functions