我是PHP新手,因此这可能是一个简单的答案。我希望我的格式正确和正确的SO标准(仍然是新的网站。)
我正在处理两套非常类似的代码提交表单数据和使用htmlspecialchars停止XSS攻击在我非常基本的开始PHP书通过SitePoint。很简单,对。
当使用代码设置1,我有一次我改变了形式的行动从
<form action="formpost.php" method="post">
到
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
我搜索SO,发现我需要检查了未定义指数的错误如果$_REQUEST
为空或者不是为了没有未定义的索引并且摆脱那个错误。如果有人能够向我解释这一部分,我会非常感激。确实需要的东西是什么周长回落下,以念Wo成为Index?
thiking,请不要取笑我了,我知道我可能听起来很蠢 - >它是一个 Index
因为$_REQUEST
是一个$_POST
,$_GET
和$_COOKIE
是一个数组,数组内的数据是indexed,
0,1,2,3,etc
。?
我理解,因为没有$_REQUEST
已取得$_REQUEST
可能是可能是空的(我想是不是?),但是,是没有剧本已经通过将数据输入到表格激活,为什么会被预期的数据已经在$_REQUEST
?
代码集1(thows错误[未定义指数]除非脚本检查$_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>
希望我没有问太多愚蠢的问题和这个职位格式正确无误。非常感谢SO社区。
汤米
我觉得我在这里#failed一点点。我的小Q在开始之后的主要问题是,为什么代码集1需要检查$ _REQUEST为空而代码集2没有?一些如何添加条件语句改变了事情。 – tommydevs
为了防止XSS攻击,应该是'<?php echo $ _SERVER ['PHP_SELF']; ?>'this'<?php echo htmlspecialchars($ _ SERVER ['PHP_SELF']); ?> – Pushkar
我认为你的问题为什么一切顺利,但在第一个问题中,首先出现一些错误,然后当你在表单中放入某些东西并点击按钮时没有错。我对吗? –