Php 如果缺少$\u POST变量,该怎么办?

Php 如果缺少$\u POST变量,该怎么办?,php,webforms,Php,Webforms,如果缺少执行操作所需的$\u POST变量,应用程序应该怎么做 例如,假设我有一个带有的表单,我有一些页面,它处理生成的POST请求。现在,如果该页面收到请求,但未设置$\u POST['title']变量,该怎么办 明确地说:我所说的“未设置”是指发出了无效的请求,这是普通用户无法做到的,只有一些人向我的表单处理页面发出了手动请求,也就是说,有人试图对我的站点进行操作,我不希望它被处理 一些可能性: 只需模具 打印一条奇特的错误消息,就像你会做的那样,如果字段是空的 阻止来自此IP的进一步请

如果缺少执行操作所需的
$\u POST
变量,应用程序应该怎么做

例如,假设我有一个带有
的表单,我有一些页面,它处理生成的POST请求。现在,如果该页面收到请求,但未设置
$\u POST['title']
变量,该怎么办

明确地说:我所说的“未设置”是指发出了无效的请求,这是普通用户无法做到的,只有一些人向我的表单处理页面发出了手动请求,也就是说,有人试图对我的站点进行操作,我不希望它被处理

一些可能性:

  • 只需
    模具
  • 打印一条奇特的错误消息,就像你会做的那样,如果字段是空的
  • 阻止来自此IP的进一步请求

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

检查并清理预期的帖子键

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.
}
“[…]有人想做事 对于我的网站,我不希望它是 “完成”


不要太在意他们。只要放一个
骰子(“再试一次,失败者!”)然后放手。好的设计和一般的好东西都是为那些使用你的网站的人设计的。那些试图在你的网站上制造坏消息的人应该得到一个空白页面,上面有一些粗体文字。

我倾向于支持重定向。如果有人来自某个不该来自的地方,或者做了某件不该做的事情,我就把他们带到另一个地方,静静地,毫不慌张

如果您填写我的表单,但它没有验证服务器端,我会带您回到表单,指出您的错误,用您的值预先填写表单,并鼓励您再试一次

如果您没有填写我的表单,并且它没有验证服务器端,那么我要么按照上面的操作,要么就在表单页面上将您转储,好像从未发生过一样

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


在这一点上,你当然应该注意保护你的网站免受机器人的攻击,这些机器人可以识别出一篇有效的文章是什么样子,并对其进行欺骗。类似的东西会起作用,但是有很多方法可以做到。

显示一条描述性错误消息并提供一个替代方案?@charlie:这应该是答案。这是一种可能的思考方式。我没有投反对票,但isset没有多大用处。尽管标题包含null(如果没有输入),但这里将始终设置标题。我投了你的反对票,因为我认为使用die检查表单变量是不正确的。我理解问题的方式,他询问的是人们手动向页面提交帖子数据,而不是通过他的表单。“明确地说:我所说的“未设置”是指发出了无效的请求,这是普通用户无法做到的,只有一些人向我的表单处理页面发出了手动请求,也就是说,有人试图对我的网站进行操作,我不希望这样做。”而且,我同意使用die()通常不是最好的方法,但是,它演示了逻辑。@Shakti:否。如果Web服务器收到POST请求,而该请求的正文未指定
title
变量,则不会对其进行设置。这就是,这是怎么回事;)@沙克蒂:如果我使用curl命令将数据发布到他的脚本中,而不是使用他的表单,并且我没有在post请求中指定“title”,那么isset()会捕捉到这一点。我甚至不会让他们满意地承认他们试图以我没有设计的方式使用程序。此外,这可能会刺激他们再次尝试——而我们真的只想让他们开始。