【问题标题】:HTML PHP html php redirect same page with additional messageHTML PHP html php 重定向同一页面并附加消息
【发布时间】:2014-02-07 23:02:02
【问题描述】:

我正在创建一个提交联系表单。但是,当按下提交按钮时,我希望它返回到我的contact.php 页面,并在正文页面的顶部附加一条消息,例如。 "我们已收到您的邮件,我们的代理会尽快与您联系"

我有两个文件,contact.php 用于表单,send_form_email.php 用于电子邮件处理

我试过了

header("location: contact.php"); 

但是这只会让我回到联系页面而没有任何确认

你能帮帮我吗?

问候, 地法

【问题讨论】:

  • 您可以使用sessions,但您需要注意如何使用它。 ;-)

标签: php html forms


【解决方案1】:

最简单的方法是查询字符串。

header("location: contact.php?success=1"); 

或者类似的东西。

然后在您的联系页面中,您使用$_GET['success'] 检查它是否已设置(您可以使用isset() 来查看它是否在 URL 中,或者如果您想做更多,请检查实际值)显示你的消息。

对于稍微“复杂”的东西,请参阅:PHP passing messages between pages

【讨论】:

  • 这没什么大不了的,但这意味着我可以输入该网址并一直看到消息。
【解决方案2】:

我建议在您的表单中使用 POST。在这种情况下使用 GET 是个坏主意。

http://www.w3schools.com/php/php_forms.asp

然后添加

if($_POST["done"] == 1)
   echo "We have received your email, our agent will contact you shortly";

【讨论】:

    【解决方案3】:

    你有几个选择。

    最简单的方法是将表单处理逻辑放在同一页面上,然后将表单的操作属性设置为该页面。

    你可以做一些事情,比如检查你是否发布了一个值来告诉你是否需要处理这个页面。

    if (isset($_POST['my_value_from_form'])) {
        // process
    }
    
    // body of page itself
    

    这让您可以轻松放置一个。

    另一种方法是通过将 GET 值附加到 URL 来添加它:

    header("location: contact.php?message=1")
    

    并将其与$_GET['message'] 一起使用来确定要显示的内容。但是,?message=1 将在页面的 URL 中,因此可能并不理想。

    另一种方法是在您引导之前设置会话值,然后检查该值是否存在(并在显示后将其清除。

    // on send_form_email.php
    session_start();
    $_SESSION['message'] = 1;
    
    // on contact.php
    session_start();
    if ($_SESSION['message'] == 1) {
        // do something
    }
    
    unset($_SESSION['message']); // so it only shows once.
    

    所有方法都有一些小的权衡,主要是因为您组织代码的方式。如果我要实现它,我会使用 session 方法。

    【讨论】:

      【解决方案4】:

      在文件Contact.php添加

      $done = $_GET['done'];
      if ($done == 1){
          echo "<div>We have received your email, our agent will contact you shortly</div>";
      }
      

      在文件send_form_email.php添加

      header("Location: contact.php?done=1");
      

      【讨论】:

      • Location HTTP 标头必须包含绝对 URL。不确定 PHP 和 Apache 对此做了什么……在 CGI 脚本中,这应该发出内部重定向,但这在 mod_php、IMO 下不起作用。如果它有效并且在标头中发送了一个绝对 URL,PHP 会发挥一些作用——当心,它可能会被破坏!
      • @Palec 有效点,但 PHP/Apache (可以说是错误的)从来没有在乎过,尽管header() 函数应该发送一个原始 HTTP 标头,甚至 PHP 文档声明要使用绝对网址。
      • @CD001 我总是阅读规范和文档,以确保安全。当我更多地了解 PHP 的怪癖时,例如这个,我往往会用头撞墙或失控地大笑。无论如何,很高兴知道这是可行的。感谢您的确认。
      • @Palec 我在发送编辑时就知道这一点,但是在发送时无法撤消它。问题是我几乎在您制作编辑的同时发送了我的编辑。因此,编辑消息甚至没有出现并告诉我其他人进行了编辑。在那之后,我既不能恢复也不能取消发送编辑。
      • @Palec 谢谢。很抱歉造成混乱。
      【解决方案5】:

      将标题更改为

      header("location: contact.php?success");
      

      然后在您的contact.php 上将其添加到页面顶部

      if(isset($_GET['success'])){
          echo "We have received your email, our agent will contact you shortly";
      }
      

      【讨论】:

        【解决方案6】:

        您可以像这样进行消息会话

          $_SESSION['message'] = "your message";
        

        然后你做重定向插入这个会话到消息 div 中,然后取消设置它

        <?php
        
         session_start();
        
         $_SESSION['message'] = "your message";
         header("location: contact.php"); 
        

        不要忘记在您的文件contact.php 顶部使用session_start(); 开始会话

        【讨论】:

          【解决方案7】:

          您需要为此使用sessions。示例

          session_start(); // start session
          $_SESSION['message'] = 'We have received your email, our agent will contact you shortly';
          header("location: contact.php"); 
          

          在你的contact.php

          echo $_SESSION['message']; 
          unset($_SESSION['message']); // delete message so it doesnt display again
          

          【讨论】:

            猜你喜欢
            • 2014-03-05
            • 2015-10-22
            • 1970-01-01
            • 2022-06-16
            • 2020-05-11
            • 2021-05-02
            • 2012-06-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多