如何在不更改URL的情况下在表单提交上显示“成功”消息?

时间:2012-02-15 16:46:30

标签: php forms codeigniter post

我有一个包含注册表单的PHP站点(带有CodeIgniter)。我有一个包含一些细节的页面,它链接到单独页面上的表单。表单发布到第三个URL进行处理,如果成功则重定向回第一页(如果没有,则重定向到第一页)。

目前我正在添加一个成功参数:example.com/page?success=1,显示成功消息。问题是有些人一直在共享这个URL(并点击Facebook Like按钮),所以当另一个用户打开该URL时,他们会看到一条消息“感谢您注册!”他们显然还没有完成。

我认为这是表单的标准方式(提交到一个URL并重定向到另一个URL)但有更好的方法吗?我不想回发到同一页面,因为在尝试重新加载页面时会收到POSTDATA警告。

5 个答案:

答案 0 :(得分:3)

你有三种方法可以做到这一点

  • 您的使用方式
  • 实际上并没有重定向,而是使用AJAX发送请求
  • 会话(或者,在边缘情况下,cookie)

如果选择使用SESSION,则只需将会话变量指定为true

即可
$_SESSION['registered'] = true; 

并在第一页上查看

if (isset($_SESSION['registered'])) { 
      unset($_SESSION['registered']); 
      // shot the message
}

答案 1 :(得分:2)

通常,您会在会话中设置成功标记,以便在下一页加载时显示此消息。这通常称为Flash消息。然后,您将检查此会话标志的值/是否存在并相应地显示您的消息。在大多数框架中,都有内置的功能,包括在下一个请求中清除标志,以便仅在生成消息之后直接显示消息。

来自CI Sessions Documentation

  

CodeIgniter支持“flashdata”,或者只支持会话数据   可用于下一个服务器请求,然后自动执行   清除。这些非常有用,通常用于   信息或状态消息(例如:“记录2已删除”)。

     

注意:Flash变量的前缀为“flash_”,因此请避免使用此前缀   在你自己的会话名称中。

     

添加flashdata:

$this->session->set_flashdata('item', 'value');
     

您也可以将数组传递给set_flashdata(),方法与之相同   set_userdata()。

     

要读取flashdata变量:

$this->session->flashdata('item');
     

如果您发现需要通过一个保存flashdata变量   额外的请求,你可以使用keep_flashdata()函数。

$this->session->keep_flashdata('item');

答案 2 :(得分:0)

您应该在代码中进行一些验证检查,以处理表单数据的处理,以确保填写必填字段。否则,您应该重定向到第一页以让用户填写表单。

此外,这可以通过AJAX处理,但这将是在表单处理页面中进行正确验证的第二步

答案 3 :(得分:0)

HTML:

 <form method="post">
     <input type="text">
     <input name="submitted" type="submit">
 </form>

PHP:

if($_POST['submitted']{
    //post was submitted process it

    if(/*whatever you're doing to the form succeeds*/){
        //show success
    }
}

POST不会在URL中显示变量。

答案 4 :(得分:-1)

这里有几个解决方案,一个是检查表单提交,如果还没有提交,则重定向到包含表单的页面。

即:

<?php
 if (isset($_POST['submit']))
    {
    // process the form
    }
else
    {
    //redirect to the form itself
    header( 'Location: http://www.yourform.com' ) ;
    }
?>