【问题标题】:how to assign a value to ACTION in a loop in FORM ACTION in PHP如何在 PHP 的 FORM ACTION 的循环中为 ACTION 赋值
【发布时间】:2013-09-07 15:37:19
【问题描述】:

在我的 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

但是,如果我单击任何 UPLOAD BUTTON,它们都具有与第一个 UPLOAD BUTTON 相同的值:Update_blue-SESSION.php,而不是我想要的,即每个 UPLOAD BUTTON 指向该行的正确 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 forms variables filenames


    【解决方案1】:

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

    您应该将它们全部发送到同一个,并发送一个额外的变量(例如 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
    }
    

    【讨论】:

    • 感谢您通过此建议帮助我提高编程效率。我将按照您的建议尝试实施。
    • @user2187593 随时,祝你好运!请务必点击您认为最有帮助的答案旁边的复选标记。
    【解决方案2】:

    因为您已经使用新操作在循环中打开了一个表单,但没有关闭循环内的表单,因此只会处理第一个表单操作为每个新操作创建一个表单尝试这个

    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++;
        }
    

    【讨论】:

    • 我已经尝试过您的解决方案,效果非常好。很好地发现我遗漏了关闭表单标签 .
    • @user2187593 请接受我的回答 :) 在赞成/反对票选项下方,您会看到勾选标记点击该选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2013-06-13
    • 1970-01-01
    • 2022-01-16
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多