【问题标题】:Contact form + redirect doesnt work联系表格+重定向不起作用
【发布时间】:2012-07-22 14:01:59
【问题描述】:

我制作了一个简单的“姓名和电子邮件”联系表格,我希望在提交信息后将其重定向到“page2.html”。

我无法让它工作。

这是我为提交表单制作的html部分。我仍然不确定“名称”部分代表什么,id 部分(带有破折号)指的是 CSS 样式。但无论如何,这就是我制作联系人“姓名和电子邮件”表单的方式。

<form method="post" action="submission.php" name="contactform" id="contact-form">
        <fieldset>
        <label for=name accesskey=U><span class="required">*</span> Name</label>
        <input name="name" type="text" id="name" size="30" value="" /> 
        <br />
        <label for=email accesskey=E><span class="required">*</span> Email</label>
        <input name="email" type="text" id="email" size="30" value="" />
        <br />
        <input type="submit" class="submit" id="submit-button" value="Submit" />
        </fieldset>        
</form>

并且 php 部分被回收,我尝试在最后一行输入带有重定向的标题,但它不起作用,它所做的最好的事情是在浏览器中打开一个空白页面,打印出我在表单中输入的信息。

我希望在提交信息后重定向表单,所以...提前感谢您的帮助:D

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jqueryui", "1.5.2");</script>
<? 
if($_POST['name']!="" ){


    $headers    = "From: Webmaster";
    $message    = 
  strtoupper($_POST['name'])."
".strtoupper($_POST['email'])."
";
    echo str_replace("\n","<br />", $message);
    $headers2   = "From: Sender Name <email@gmail.com>\nContent-Type:     text/plain; charset=UTF-8; format=flowed\nMIME-Version: 1.0\nContent-Transfer-Encoding:     8bit\nX-Mailer: PHP\n";
    $message2   = "Message
";

    mail("webmaster@gmail.com", "Subject", $message, $headers);
    mail("$_POST[email]", "Subject", $message2, $headers2);

    $myFile = "submissions.txt";
    $fh = fopen($myFile, 'a') or die("can't open file");
    $stringData =     "$_POST[name]*$_POST[email]*".$_SERVER['REMOTE_ADDR']."*".date("d-m-Y H:i")."
";
    fwrite($fh, $stringData);
    fclose($fh);

} else {
    echo "You didnt enter anything";
    ?>
    <script language="javascript">
    alert("You didnt enter anything");
    </script>
    <?
}
?>

【问题讨论】:

    标签: php forms redirect submit


    【解决方案1】:

    如果脚本中有任何输出,则无法发送 php 重定向标头。要么将您的 php 部分更改为页面顶部,但您可以在 php 中进行

    header("location:page2.html"):
    

    或在 php 中使用 javascript 重定向

    echo '<script>document.location="page2.html"; </script>';
    

    【讨论】:

    • 请注意,用户可能已经关闭了 javascript - 此外,依赖客户端功能进行重定向通常不如使用 php 使用服务器端功能。
    • 我试过回显,它可以工作,但问题是我在表单中输入信息并单击提交后 - 浏览器(chrome)首先加载一个空白页面,显示我输入的信息,并且然后在 1-2 秒后重定向到所需的页面...
    • 需要这一行 edit echo str_replace("\n","
      ", $message);将此注释到 $message=str_replace("\n","
      ", $message);
    【解决方案2】:
    $a = mail("webmaster@gmail.com", "Subject", $message, $headers);
    $b = mail("$_POST[email]", "Subject", $message2, $headers2);
    
    if($a && $b)
    {
      echo '<script>document.location="page2.html"; </script>'
    }
    

    【讨论】:

    • 我收到错误消息“警告:无法修改标头信息 - 标头已由 ... 在第 23 行的 submit.php 中发送”
    • 我在原始帖子中输入的代码似乎可以正常工作,所以由于时间问题,我将使用它。唯一的问题是 - 每次我提交表单时,它都会在浏览器中闪烁一个空白的 PHP 页面(带有我输入的信息),然后重定向。是否可以避免显示该 php 页面?
    【解决方案3】:

    表单中的name属性会给$_POST数组是name。例如,使用

    <input type="text" name="awesometext"/>
    

    在带有 method="post" 的表单中,该文本字段的值将通过您在表单操作中定义的 php 脚本中的 $_POST['awesometext'] 访问。

    如果您希望在发送电子邮件后使用 header() 将用户重定向到另一个页面,则必须在之前的页面上不生成任何输出。摆脱所有回声和 html 输出,因此删除您在开始时拥有的 html。如果你想使用 header(),你可能只有没有输出的 php 代码。

    然后你可以使用header('Location:somepage.php'); 指向somepage.php。

    您的代码将是:

    <?php 
    if($_POST['name']!="" ){
    
    
    $headers    = "From: Webmaster";
    $message    = 
    strtoupper($_POST['name'])."
    ".strtoupper($_POST['email'])."
    ";
    echo str_replace("\n","<br />", $message);
    $headers2   = "From: Sender Name <email@gmail.com>\nContent-Type:     text/plain; charset=UTF-8; format=flowed\nMIME-Version: 1.0\nContent-Transfer-Encoding:     8bit\nX-Mailer: PHP\n";
    $message2   = "Message
    ";
    
    mail("webmaster@gmail.com", "Subject", $message, $headers);
    mail("$_POST[email]", "Subject", $message2, $headers2);
    
    $myFile = "submissions.txt";
    $fh = fopen($myFile, 'a') or die("can't open file");
    $stringData =     "$_POST[name]*$_POST[email]*".$_SERVER['REMOTE_ADDR']."*".date("d-m-Y H:i")."
    ";
    fwrite($fh, $stringData);
    fclose($fh);
    
    //header here
    header('Location:somepage.php');
    
    } else {
    echo "You didnt enter anything";
    ?>
    

    需要在生成任何输出之前调用 header()。上面的代码应该可以工作。

    【讨论】:

    • 感谢您的回复!在名称属性中让我感到困惑的是表单具有属性 - name="contactform"。我看不到 submit.php 是如何使用它的,有必要吗?此外,删除回声和 html ......你能在我发布的示例代码中说明你的意思吗?如您所见,我对此有点新意:)
    • 将代码粘贴到我的答案中 - 见上文。每次您收到错误消息“警告:无法修改标头信息 - 标头已由...发送”时,这意味着您执行了 header() 尽管输出已经在同一页面上回显,这是不允许的(而且也有意义- 用户应该在网站上看到一些东西,或被引导到另一个页面。
    • 另一个注意事项:使用&lt;?php 而不是仅仅&lt;? 打开php 部分。短标签已弃用。
    • 不,表单本身的名称不是必需的。
    • 如果这个答案有帮助,为什么不点击左边的绿色勾号将其作为正确的答案呢? :-)
    【解决方案4】:

    我在 function.php 中使用下面的代码,它正在工作

    add_action( 'wpcf7_mail_sent', 'wpcf7_mail_sent_callback' );
    function wpcf7_mail_sent_callback() {
         header("location: https://www.example.com/thankyou/");
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 2023-03-29
      • 2019-11-27
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多