提问人:Jeff 提问时间:8/19/2009 最后编辑:Jeff 更新时间:8/19/2009 访问量:779
PHP联系表格问题 $_POST, $_GET $_SESSION
PHP Contact Form question $_POST, $_GET $_SESSION
问:
编辑:
所以我剩下的问题是:(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;
}
}
原始(已解决):
我只是在学习 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 );
- 作为新手,我想我想知道你是否看到任何明显的问题?
- 我的重定向代码看起来是否完整有效?
header()
- 重定向后传递变量的最常见和/或推荐的方法是什么?是用 ,还是有更好的方法?我以前从未使用过会话,所以我对它们有点害怕。
$_POST
header()
$_SESSION
编辑:顺便说一句,我想通过重定向来避免“刷新-重新发送”非常可怕和邪恶的警告消息。header()
$_GET
答:
第一个问题。我建议在 之后使用括号,因为您的条件块看起来无效。{
}
if
第二个问题。我认为您不需要 303 状态代码。一个典型的会做。header('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
我的 header() 重定向代码看起来是否完整有效?
我会在每个之后添加一个以防止执行进一步的代码。但其余的看起来都不错。exit
header
评论
从标头功能中删除 303。这是您想要的 302 临时重定向,如果您未显式设置,该函数将默认使用它。
一个小点,但值得注意;选择错误的HTTP重定向状态代码会非常轻微地扰乱SEO。
评论
我不明白你为什么要重定向到那些错误或感谢页面。
出错时:再次显示表单并显示提交的值,突出显示必填字段错误或缺失的字段。
成功后:显示感谢 html 页面。
评论