2017-07-19 70 views
0

我有一個刪除按鈕的名稱=「行動」是正確去一個開關/案例value="Delete",並獲取適當的表值$_POST['fundid']頂級表value[record #1],但忽略它的最後一個表格value[record #2] 。表的代碼:PHP後總是忽略了最後一個表值

while ($row = mssql_fetch_array($fund_info_result)) { 
    echo "<tr>"; 
    echo "<form action='' method='post'>"; 
    echo "<td>" . $row['coafund'] . "</td>"; 

    echo "<td>" . $row['fundid'] . "</td>"; 
    echo "<input type='hidden' id='fundid' name='fundid' value=" . $row['fundid'] . " />"; 

    echo "<td>" . $row['shortdesc'] . "</td>"; 
    echo "<td>" . $row['longdesc'] . "</td>"; 

    echo "<td><input type='submit' id='delete' name='action' value='Delete' /></td></td>"; 
    echo "</form>"; 
    echo "</tr>"; 
} 

PHP代碼抓住第一記錄的值,但忽略第二[最後]記錄:

if (isset($_POST)) { 
case 'Delete': 
    $fundid_record = $_POST['fundid']; 
    ?> 
     <script type="text/javascript"> 
      window.alert("<?php echo $fundid_record;?>"); 
     </script> 
    <?php 
break; 
} 

生成的HTML的樣品看起來像這樣:

<tbody> 
    <form id='table_data1' action='' method='post'> 
    <tr> 
    <td>139</td> 
    <td>14966</td> 
    <input type='hidden' id='14966' name='fundid' value=14966 /> 
    <td>Admin</td> 
    <td>Administration</td> 
    <td><input type='submit' id='delete' name='action' value='Delete' /></td> 
    </td> 
    </tr> 
    </form> 
    <form id='table_data1' action='' method='post'> 
    <tr> 
     <td>140</td> 
     <td>14967</td> 
     <input type='hidden' id='14967' name='fundid' value=14967 /> 
     <td>Services</td> 
     <td>Services</td> 
     <td><input type='submit' id='delete' name='action' value='Delete' /></td> 
     </td> 
    </tr> 
    </form> 
</tbody> 

這裏的另一個用戶票據幫助我至少正確地獲取了值,使用每個記錄的表單標籤和隱藏值,但是爲什麼忽略表格的最後一個記錄,這非常困惑。請幫忙。

+0

'ID ='fundid''是不是一個好主意。每個HTML元素的ID必須是唯一的。既然你是通過一個循環創建它,如果它循環兩次或更多的ID將在最後一頁使用兩次或更多,根據HTML規範使第二個和後續元素無效。 – ADyson

+0

無論如何,不​​確定你的意思是「忽略最後的記錄」?你的意思是當你在最後一個表格行中單擊「刪除」時,它不會提交正確的值?您是否檢查過瀏覽器的網絡標籤,以查看回發請求中實際提交的內容?它是否將預期值發送到服務器? – ADyson

+0

將其更改爲:id ='「。$ row ['fundid']。」';仍然是同樣的事情:按第二行的刪除,而不是window.alert(值)submit isset只是重新加載頁面。 Chrome瀏覽器網絡標籤顯示我沒有識別的var名稱。瀏覽器日誌[通過chrome:// net-export /] 5867行,並沒有提到'fundid'。在第一行中,當它經過ISSET代碼時,找到「case:」刪除':「,彈出該值,然後重新加載記住之前選擇值的頁面。但在第二個值上刪除,頁面從頭開始重新加載 - 因此它忽略提交該元素。 #scratchinghead – dcparham

回答

1

A var_dump()你的$_POST可以提供有用的信息。

從我看到的情況來看,您正在使用插入循環中的元素的id屬性中的靜態值。這是一個壞主意,接下來會發生什麼,因爲一個id應該在一個頁面中只存在一次。每次循環迭代時,您至少應該增加一個值,並將該值附加到您的ID,以便它是唯一的,或者根本不使用ID。

我沒有足夠的信息去確定它,但實際上我不久前遇到了同樣的問題,原因恰恰是一個id在不同的form元素中被多次使用。

希望它有幫助,如果沒有,請隨時添加一些日誌。

+0

$ fundid_record = $ _POST ['fundid']; $ fundid_record = var_dump($ _ POST ['fundid']); - 彈出,但顯示空白。 $ _POST ['fundid']顯示記錄#1的值,但var_dump不提供輸出。 – dcparham

2

您正在創建無效的HTML標記。唯一可以成爲<tbody>的孩子的是<tr>,唯一可以成爲<tr>的孩子的是<th><td>。將表單和輸入代碼放在表格內但在表格單元格外是無效的。許多瀏覽器會將這種標記轉移到桌子外面,這會導致表單被錯誤地創建,並且幾乎肯定會導致您看到的奇怪行爲。

此外,您還關閉<td>秒兩次(</td></td>)這是不幫助任何一個。

這應該修復它:

echo "<tr>"; 
echo "<td>" . $row['coafund'] . "</td>"; 
echo "<td>" . $row['fundid'] . "</td>"; 
echo "<td>" . $row['shortdesc'] . "</td>"; 
echo "<td>" . $row['longdesc'] . "</td>"; 
echo "<td><form action='' method='post'><input type='hidden' name='fundid' value=" . $row['fundid'] . " /><input type='submit' id='delete' name='action' value='Delete' /></form></td>"; 
echo "</tr>"; 
+0

實際上,沒有。確切的代碼會產生相同的效果。所以我硬編碼了一些額外的行,其行爲實際上是 - 它只獲取row1值,而不是後續行。 – dcparham

+0

很多努力!更多的輸入:我有form1與選擇框,提交 - 產生表,然後每行與各自的刪除按鈕。每個刪除按鈕都在其表單中。 <輸入...刪除/> ...然後,包裝窗體關閉。只有當外部表格包裝動態表時,甚至只是row1被提交。仍然,行2+甚至不提交。如果這有幫助。無論如何thx再次8} – dcparham

+1

http://phpfiddle.org/main/code/k3f5-7rju顯示它的工作方式,我建議。很難知道你的代碼有什麼問題。也許你已經省略了一些細節? – ADyson

相關問題