如何在PHP中为表单ACTION中的循环中的ACTION赋值

如何在PHP中为表单ACTION中的循环中的ACTION赋值,php,forms,variables,filenames,Php,Forms,Variables,Filenames,在my MySQL数据库中,用户可以通过结果表更新数据库中的值,方法是单击用户要更新其值的字段旁边的更新按钮(见下文) 该表由“foreach”循环生成。每次在表中写入新行时,“更新”按钮都是表单操作语句的一部分,操作后的文件名有一个变量(即$new\u UPDATE\u File\u Name)。在循环的每次运行中,该变量都用唯一的文件名填充。在我的验证echo语句中,$New_Update_File_Name在循环的每次运行中都与我希望的完全相同,如我的echo语句的输出所示: cars[M

在my MySQL数据库中,用户可以通过结果表更新数据库中的值,方法是单击用户要更新其值的字段旁边的更新按钮(见下文)

该表由“foreach”循环生成。每次在表中写入新行时,“更新”按钮都是表单操作语句的一部分,操作后的文件名有一个变量(即$new\u UPDATE\u File\u Name)。在循环的每次运行中,该变量都用唯一的文件名填充。在我的验证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-SESSION.php,而不是我想要的值,即每个上载按钮都指向该行正确的新文件名。我不知道为什么没有发生这种情况。非常感谢您的帮助。我的代码出现在下面

<?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>";
?>

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

相反,您应该让它们都发送到同一个,并发送一个额外的变量(如颜色)来确定您要执行的操作

Form action=“…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>

由于您已使用新操作在循环中打开表单,但尚未在循环中关闭表单,因此只会处理第一个表单操作。请为每个新操作创建一个表单。请尝试以下操作

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++;
    }
foreach($cars as$field=>$value)
{
$Update_File_Name='Update_-SESSION.php';
$New\u Update\u File\u Name=substr\u replace($Update\u File\u Name,$cars[$field],-12,0);
echo“cars[$field]=”$cars[$field]。“
”; echo“New_Update_File_Name=”.$New_Update_File_Name.“
”; 回声“ 美元柜台 $field 美元价值 "; $counter++; }
我尝试过你的解决方案,效果非常好。很好地发现我漏掉了关闭表单标记。@user2187593请接受我的回答:)在向上投票/向下投票选项的右下方,您将看到复选标记单击该复选标记。感谢您帮助我通过此建议提高编程效率。我随时都会按照你的建议去执行。@user2187593,祝你好运!确保您单击您认为最有帮助的答案旁边的复选标记。
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++;
    }