更新$ _POST数组包含UniqueID的记录

时间:2017-01-14 19:43:54

标签: php

我正在尝试编写可以更新表中记录的代码。我有一个带有两个复选框的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。

任何帮助或指向我需要做的事情都会很棒,

非常感谢你的时间。

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中完全删除它们。请改用mysqlipdoAnd this is why you shouldn't use mysql_* functions