Php 为什么不在这里使用POST方法?
我有一个分类广告网站 在主页(索引)中,我有几个表单字段,用户可以填写,也可以不填写,以便指定分类广告的详细搜索 例: 表单的操作设置为php页面: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); 然后,我通过创建一个
<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更好看(漂亮)?
检查前面的问题:
- 搜索引擎不会为结果编制索引
- 人们不能给搜索添加书签
- 人们无法向朋友发送搜索链接
- 人们无法从自己的网页链接到结果页面
- 有些人返回页面时会收到可怕的“是否要重新提交表单?”
你不应该。没关系。注意到表单提交到的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);