遵守POST修改数据

时间:2009-11-05 06:20:55

标签: php xhtml

所以我读过你应该使用POST来修改任何可以修改数据的东西。

E.g。

BAD

<a href="edit.php?id=12">Edit</a>

不可

<form action="edit.php" action="post"><input type="hidden" name="id" value="12" /><button type="submit">Edit</button></form>

现在显然第一次更简洁,但它会被认为是错误的方式。

现在通常额外的标记对于一个问题来说并不是太糟糕,但是说我可能会显示这个标记20次,或者更多。然后还有一个问题是“它应该有一个字段集和表单的图例元素。”

一般的最佳做法是什么?或者我把这件事拿回来了?

5 个答案:

答案 0 :(得分:3)

这取决于访问edit.php?id=12的内容。它实际上是否会改变某些内容,还是会显示另一个允许您编辑内容的页面?

如果它只显示允许您编辑内容的页面,那么GET就可以了。如果它实际上正在改变某些东西,那么POST是正确的,语义的事情,你必须处理标记有点臃肿的事实。

修改数据的GET请求的实际问题是它们可能会出现错误 - 想想书签,后退/前进按钮(如果您尝试重新提交{{1},许多浏览器会显示警告请求这种方式),搜索引擎跟随链接等。

答案 1 :(得分:2)

我总结这个的最好方法是两个简单的列表:

当POST优于GET

  • 除重复表格外 提交,用户要少得多 可能会意外复制一个 POST请求,因为你不能书签 POST请求,如果单击 URL栏并按下输入POST 请求不会重新发送所有数据
  • POST允许您添加文件
  • 只要有状态,就会发布POST 改变也允许更容易 编程时的语义区别 后端
  • POST请求更容易编码 因为你不必序列化或 转义用户数据完成POST请求 通过形式是常态,所以它是 更容易使用AJAX插件 如果你感受到未来的冲动

当GET优于POST

  • 可以为GET请求添加书签。像搜索查询这样的东西应该始终是GET请求。
  • 如果您决定在页面过期时获得超级严格(无缓存和整个业务),当用户单击其浏览器时,使用POST数据生成的页面将不会重新发送POST数据以创建页面,其中GET请求将保持原来的状态
  • GET请求对某些用户更有“意义”

关于您的具体问题,我推断您希望将用户带到可以编辑ID = 12的某个页面的页面。如果是这种情况,编辑页面的链接应该是带有GET的简单HREF(您可能需要考虑使用.htaccess重写来美化您的网址,使其看起来像edit/12而不是edit.php?id=12) 。编辑页面本身应该是一个发送POST数据的表单。

答案 2 :(得分:1)

通常,当将 lot 数据传递给要处理或存储的服务器时,使用POST是一个好主意,因为GET的下限低于POST。 POST还具有对用户相对隐藏的额外好处,除非在传输期间未加密。

如果你传递的是简单的值,就像上面传递的那样,那么使用GET不是问题(除非你喜欢光滑的URL,那就是..)

答案 3 :(得分:1)

好的,你有理由不正确使用GET。

我们举一个例子。假设您有一个脚本,根据单选按钮提交递增或递减计数器。

让我们说:

www.example.com/index.php?var=inc导致增量,www.example.com/index.php?var=dec导致减量。

问题在于,如果用户意外地刷新,转发或为您的脚本添加书签,您的计数器就会疯了!

这是您应该更喜欢POST的经典案例。

另一种情况显然是在提交密码等敏感信息时。

答案 4 :(得分:0)

如果你确保id是id(比如数字)并且你正确的擒纵机构

,那么拥有带有id的链接就没问题了。

错误的是发布一些表格作为GET,就像它制作长网址一样,用户可以将其加入书签,这是一个糟糕的举动。

这样的事情会不会很好

<form>
 <input type="text" name="firstname"/>
 <input type="text" name="lastname"/>
 ...
</form>

还有良好的表单政策我建议您查看POST/Redirect/GET policy