我有一个包含注册表单的PHP站点(带有CodeIgniter)。我有一个包含一些细节的页面,它链接到单独页面上的表单。表单发布到第三个URL进行处理,如果成功则重定向回第一页(如果没有,则重定向到第一页)。
目前我正在添加一个成功参数:example.com/page?success=1
,显示成功消息。问题是有些人一直在共享这个URL(并点击Facebook Like按钮),所以当另一个用户打开该URL时,他们会看到一条消息“感谢您注册!”他们显然还没有完成。
我认为这是表单的标准方式(提交到一个URL并重定向到另一个URL)但有更好的方法吗?我不想回发到同一页面,因为在尝试重新加载页面时会收到POSTDATA警告。
答案 0 :(得分:3)
你有三种方法可以做到这一点
如果选择使用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' ) ;
}
?>