【问题标题】:HTML action="" attribute >> multiple actionsHTML action="" 属性 >> 多个动作
【发布时间】:2013-06-13 12:35:19
【问题描述】:

我正在尝试设置表单提交以触发我的 php 邮件脚本并将用户重定向到另一个页面/确认他们的消息已通过。

我已经设置了当前的动作属性:

<form id="contactform" action="send.php" method="post">

并且想知道是否有一种方法可以在邮件脚本的顶部添加重定向到表单操作。

提前致谢!

【问题讨论】:

  • 如果您的问题已得到解答,您能接受答案吗?谢谢!

标签: php html forms action


【解决方案1】:

在您的 send.php 文件中,您可以这样做:

<?php
// Send the email
$sent = mail("info@example.com", "Subject", "Hello!"); 

if ($sent) {
    // This sends a header redirect to the client's browser
    header("Location: http://mysite.com/success.php");
    // This causes the redirect to happen immediately,
    // instead of continuing to process the page
    exit; 
} else {
    header("Location: http://mysite.com/failure.php");
    exit;
}
?>

【讨论】:

  • Location 标头采用 absolute URI,而不是相对的 URI(即使大多数浏览器会默默地从该错误中恢复)。
  • 是否可以在 else 语句中放入:else { echo("很抱歉,联系请求未发送。请稍后再试。") exit; }
  • @Brynx 是的,如果电子邮件没有被发送(或者如果表单内容没有通过验证 - 例如无效的电子邮件地址/空字段),您当然可以打印出错误消息,或再次显示原始表单页面,并在其上附加错误消息
【解决方案2】:

没有。

任何重定向都必须由操作指向的资源发起。 (使用header() 返回一个Location 响应头)。

(你可以做一些疯狂的事情,比如添加对 JavaScript 的依赖,使用 Ajax 提交数据,然后在请求成功时设置 location,但这会比 send.php 问题更复杂,更不可靠重定向响应)。

【讨论】:

    【解决方案3】:

    你不能把它放到表单中,但你可以很容易地用 php 完成

    header('Location: yourtarget.php');
    

    如果您想要更动态,可以在表单操作中添加 GET 参数:

    <form id="contactform" action="send.php?redirectto=yourtarget" method="post">
    

    然后在php中:

    header('Location: '.$_GET['redirectto']);
    

    【讨论】:

    • 不要将人们重定向到通过查询字符串接收的任意 URL,这是一个被滥用为垃圾邮件重定向器的邀请。
    • 允许将重定向指定为 $_GET 变量的坏主意,因为它是一个容易破解的漏洞
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多