【问题标题】:CakePHP: Prevent GET form fields in URLCakePHP:防止在 URL 中获取表单字段
【发布时间】:2009-12-22 23:17:49
【问题描述】:

我有一个带有'type'=>'get' 的CakePHP 搜索表单。基本上,表单中的元素之一是图像类型的提交按钮。当表单发布时,在 URL 中我总是得到图像提交按钮的这些 x & y 坐标:

http://site.com/controller/action?x=22&y=36&query=hello

有什么方法可以防止坐标出现在 URL 中?原因是其他人可以使用相同的 URL 来执行相同的搜索,而链接中没有那些不直观的东西。

谢谢!

【问题讨论】:

  • 将按钮移出表单,并在其上粘贴javascript以触发表单提交。
  • 我在尝试访问 $_POST 变量时也得到了这些“x”和“y”坐标。我希望我的表单提交给外部表单处理器,我们将其用作客户登录和下载带有注册的 CSV 文件的集中位置。是他们吗?
  • x 和 y 坐标是当您使用图像类型的提交按钮时。要么忽略它们,要么将提交按钮类型更改为 type="submit"。

标签: php cakephp get form-helpers


【解决方案1】:

您可以在按钮上使用一些 javascript:

document.getElementById('myImageButton').onclick = function() {
    this.form.submit();
    return false;
};

或者,在您的控制器中的 beforeFilter 函数中,您可以检查是否存在不需要的变量,将它们删除并重定向到漂亮的 URL。这确实意味着将发出 2 个 HTTP 请求。

【讨论】:

  • 嗯,我害怕这个 HTTP 请求重复。好吧,我想这是唯一剩下的解决方案。谢谢!
  • 你试过javascript解决方案了吗?
【解决方案2】:

听起来你正在寻找Post/Redirect/Get

以下是在 CakePHP 中执行此操作的两个示例:

POST 重定向到GET 请求的优点是:

  1. 用户没有收到“您要重新提交吗?”刷新时的对话框
  2. 可以将生成的页面/查询添加为书签
  3. 您可以利用 CakePHP 的内置 SEF 路由,因此您可以使用 /search/contact 代替带有 /search?q=contact 的 URL

【讨论】:

    【解决方案3】:

    不要使用submit辅助函数,而是使用button函数并设置按钮类型来提交。

    echo $this->Form->**button**($this->Html->image('header_search_icon.png'), array(**'type'=>'submit'**));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多