Php 为什么不在这里使用POST方法?

Php 为什么不在这里使用POST方法?,php,javascript,html,security,http,Php,Javascript,Html,Security,Http,我有一个分类广告网站 在主页(索引)中,我有几个表单字段,用户可以填写,也可以不填写,以便指定分类广告的详细搜索 例: 表单的操作设置为php页面: <form action='query_sql.php' method='post'> 然后查询MySql: $query="SELECT........WHERE category='$category' etc etc.... $results = mysql_query($query); 然后,我通过创建一个

我有一个分类广告网站

在主页(索引)中,我有几个表单字段,用户可以填写,也可以不填写,以便指定分类广告的详细搜索

例:

表单的操作设置为php页面:

   <form action='query_sql.php' method='post'>
然后查询MySql:

   $query="SELECT........WHERE category='$category' etc etc....
   $results = mysql_query($query);
然后,我通过创建一个根据结果集动态填充的表,向用户显示查询结果

然而,根据我在上一个问题中的回答,我不应该在这里使用帖子:

我使用post的原因只是为了在浏览器地址栏中隐藏“一页word文档”的长URL

我很困惑,用POST行不行

当我使用GET或POST now时,它工作良好。。。而且它已经在生产服务器上

顺便说一句,在链接的问题中,我不是指使URL不可见(或隐藏它),我只是想让它看起来更好(这是我用mod_重写完成的)

更新:

如果我使用GET,那么我应该如何使url更好看(漂亮)? 检查前面的问题:

  • 搜索引擎不会为结果编制索引
  • 人们不能给搜索添加书签
  • 人们无法向朋友发送搜索链接
  • 人们无法从自己的网页链接到结果页面
  • 有些人返回页面时会收到可怕的“是否要重新提交表单?”
如果我使用GET,那么我应该如何使url更好看(漂亮)


你不应该。没关系。注意到表单提交到的URL的用户数量很少,关心的用户数量更少。

使用GET over POST的想法是,使用GET,您可以在地址栏、书签和传递中修改搜索URL

从技术上讲,如果您不需要解决这些方面的问题,并且将数据从一个页面传递到下一个页面,那么这两种方法都是可以互换的


GET和POST之间的一个重大区别是GET参数的大小不应超过1-2 KB。POST请求的大小限制通常为几十兆字节

首先,请记住使用清理输入。 GET与POST实际上是相同的,只是:

  • 使用POST,您无法将页面添加到书签中
  • 使用GET,您无法发布文件,并且查询字符串有长度限制

只有当我知道页面将修改服务器端的某些内容(即数据库更新)时,我才使用POST然后重定向到另一个页面。

您可能希望对用户输入执行一些检查,以减轻SQL注入攻击,因为看起来输入直接操纵SQL语句

David Dorward的回答解决了大部分问题,但他遗漏了一个大问题,即可缓存性问题

POST和GET具有非常特定的语义——POST应该意味着请求更改系统上的数据,而GET则没有。因此,不应缓存对POST的响应。但是对GET的响应可能会被缓存(取决于发送的头)

NB内容不仅仅缓存在浏览器上


C.

GET应用于只读或对数据没有任何副作用的请求(即,如中所述)。您应该能够在不影响返回结果的情况下提交任意次数的GET请求。(不过,您可能不会总是得到相同的结果,因为在此期间可能会有其他更改,但get请求不应该更改数据本身)

因此,搜索属于这一类,因为您不应该更改系统上的任何数据,这将影响搜索时的输出,您只是根据用户提供的某些参数向用户提供数据

当然,有些数据总是需要更新的,比如统计数据(如评论中提到的),GET可以这样做,因为它不会影响响应,只是保留所有请求的记录,等等

POST应在执行任何破坏性操作时使用(所谓破坏性,我指的是数据更改时,而不仅仅是删除)。所以添加、更新、删除等等

这就是为什么浏览器通常会提示您是否要重新提交POST请求,而不是GET。这是因为POST是为了在数据即将更改时使用

此外,一些浏览器可以从页面上的链接中预取页面(尝试在最终单击链接时提供速度错觉)。如果GET操作做了破坏性的事情(例如删除记录),那么这可能只是通过访问链接所在的页面而意外触发的


如果您担心您的URL看起来“凌乱”,您可以使用类似的方法使URL更人性化。所以
”http://yoursite.com/search/cars/red“
可以映射到
”http://yoursite.com/search.php?category=cars&color=red“
例如。

听起来您关心的是不友好的URL,即您希望在整个站点/应用程序中都有友好的URL。如果是这样,您可以在场景中继续使用POST,但在POST之后执行重定向。通过在post之后执行重定向,可以使呈现搜索结果的重定向URL变得友好和简短,同时可以使用post将请求中的更多参数传递给服务器,并避免与GET URL关联的长查询字符串

要了解更多发布后重定向,请查看这篇文章

您是否考虑过:

通过GET(或POST)提交表单,然后服务器端读取表单的内容(从url或POST数据),形成一个漂亮的url,然后301重定向到该url

这样,您就可以完全控制URL(例如,URL的外观并不取决于浏览器/表单),您还可以获得使用get的所有好处,例如书签
   category=$_POST['category'];
   etc etc...
   $query="SELECT........WHERE category='$category' etc etc....
   $results = mysql_query($query);