据我所知,我可以使用POST参数的POST方法根据特定变量显示数据,我知道如何使用GET方法 - 但我被告知POST方法可以用来隐藏URL的一部分就是这样。
/data.php?parameter=1234
两种方法在URL参数方面的实际差异是什么?
以下是根据特定链接的ID
从数据库中提取数据的一些代码 <?php
//This includes the variables, adjusted within the 'config.php file' and the functions from the 'functions.php' - the config variables are adjusted prior to anything else.
require('configs/config.php');
require('configs/functions.php');
//This is the actual interaction with the database, according to the id.
$query = mysql_query("SELECT * FROM table WHERE id=" .$_GET['id'] . ";") or die("An error has occurred");
//This re-directs to an error page the user preventing them from viewing the page if there are no rows with data equal to the query.
if( mysql_num_rows($query) < 1 )
{
header('Location: 404.php');
exit;
}
//Here each cell in the database is fetched and assigned a variable.
while($row = mysql_fetch_array($query))
{
$id = $row['id'];
$title = $row['title'];
$month = $row['month'];
$day = $row['day'];
$photo = $row['photo'];
$text = $row['text'];
}
?>
在另一个页面上,我根据ID生成指向data.php文件的链接,如下所示:
<a href="post.php?id=<?php echo $content['id']; ?>"><?php echo $content['title']; ?></a>
忘记通过上面的代码可能会发生SQL注入,我将如何使用POST方法来隐藏URL参数,或者至少不显示它们:
http://example.com/data.php?id=1
答案 0 :(得分:2)
要使用POST,您需要使用<form>
标记,并且根据您提取这些网址的方式,使用javascript可能更容易提供帮助。这是一个基本的例子:
<form method="post" action="data.php">
<input type="hidden" name="parameter" value="1234" />
<input type="submit" value="Go" />
</form>
Go按钮将POST表单数据,现在在data.php中,您将能够从$_POST['parameter']
检索值。请注意,使用POST时,您可能希望将(HTTP 302)重定向回页面,以便当用户点击后退按钮时,浏览器不会提示重新提交表单。
使用javascript,您可以在发布表单之前将parameter
输入设置为其他值。
答案 1 :(得分:2)
为表单使用“POST”方法。我有同样的问题,只需在表单中添加POST,从URL中删除参数
<form id="abc" name="abc" action="someaction.php" method="post">
<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>
<input type="submit" id="submit" name="submit" value="submit"/>
</form>
答案 2 :(得分:0)
要POST值,浏览器必须使用带有method =“post”的表单,或者模拟表单的javascript。各种开发人员工具(fireug等)可以将GET表单转换为POST表单,但通常,表单是必需的。
理论上,GET请求不应有任何副作用,并且“应该”从请求到请求是一致的。也就是说,服务器应该返回相同的内容。在当今几乎所有动态的世界中,这可能没有什么实际的设计意义。
答案 3 :(得分:0)
无论您使用GET还是POST,参数都会显示在$_REQUEST
中。关键的区别在于使用POST允许变量不出现在URL历史记录中。这会降低您不希望在URL历史记录中显示的密码等数据的可见性。要使用POST而不是GET,只需在文档中生成<form method="POST" ...>
。
更好的方法是在Cookie中存储敏感值(例如用户ID),以便它们根本不会出现在$_REQUEST
中。由于cookie的内容是在额外的HTTP请求标头中提供的,而不是在内容中提供的,因此它们通常不会作为历史记录的一部分存储。
答案 4 :(得分:0)
为了使用POST而不是GET,您需要在html中使用HTML表单标记,如下所示:
<form method="POST" action="/data.php">
<input type="hidden" name="parameter" value="1234" />
<button type="submit">Submit</button>
</form>
提交后,您的网址将为/data.php
,参数= 1234将位于您的(隐藏)帖子缓冲区中。
有意义吗?
答案 5 :(得分:0)
要进行POST,您必须使用表单或一些javascript / ajax技巧。 <a>
只会导致GET请求。
请注意,POST请求仍然可以在URL中包含查询参数。拥有它们并不“正常”,但它们是允许的。主要区别在于GET请求(忽略cookie),URL是 ONLY 将参数/数据发送到服务器的方式。使用POST,您可以同时使用URL和POST请求的正文,这是通常放置POST表单数据的位置。