PHP联系表单问题$ _POST,$ _GET $ _SESSION

时间:2009-08-19 11:22:59

标签: php redirect

修改

所以我剩下的问题是:(1)我应该使用302或303作为header()重定向吗?我相信303是正确的方法。 (2)$ _SESSION是将变量传递给?contact = thankyou页面的最佳方法吗?

我修改后的代码:

if ( isset( $_POST[ 'submit' ] ) )
{
  if ( is_bot() )
  {
    header( "Location: http://www.example.com/contact/?contact=thankyou",
        TRUE, 303 );
    exit;
  }
  elseif ( is_input_error() )
  {
    // show error form stuff...
  }
  else
  {
    contact_send_email();
    header( "Location: http://www.example.com/contact/?contact=thankyou",
        TRUE, 303 );
    exit;
  }
}

ORIGINAL(已解决):

我正在学习PHP的$ _POST,$ _GET和表单。我有一个简单的联系表格,但现在我的经历变得有点复杂。

// curly braces left out for brevity
if ( isset( $_POST[ 'submit' ] ) )
  if ( is_bot() )
    header( "Location: http://www.example.com/contact/?contact=thankyou", 
            TRUE, 303 );
  if ( is_input_error() )
    header( "Location: http://www.example.com/contact/?contact=error", 
            TRUE, 303 );
  else
    contact_send_email()
    header( "Location: http://www.example.com/contact/?contact=thankyou", 
            TRUE, 303 );
  1. 对此我是新手,我想我想知道你是否看到任何明显的问题?
  2. 我的header()重定向代码是否完整且有效?
  3. $_POST重定向后传递header()变量的最常见和/或推荐方法是什么?它是$_SESSION,还是有更好的方法?我之前从未使用过会话,所以我有点被他们吓倒了。
  4. 编辑:顺便说一下,我想通过header()传递$_GET重定向,以避免“刷新重新发送”非常恐怖和邪恶的警告信息。

4 个答案:

答案 0 :(得分:1)

  

在这方面有新意,我想我想知道你是否看到任何明显的问题?

我不知道你是否打算这样做,但你的代码会被翻译成带有花括号的版本:

if (isset($_POST['submit'])) {
    if (is_bot()) {
        header("Location: http://www.example.com/contact/?contact=thankyou", TRUE, 303);
    }
}
if (is_input_error()) {
    header("Location: http://www.example.com/contact/?contact=error", TRUE, 303);
} else {
    contact_send_email();
}
header("Location: http://www.example.com/contact/?contact=thankyou", TRUE, 303);

如果缺少花括号,if块的主体总是只是下一个语句。我怀疑你真的想要那个。

  

我的header()重定向代码看起来是否完整且有效?

我会在每个exit之后添加header,以防止进一步执行代码。但其余的看起来很好。

答案 1 :(得分:0)

第一个问题。我建议在{之后使用括号} if,因为条件块看起来无效。

第二次问题。我认为您不需要303状态代码。典型的header('Location: ...');会做。

3rd 问题。两种可能的解决方案是:会话或数​​据库。

总结一下,我会这样做:

if ( isset( $_POST[ 'submit' ] ) )
{
  if ( is_bot() )
  {
    header( "Location: http://www.example.com/contact/?contact=thankyou" );
  }
  elseif ( is_input_error() )
  {
    header( "Location: http://www.example.com/contact/?contact=error" );
  }
  else
  {
    contact_send_email();
    header( "Location: http://www.example.com/contact/?contact=thankyou" );
  }
}

答案 2 :(得分:0)

从标题功能中删除303。它是一个302,您想要的临时重定向,如果您没有明确设置,则默认使用该功能。

小点,但值得注意;选择错误的HTTP重定向状态代码会略微扰乱SEO。

答案 3 :(得分:0)

我不明白你为什么要重定向到那些错误或感谢你的页面。

出错时:使用提交的值再次显示表单,突出显示包含错误或缺少必填字段的字段。

成功:显示谢谢你html页面。