PHP联系人表单问题$\u发布,$\u获取$\u会话

PHP联系人表单问题$\u发布,$\u获取$\u会话,php,redirect,Php,Redirect,编辑: 所以我剩下的问题是:(1)我应该使用302还是303作为header()重定向?我相信303是正确的方式。(2) $\会话是将变量传递到?contact=Thankyu页面的最佳方式吗 我的修订守则: if ( isset( $_POST[ 'submit' ] ) ) { if ( is_bot() ) { header( "Location: http://www.example.com/contact/?contact=thankyou", TRUE

编辑:

所以我剩下的问题是:(1)我应该使用302还是303作为header()重定向?我相信303是正确的方式。(2) $\会话是将变量传递到?contact=Thankyu页面的最佳方式吗

我的修订守则:

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;
  }
}
原件(已解决):

我正在学习$\u POST、$\u GET和PHP表单。我有一个联系方式,一开始很简单,但根据我的经验,现在有点复杂了

// 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 );
  • 作为一个新手,我想我想知道你是否看到了任何明显的问题
  • 我的
    header()
    重定向代码是否完整有效
  • 头()重定向之后传递
    $\u POST
    变量的最常见和/或建议的方法是什么?是通过
    $\u会话
    ,还是有更好的方法?我以前从未使用过会话,所以我对它们有点害怕

  • 编辑:顺便说一句,我想用
    $\u GET
    传递
    标题()
    重定向,以避免“刷新重新发送”非常可怕和邪恶的警告消息。

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

    第二个问题。我想你不需要303状态码。典型的
    标题('Location:…')就可以了

    至于第三个问题。两种可能的解决方案是:会话或数据库

    总之,我会:

    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" );
      }
    }
    
    作为一个新手,我想我想知道你是否看到了任何明显的问题

    我不知道您是否有意这样做,但您的代码将被翻译成带有花括号的版本,如下所示:

    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
    块的主体总是下一条语句。我怀疑你真的想要那样

    my header()重定向代码是否完整有效


    我会在每个
    标题
    之后添加一个
    退出
    ,以防止执行更多的代码。但是其余的看起来很好。

    从header函数中删除303。这是一个302的临时重定向,如果没有显式设置,函数默认使用它


    一个小问题,但值得注意;选择错误的HTTP重定向状态代码会略微影响SEO。

    我不明白您为什么要重定向到这些错误或感谢页面

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


    成功时:显示感谢html页面。

    再想一想,如果出现“输入错误”,我认为您不应该重定向到错误页面。您应该在当前页面上显示错误消息。是的,并添加exit();正如Gumbo提出的那样,这是一个很好的信息,这正是我最初设置表单的方式——错误页面不使用header()重定向,但其他两个场景使用它。对于那些感兴趣的人来说,303重定向是发布后的正确方法。这是一个什么难题?戈奇亚。为了简洁起见,我省略了花括号。我想用$\u GET传递header()重定向,以避免出现“refresh resend”非常可怕和邪恶的警告消息。重定向到“thank you”页面是一种很好的做法,因为它会阻止用户两次提交表单。我读到,此页面上的重定向代码应该是303:。。。维基百科在这里引用了这一点:为了补充我上面的评论,评论员(Sam)说:需要记住的一点是,您的HTTP状态代码也应该是303而不是302,因此它符合标准,并且对于可能出现的新浏览器来说是安全的。只要阅读这些内容,它就非常有意义。唯一的问题是你是否更担心你的网站是否能经受住未来的考验,或者确保它能被老客户使用()。通过谷歌搜索,我也发现了关于重定向的问题:似乎正确的答案是使用303。