2013-04-29 161 views
0

我有一个register.php页面。我通过表单将数据发送到php_register.php文件。这个文件检查表单是否有效(电子邮件是真实的等等)。我想的是,php_register.php会做他的工作,并发送给客户端回register.php文件中的无效形式的情况下:如何将POST值传递到一个php页面

header("Location: register.php"); 

我想这php_register.php会发送更多数据来一个register.php。在我的情况下,我想发送错误的输入。我能做到这一点是这样的:

header("Location: register.php?error=5"); 

通过register.php $_GET['error']我可以显示正确的输出。我想要做的是同样的事情,但取而代之的是使用post方法(不涉及任何形式)? 我该怎么办?

+0

添加公布值$ _SESSION,这些U可以在整个访问整个网站。不要忘记在第1行添加session_start() – DarkBee 2013-04-29 17:24:01

+0

相关:http://programmers.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect – 2013-04-29 17:30:45

回答

3

长和短是你不能。互联网不会那样工作。老实说,浏览器甚至可以忽略header(这就是为什么header应该,无一例外,其次是die,exit或其他强制终止脚本的函数)。

您可以将值存储在$_SESSION中,或者您可以将它存储到表单所在的同一页面(这是大多数框架如何处理的),但是您无法告诉浏览器“在其他地方提交此POST “。

+0

http状态码307 - 使用相同方法重定向/数据作为原始请求。它会正确地重定向一个帖子。但这样做可能不安全。 – 2013-04-29 17:32:13

+0

@MarcB我不知道。 – cwallenpoole 2013-04-29 17:35:11

+0

不常用,因为POSTS一般不应该重复。例如“删除上次添加的用户”可能会在第一时间正常工作。 2小时后重新载入该页面/重定向,您可能会再次遇到另一个用户。 – 2013-04-29 17:36:16

0

使用会话,例如php_register.php

// start the session 
session_start(); 

// Email check (do a more robust check of course) 
if($_POST['email'] == "") 
{ 
    $_SESSION['error'] = "Please enter an email address." 
    header("Location: register.php"); 
    die(); 
} 

然后register.php

// start session 
session_start(); 

if(isset($_SESSION['error'])) 
{ 
    echo $_SESSION['error']; 

    // unset now so it doesn't show again 
    unset($_SESSION['error']); 

} 
相关问题