2011-10-26 29 views
2

据我所知,我可以使用POST方法的URL参数来显示数据根据特定的变量,我知道如何使用GET方法 - 但我被告知, POST方法可以用来隐藏像这样的URL部分。使用POST方法来隐藏URL参数

/data.php?parameter=1234 

这两种方法在URL参数方面的实际区别是什么?

下面是一些代码,根据特定的链接

<?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在一个单独的页面我根据像这样的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

一个小侧面说明'''的mysql_query(只是增加POST到窗体中被移除的参数 “SELECT * FROM表WHERE ID =”。$ _ GET [ '身份证'] “;”)'''很容易受到SQL注入的影响,所以如果你把它放在线上并且你的数据库包含重要的数据,那么请小心。 – Mason

回答

2

为了使用POST,您将需要使用<form>标记,并且根据您如何拉起这些URL,可能更容易使用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输入设置为不同的值。

+0

感谢您的回复,我正在执行一个类似的过程,通过post提交的表单将数据插入到数据库中,然后将用户带到他们通过标头提交的数据的页面('Location:../data ?.PHP ID =” $ ID);这是否意味着我现在实际上使用了不正确的代码? – Alex

+0

这没有什么不正确的,但是如果你想使用POST来从URL中删除id,那么你会想在会话中存储这个ID($ _SESSION)。这样,当用户在data.php上时,可以从会话中查找id,而不是从GET中查找。 –

+0

那么我将不得不坚持用于更新数据库的代码在同一个文件中也显示插入的内容?所以表单会运行该脚本 - 插入到数据库中,然后显示为用户插入的数据? – Alex

0

对于POST值,浏览器必须使用method =“post”或JavaScript模拟表单的表单。各种开发工具(fireug等)可以将GET表单转换为POST表单,但通常情况下,表单是必需的。

理论上GET请求不应该有任何副作用,并且“应该”从请求到请求是一致的。也就是说,服务器应该返回相同的内容。在今天的世界中,几乎所有的事物都是动态的,这可能没有什么实际的设计意义。

0

无论您使用GET还是POST,参数都会出现在$_REQUEST中。关键的区别是使用POST允许变量不出现在URL历史记录中。这会降低您不想在URL历史记录中显示的密码等数据的可见性。要使用POST而不是GET,只需在文档中生成<form method="POST" ...>

更好的办法是将敏感值(如用户id)存储在cookie中,以便它们完全不会出现在$_REQUEST中。由于cookie的内容是在额外的HTTP请求头中提供的,而不是在内容中提供的,所以它们通常不作为历史记录的一部分存储。

0

为了使用而不是GET POST,你需要在你的HTML中使用的HTML表单标签,就像这样:

<form method="POST" action="/data.php"> 
    <input type="hidden" name="parameter" value="1234" /> 
    <button type="submit">Submit</button> 
</form> 

提交时,您的网址将只是/data.php和参数= 1234将在你的(隐藏的)后期缓冲区中。

有意义吗?

0

要做一个POST,你必须使用一个表单或者一些javascript/ajax技巧。一个<a>将只会导致一个GET请求。

请注意POST请求仍然可以在URL中具有查询参数。拥有它们并不“正常”,但它们是被允许的。主要区别在于,通过GET请求(忽略cookie),URL是向服务器发送参数/数据的方式。通过POST,您可以同时使用URL和POST请求的正文,POST请求通常是放置POST数据的地方。

2

对表单使用方法“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>