如果$ _POST变量丢失了怎么办?

时间:2011-03-29 16:28:32

标签: php webforms

如果缺少$_POST变量,应用程序应该怎么做,这是执行操作所必需的?

例如,假设我有一个带有<input name="title">的表单,并且我有一些页面,它处理生成的POST请求。现在,如果该页面收到请求,但是没有设置$_POST['title']变量,那么该页面应该怎么做?

说清楚:“未设置”是指无效请求,普通用户无法做到,只有某人向我的表单处理页面发出手动请求,即有人试图用我的网站做事,我不希望它完成。

一些可能性:

  • 只需die
  • 打印一个花哨的错误消息,就像你一样,它只是空的字段。
  • 阻止来自此IP的进一步请求。

4 个答案:

答案 0 :(得分:5)

返回带有表格的页面,并向用户表明必须设置标题。

答案 1 :(得分:4)

检查并清理预期的POST密钥。

if (isset($_POST['title'])) {
    // sanitize and use title here
}
else die("Missing required field: 'title'.");

编辑:因为我们不喜欢die(),这个怎么样:

if (isset($_POST['title'])) {
    // sanitize and use title here
}
else 
{
    // handle an invalid POST. You could redirect to form 
    // page, display an error, or whatever works for your
    // application.
}

答案 2 :(得分:2)

我倾向于支持重定向。如果有人来自某个地方他们不应该来自或做一些他们不应该做的事情 - 我只是把他们带到别的地方,默默地,毫不大惊小怪。

如果您填写我的表单但未验证服务器端,我会将您带回表单,指出您的错误,预先填写您的错误,并鼓励您再试一次。

如果你没有填写我的表格并且它没有验证服务器端,我或者像上面那样做,或者我只是将你转移到表单页面上,好像它从未发生过一样。

重要的是,如果您不希望人们能够直接将数据发布到页面上,那么就阻止他们这样做了 - 它实际上对用户的重要性就不那么重要了,因为他们显然正在使用你的网站以不自然的方式。他们可能是自动机器人,无论如何都不会关心他们发生了什么,特别是如果你谈论的某种形式可能被解释为可能允许评论或以其他方式将某些文本发布到网站。垃圾邮件发送者只喜欢那些。

就此而言 - 您当然应该注意保护您的网站免受机器人的攻击,这些机器人可以识别有效的POST看起来像什么并且欺骗它。像ReCaptcha之类的东西可以解决问题,但有很多方法可以做到这一点。

答案 3 :(得分:1)

  

“[...]有人试图做事   与我的网站,我不希望它   用“

完成

不要太在意他们。只需放一个die("Try again loser!");然后放手吧。良好的设计和一般好的东西是为那些使用你的网站的人做的。尝试为您的网站制作不良内容的人只需要一个带有粗体文字的空白页面。