我现在已经进入strtoupper($_SERVER['REQUEST_METHOD'])了我的代码.
但这是strtoupper必要的电话吗?为$_SERVER['REQUEST_METHOD']保证被已经是大写吗?
所以,有一段时间我一直在使用以下内容来检查我的帖子数据是否已设置.
if( ! empty( $_POST ) ) { }
Run Code Online (Sandbox Code Playgroud)
但最近我看到很多帖子说上面的内容是"黑客",下面是正确的"更好"的方式.
if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }
Run Code Online (Sandbox Code Playgroud)
到最近,我只是说我最近才找到它.正在讨论这个后来方法的所有帖子都来自2009年.编码标准有点旧,所以我觉得可以对这个主题有一个新的看法.
我明白这两种方法是不同的.第一个被认为是"hack",只检查是否已经设置了post数组,如果发出了post请求,就会发生这种情况.第二个实际上检查服务器以查看是否已发出发布请求.我想第二个可能会更安全,但如果信息被清理干净,我看不出它有多大区别.
我也看过后者仅用于PHP版本<= 4的帖子,因为此时PHP仍在使用$_REQUEST全局,这就是PHP编码器用来确定某些请求参数的来源的方式.我不确定最后一个陈述是多么准确,因为旧帖子中提出的问题与我的相同.他们使用post global而不是request.然而,这是一个比其他任何一个(2011年)更新的帖子,并且从我开始信任的来源.所以我不知道该怎么做.
检查get时该怎么办?我已经看到有几个地方说服务器请求方法在这个实例中似乎不起作用,我只能假设它是因为post superscedes get而请求方法只能容纳一个参数.所以,如果您同时发布和获取数据,您会做什么?对其中一篇帖子的评论建议使用全局请求而不是发布和获取,但我一直认为这是一个坏主意.
这是我能找到的最新资料,我在提交之前通过查看侧面的类似问题这样做了.它特别询问使用提交值来检查表单是否已通过,但它也提到了请求方法.很多似乎表明后者仍然被普遍使用.这个建议仍然有效吗?检查请求方法仍然是最佳选择吗?
我在这里搜索了有关以下内容的十几个答案:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
}
Run Code Online (Sandbox Code Playgroud)
然而,我仍然没有找到一个答案,为什么。
如果我们已经设置了,为什么要这样做<form method="post">?
这不是说这是这里唯一的表单方法吗?
if(isset($_POST["email"]))
{
$email = mysql_real_escape_string($_POST["email"]); /* Line 10 */
$password = mysql_real_escape_string($_POST["password"]);
$result = mysql_query("SELECT password, id FROM users WHERE email = '$email'");
if (!$result)
{
die('Invalid query: ' . mysql_error());
}
$row = mysql_fetch_assoc($result);
if($row['password'] == $password)
{
ini_set("session.cookie_lifetime","360000");
session_start();
$_SESSION['valid_user'] = $row['id'];
$_SESSION['email'] = $row['email'];
mysql_close($link);
header('Location: index.php');
}
mysql_close($link);
}
Run Code Online (Sandbox Code Playgroud)
我没有发布任何帖子,但它说$email没有在第10行定义.为什么?我使用EasyPHP.
注意:未定义的索引:第10行的C:\ Program Files\EasyPHP-5.3.5.0\www\v0.3\model\login.php中的电子邮件