如何在 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 语句的一部分,其中变量(即 $New_Update_File_Name)用于 ACTION 之后的文件名。该变量在每次循环运行中都填充一个唯一的文件名。在我的验证 echo 语句中,$New_Update_File_Name 在每次循环运行中都完全按照我想要的样子出现,如我的 echo 语句的输出所示:

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会话.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>";
?>

对于初学者来说,为每个操作调用不同的文件是一个非常糟糕的主意。 当您想要更新每个代码中相同的代码时,您会怎么做?

相反,你应该让它们都发送到同一个,并发送一个额外的变量(如颜色)来确定你想要做什么。

表单操作 ="...更新.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++;
    }