2017-01-14 59 views
0

我正在嘗試編寫可以更新表中的記錄的代碼。我有一個表格有兩個複選框,S 名爲「修復」使用的格式:

<input name="repaired[]" type="checkbox" id="repaired" value="1" /> 

加載窗體時它可能包含行中的任意數量的記錄行和每一列有一個「隱藏」的表單字段包含一個不平衡的記錄。

如果用戶通過選擇相應的「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 [「修補」] == 1

任何幫助或指向什麼,我需要做的將是巨大的,

提前爲您的時間非常感謝。

+0

你是什麼意思「更新記錄」?你在和數據庫交談嗎? –

回答

1

有你的代碼一些問題,如:

  • do-while循環,其投射未定義的變量$ row_Faults錯誤,一旦你運行代碼,這是因爲它在while(...);聲明後面定義。你需要在這種情況下,用一個簡單的循環while(),像這樣:

    while ($row_Faults = mysql_fetch_assoc($Faults)){ 
        ... 
    } 
    

    此外,您不能使用修復的UniqueID<input> HTML元素內PHP一樣,它會扔其他錯誤。

  • 你並不需要爲每一個每行的唯一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

+0

嗨,很多,非常感謝您的回覆。我已經整合了你給我的代碼,並且它的工作起到了一定的作用。當我提交FORM並回顯查詢語句時,這是我在WHERE子句中看到的:WHERE UniqueID ='NXLHR01011483974920' WHERE UniqueID ='NXLHR01011483974920'。正如你所看到的,這兩個UniqueID都是一樣的。其中一個應該是「NXLHR01011483916595」進行測試。任何想法爲什麼? – DCJones

+0

@DCJones請在[pastebin.com](http://pastebin.com/index.php)上發佈您的表單提交代碼,並將它鏈接到此處。 –

+0

http://pastebin.com/6j1dNxhh – DCJones