【问题标题】:Submitting a PHP form with multiple submit buttons提交带有多个提交按钮的 PHP 表单
【发布时间】:2012-09-20 15:55:09
【问题描述】:

再次编辑:新修订版

所以我已经纠正了表格中缺少标签的问题,我在表单中添加了 id,我为每个表单添加了一个隐藏字段,其值也与表单 id 相同(如建议的那样)

我试图修改我的原始 if isset 以包含表单 ID,但这就是我遇到的问题。

如前所述,这是页面创建的 HTML:

        <br><table border=1><tr><th>customer</th><th>product</th><th>employee</th><th>return_date</th><th>complete</th></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>01-10-12</td><td>        <FORM id="1" method ="post" action ="g.php">
        <input type='hidden' name='x' value='1'>
        <Input type = 'Radio' Name ='ir' value= '47'> 47        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>01-10-12</td><td>      <FORM id="2" method ="post" action ="g.php">
        <input type='hidden' name='x' value='2'>
        <Input type = 'Radio' Name ='ir' value= '48'> 48        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>02-10-12</td><td>      <FORM id="3" method ="post" action ="g.php">
        <input type='hidden' name='x' value='3'>
        <Input type = 'Radio' Name ='ir' value= '49'> 49        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>29-09-12</td><td>      <FORM id="4" method ="post" action ="g.php">
        <input type='hidden' name='x' value='4'>
        <Input type = 'Radio' Name ='ir' value= '50'> 50        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>01-10-12</td><td>      <FORM id="5" method ="post" action ="g.php">
        <input type='hidden' name='x' value='5'>
        <Input type = 'Radio' Name ='ir' value= '51'> 51        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>01-10-12</td><td>      <FORM id="6" method ="post" action ="g.php">
        <input type='hidden' name='x' value='6'>
        <Input type = 'Radio' Name ='ir' value= '52'> 52        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>02-10-12</td><td>      <FORM id="7" method ="post" action ="g.php">
        <input type='hidden' name='x' value='7'>
        <Input type = 'Radio' Name ='ir' value= '60'> 60        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br><tr><td>marne1</td><td>basketball</td><td>user</td><td>02-10-12</td><td>      <FORM id="8" method ="post" action ="g.php">
        <input type='hidden' name='x' value='8'>
        <Input type = 'Radio' Name ='ir' value= '61'> 61        <input type="submit" name="return"/>
        </FORM>
        </td></tr><br></table> 

    <fieldset>
<legend>???</legend>
<form action="z.php" method="post">
Customer Name: <input type="text" name="ir" /> <br><br>
<input type="submit" name="return"/>
</form>

这是创建此 HTML 的 PHP 页面(使用我尝试过的表单 id 测试):

    <?php
$db_host = "localhost"; 
$db_username = "root";  
$db_pass = "usbw";  
$db_name = "test"; 
mysql_connect("$db_host","$db_username","$db_pass") or die ("could not connect to mysql");
mysql_select_db("$db_name") or die ("no database"); 
$result = mysql_query("SELECT * FROM rental WHERE customer = '$_POST[customer]' AND complete = '0' ") or die (mysql_error());
?> 

    <?php
    echo '<br>';
    echo '<table border=1>';
    echo '<tr><th>customer</th><th>product</th><th>employee</th><th>return_date</th><th>complete</th></tr>';
    echo "<br>";
    $x=1;
    while($row=mysql_fetch_array($result))
    {   
        echo '<tr>';
        echo '<td>';
        echo $row ['customer'];
        echo '</td><td>' ;
        echo $row ['product'];
        echo '</td><td>';
        echo $row ['employee'];
        echo '</td><td>';
        echo $row ['return_date'];
        echo '</td><td>';
        $cur_return = $row ['rental_id'];
        ?>
        <FORM id="<?php echo $x; ?>" method ="post" action ="g.php">
        <input type='hidden' name='x' value='<?php echo $x; ?>'>
        <Input type = 'Radio' Name ='ir' value= '<?php echo $cur_return ?>'> <?php echo $cur_return ?>
        <input type="submit" name="return"/>
        </FORM>
        <?php
    echo '</td></tr>'; 
    echo '<br>';
    $x++;
    }
    echo '</table>';
    ?> 

    <fieldset>
<legend>???</legend>
<form action="z.php" method="post">
Customer Name: <input type="text" name="ir" /> <br><br>
<input type="submit" name="return"/>
</form>

    <?php
    if (isset($_POST['return']))
    {
    if ($_POST['x']==1)
        {
        mysql_query("UPDATE rental SET complete = '1' WHERE rental_id = '$_POST[ir]'") or die (mysql_error());
        }   
    }
    ?>  

我真的很感谢你们提出的所有帮助,并为我花了这么多时间来解决这个问题表示歉意:)

丰富

【问题讨论】:

  • 你似乎没有在问问题。
  • 这是你的作业吗? ;-)
  • 对不起,我的问题是它不起作用......这更像是一个声明,所以我想知道为什么它不起作用:)

标签: php forms submit


【解决方案1】:

等等等等。您在这里有多行数据,并且您想提交一个特定的数据行,但它们都在同一个表单中?我有点困惑。看起来您真正在这里寻找的是为每一行生成不同的表单元素。但是你不能让多个提交按钮提交同一个表单的不同部分,这不是表单的工作方式。提交按钮将提交属于表单的所有数据。

在这种情况下,只需将开始表单标记移动到您的 while 循环内部的最开始,然后将您的提交按钮和关闭表单标记移动到您的 while 循环的底部。它将生成每个表格并仍然保持表格的结构。但是你不能让一个表单只提交自己的某些部分,这违反了基本的 HTML 原则。

强烈建议在每个表格上打上一个 ID,以供将来参考和更新。

祝你好运。

【讨论】:

  • 我已经根据您的建议修改了我的原始代码,但仍然有问题
  • 是的,如果你不告诉我们更多关于它应该做什么和它目前正在做什么,我们很难进一步帮助你。表单看起来应该正确提交。我建议只发布 HTML 源代码,以便我们可以查看并确保它正确生成(您处理数据的方式是 PHP,但听起来您在创建 HTML 代码本身时遇到了问题)。我们可以告诉您它应该是什么样子,如果您仍然无法理解,我们可以从那里讨论 PHP 部分。
  • 另外,在发布代码时(尤其是生成 HTML 的 PHP)-- 多清理一下,以便我们更容易阅读。很难看到发生了什么。我又修改了一次,看起来每一行的起始表格行(tr 标签)都不存在 - 在 while 循环之前你有一个起始 tr 标签,这可能有助于弄乱你的格式(如果这是一个问题)。您还没有识别表单!
  • 嗨,dudewad,我已经接受了你所说的所有内容,表单是 ID 的,TR 标记已放置在其中,我正在尝试使用表单 ID 触发单个表单。我已经发布了上面的 PHP 和 HTML。再次感谢里奇
  • 好吧。 HTML 在我的浏览器中生成良好。你现在想做什么?你删除了原来的问题,所以我不知道现在的目标/问题是什么:/ edit 记录 - 你在每个表格行之间放置了 br 标签,这不仅是不必要的,我相信它最多会叠加到“无效标记”。 Tr 和其他表格标签本质上会创建自己的结构,这就是重点。您无需向它们添加结构标记。
【解决方案2】:

你可以用 javascript 做到这一点,但不能用 php。但它无缘无故地过于复杂。制作不同的表格并将它们分配给不同的 ID。您可以使用相同的方法="post" 和相同的操作="g.php"。要在 g.php 上有所不同,只需将其放在每个表单中即可:

<input type='hidden' name='x' value='1'>

然后

<input type='hidden' name='x' value='2'>

那么很简单 if $_POST['x']==1

另外,请确保保护 g.php,对于处理表单的文件来说,这是一个非常不安全的名称。

【讨论】:

  • 感谢您抽出宝贵时间回复 Jeff,但我认为我的知识有限,很难弄清楚您的解决方案将如何真正帮助我(而且我几乎不知道 Javascript)
  • 你需要使用正常值。将 $x=0 放在 while 循环之前。然后在循环的底部 $x++;然后你用 $x 的值进行隐藏输入。 。当然,所有这些都应声。与表单 ID 相同。
  • 那么你只需要扩展你的 if($_POST['return']) 语句来包含隐藏的值来区分表单。
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多