一个页面上有多个表单,并决定使用 PHP 提交哪个表单?

Posted

技术标签:

【中文标题】一个页面上有多个表单,并决定使用 PHP 提交哪个表单?【英文标题】:Multiple forms on one page, and to decide which form has been submitted using PHP? 【发布时间】:2011-10-26 10:19:51 【问题描述】:

我的页面上有多个表单(2 个表单)。

页面底部有一个调用表单和一个联系人表单。

因此,客户可以选择只输入电话号码并在一个表格中按提交,或者他们可以在另一个表格中填写姓名、电子邮件和消息,然后按提交。

我正在开发一个 php mail() 函数来区分正在提交的表单,但是我上次忘记了很多编程,所以我再次求助于你在这里做什么。

我如何在 PHP 代码中区分提交的表单?

这就是我现在在 php 中的内容:

$type = $_POST['type'];

    if($type == 'callup')
        $tel_nr = $_POST['tel'];

        $to     =       'info@domain.se';
        $subject    =   'Call customer';
        $message    =   'Client telephone nr is '.$tel_nr.'.';
        $message    .=  '\n';
        $message    .=  'Client signed in at this date and time: '.date('Y-m-d').' Time: '.date('H:m:s').'';

        mail($to, $subject, $message);

    

基本上我想做的是在客户提交表单时给自己发送一封电子邮件。但是根据客户提交的表单,我想发送相应的电子邮件。

【问题讨论】:

【参考方案1】:

使用多个名称提交:

在您的第一个表单中:

<input type="submit" name="address" value="Submit Address" />

第二种形式:

<input type="submit" name="zipcode" value="Submit Zipcode" />

然后,在服务器端检查可用的名称:

if (isset($_POST['address'])) 
    // ...
 else if (isset($_POST['zipcode'])) 
    // ...

【讨论】:

【参考方案2】:

将每个表单发送到不同的操作:

<form action="foo.php" method="post">
    <!-- phone number form -->
</form>

<form action="bar.php" method="post">
    <!-- name/email/message form -->
</form>

然后,每个 PHP 脚本都会针对给定的输入执行它需要执行的操作,并在最后重定向回您的表单页面。优点:每个脚本只需要担心自己的一组输入,并且您避免了切换“动作”标志的大ifs 和/或switches。

【讨论】:

也许添加一个 get 参数更有帮助,因为它会阻止每个表单提交创建一个文件。 我认为有一个单独的 PHP 脚本来处理每个表单更好;它分离了关注点(即你没有一个大的“handleAction.php”),并鼓励一种更像 MVC 的结构。 我也是根据经验说话的。我使用过在操作 GET 参数上使用巨型多选项 switches 的代码,它调试或扩展很有趣。 好的,这是另一个讨论:***.com/questions/6814626/…——但是使用两个前端控制器并不比使用一个前端控制器或多或少 MVC,所以我可以对你的论点表示同情,但如果我遵循它的话,它不是一个赞成或反对的论点。无论如何,对于整体建议 +1,任何控制器都需要理解所请求的命令,无论它是如何通过的。 确实这是一个不同的论点,每种情况都需要最适合其需求的解决方案。如果操作开关在 OP 的情况下对这个问题运行良好,那很好。【参考方案3】:

如果您只有一个表单,您可以使用更好的名称来标识每个表单。例如,您可以将前缀 form1_ 添加到每个输入对象,将 form2 添加到每个第二个表单输入对象。然后你可以为每个输入对象添加一个默认值来识别对象。

【讨论】:

【参考方案4】:

或者您可以添加隐藏字段并检查该字段是否已设置并处理一种表单。 最简单的方法是使用 array_key_exist 检查该键是否作为数组的一部分存在

if(array_key_exist("form1"))
else if(array_key_exist("form2"))

【讨论】:

以上是关于一个页面上有多个表单,并决定使用 PHP 提交哪个表单?的主要内容,如果未能解决你的问题,请参考以下文章

求助:PHP多表单提交问题,一个页面提交N多个表单

C# 模拟 post提交php页面的表单

php一个表单提交多个页面,怎样获取按钮提交过来的值

我希望我的 php 表单提交数据并在同一页面但不同的选项卡上重定向

如何创建表,在用户提交表单时填写行

提交表单并刷新产品 div 而不刷新页面