我是 PHP 新手,所以这可能是一个简单的答案。希望我能正确地按照 SO 标准格式化它(对于该网站来说仍然是新的。)
我正在通过 SitePoint 编写两组非常相似的代码,提交表单数据并使用 htmlspecialchars 来阻止 XSS 攻击。很简单,对吧。
使用代码集 1 时,一旦我将表单操作更改为未定义索引,就会出现未定义索引的错误
<form action="formpost.php" method="post">
to
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
我搜索了一下,发现我需要检查是否$_REQUEST
是否为空,以便不存在未定义的索引并消除该错误。如果有人可以向我解释这一部分,我将非常感激。某物需要落在什么范围内才能成为一个Index?
大声思考,请不要取笑我,我知道我可能听起来很愚蠢-->是不是一个Index
因为$_REQUEST
成为一个$_POST
, $_GET
and $_COOKIE
是一个数组,数组中的数据是indexed,
0,1,2,3,etc
.?
我明白$_REQUEST
可能为空,因为没有$_REQUEST
已经完成(我想?)但是,由于没有通过在表单中输入数据来激活脚本,为什么它会期望数据已经存在$_REQUEST
?
代码集 1(除非脚本检查是否存在,否则会抛出错误 [未定义索引]$_REQUEST
是空的):
在此代码中,我只是允许最终用户通过表单字段或通过手动添加到 URL 的字符串发布其姓名并打印。
<?php
if( !empty($_REQUEST) )
{
$firstname = $_REQUEST['firstname'];
$lastname = $_REQUEST['lastname'];
echo 'Welcome to our web site, ' .
htmlspecialchars($firstname, ENT_QUOTES, 'utf-8') . ' ' .
htmlspecialchars($lastname, ENT_QUOTES, 'utf-8') . '!';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Query String Link Example</title>
</head>
<body>
<p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<div><label for="firstname">First name:
<input type="text" name="firstname" id="firstname"></label>
</div>
<div><label for="lastname">Last name:
<input type="text" name="lastname" id="lastname"></label></div>
<div><input type="submit" value="GO"></div>
</form>
</p>
</body>
</html>
代码集 2(不介意是否$_REQUEST
是否检查):
在这段代码中,我正在做同样的事情,只是如果它恰好是我的名字,让它打印出一条特殊的消息。
<?php
$firstname = $_REQUEST['firstname'];
$lastname = $_REQUEST['lastname'];
if ($firstname == 'Tommy' && $lastname='Loza')
{
echo 'Welcome to our web site web master!';
}
else
{
echo 'Welcome to our web site, ' .
htmlspecialchars($firstname, ENT_QUOTES, 'utf-8') . ' ' .
htmlspecialchars($lastname, ENT_QUOTES, 'utf-8') . '!';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Conditional Query String Link Example</title>
</head>
<body>
<p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<div><label for="firstname">First name:
<input type="text" name="firstname" id="firstname"></label>
</div>
<div><label for="lastname">Last name:
<input type="text" name="lastname" id="lastname"></label></div>
<div><input type="submit" value="GO"></div>
</form>
</p>
</body>
</html>
希望我没有问太多愚蠢的问题,并且这篇文章的格式正确。非常感谢社区。
Tommy