簡體   English   中英

如何在PHP的FORM ACTION中的循環中為ACTION賦值

[英]how to assign a value to ACTION in a loop in FORM ACTION in PHP

在我的MySQL數據庫中,用戶可以通過結果表來更新數據庫中的值,方法是單擊用戶要更新其值的字段旁邊的UPDATE按鈕(請參見下文)。

            car         colour      update field
1           Mercedes    blue        UPDATE BUTTON
2           VW          grey        UPDATE BUTTON
3           Opel        red         UPDATE BUTTON
4           Alfa Romeo  white       UPDATE BUTTON
5           Renault     pink        UPDATE BUTTON

該表由“ foreach”循環產生。 每次在表中寫入新行時,UPDATE BUTTON都是FORM ACTION語句的一部分,其中ACTION之后的文件名帶有變量(即$ New_Update_File_Name)。 在循環的每次運行中,該變量都填充有唯一的文件名。 在我的驗證回顯語句中,$ New_Update_File_Name完全按照我希望的方式在每次循環運行中顯示,如我的回顯語句的輸出所示:

cars[Mercedes] = blue
New_Update_File_Name = Update_blue-SESSION.php
cars[VW] = grey
New_Update_File_Name = Update_grey-SESSION.php
cars[Opel] = red
New_Update_File_Name = Update_red-SESSION.php
cars[Alfa Romeo] = white
New_Update_File_Name = Update_white-SESSION.php
cars[Renault] = pink
New_Update_File_Name = Update_pink-SESSION.php

但是,如果我單擊任何一個上傳按鈕,它們都具有與第一個上傳按鈕相同的值:Update_blue-SESSION.php,而不是我想要的,即每個指向該行的正確New_Update_File_Name的上傳按鈕。 我不知道為什么這種情況沒有發生。 任何幫助,不勝感激。 我的代碼顯示在下面。

<?php

// BUILD THE CAR TABLE WITH UPDATE BUTTON
$cars = array("Mercedes"=>"blue","VW"=>"grey","Opel"=>"red","Alfa Romeo"=>"white","Renault"=>"pink");
$counter = 1;
echo "<table>
<tr>
<th></th>
<th>car</th>
<th>colour</th>
<th>update field</th>";
foreach ($cars as $field => $value)
{
    $Update_File_Name = 'Update_-SESSION.php';
    $New_Update_File_Name = substr_replace($Update_File_Name,$cars[$field],-12, 0);
    echo "cars[$field] = ".$cars[$field]."<br />";
    echo "New_Update_File_Name = ".$New_Update_File_Name."<br />";

    echo "<tr class='alt'>
    <td>$counter</td>
    <td>$field</td>
    <td>$value</td>
    <td><form action='$New_Update_File_Name' method='post'>
    <input type='submit' value='update'></td>
    </tr>";
    $counter++;
    }
echo "</table>";
?>

對於初學者來說,為每個操作調用一個不同的文件是一個非常糟糕的主意。 當您想要更新每個相同的代碼時,您會怎么做?

相反,您應該讓它們全部發送到同一對象,然后發送一個額外的變量(例如color)來確定您要執行的操作。

表單操作=“ ... update.php”。

順便說一句,您遇到問題的原因是因為您有很多無效的HTML。 您沒有關閉表單字段,因此將第一個調用設置為全部。

<td>
<form action='$New_Update_File_Name' method='post'>
    <input type="hidden" value="<?php echo $value; ?>" name="color" />
    <input type='submit' name="submit" value='update'>
</form>
</td>

注意:我添加了隱藏的輸入。 在您的update.php文件中,您可以執行

if($_POST['color'] == "blue") {
.... do stuff
}

因為您已使用新動作在循環中打開了一個表單,但尚未在循環內關閉該表單,因此僅第一個表單動作將被視為為每個新動作創建一個表單,請嘗試

foreach ($cars as $field => $value)
{
    $Update_File_Name = 'Update_-SESSION.php';
    $New_Update_File_Name = substr_replace($Update_File_Name,$cars[$field],-12, 0);
    echo "cars[$field] = ".$cars[$field]."<br />";
    echo "New_Update_File_Name = ".$New_Update_File_Name."<br />";

    echo "<tr class='alt'>
    <td>$counter</td>
    <td>$field</td>
    <td>$value</td>
    <td><form action='$New_Update_File_Name' method='post'>
    <input type='submit' value='update'></form></td>
    </tr>";
    $counter++;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM