一个页面上有多个表单,并决定使用 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 脚本都会针对给定的输入执行它需要执行的操作,并在最后重定向回您的表单页面。优点:每个脚本只需要担心自己的一组输入,并且您避免了切换“动作”标志的大if
s 和/或switch
es。
【讨论】:
也许添加一个 get 参数更有帮助,因为它会阻止每个表单提交创建一个文件。 我认为有一个单独的 PHP 脚本来处理每个表单更好;它分离了关注点(即你没有一个大的“handleAction.php”),并鼓励一种更像 MVC 的结构。 我也是根据经验说话的。我使用过在操作 GET 参数上使用巨型多选项switch
es 的代码,它不调试或扩展很有趣。
好的,这是另一个讨论:***.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 提交哪个表单?的主要内容,如果未能解决你的问题,请参考以下文章