2009-12-22 81 views
3

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

http://site.com/controller/actionX = 22 & Y = 36 &查询=你好

有没有什么办法可以防止坐标从显示的网址呢?原因是其他人可以使用相同的URL执行相同的搜索,而不会在链接中看到不直观的内容。

谢谢!

+1

将按钮移出窗体,并在其上粘贴JavaScript以触发提交窗体。 – 2009-12-23 00:02:02

+0

当我试图访问$ _POST变量时,我得到了这些'x'和'y'坐标。我希望我的表单可以提交给外部表单处理器,我们将其用作客户端的集中位置来登录并下载带有注册的CSV文件。他们是谁? – 2011-09-10 19:17:48

+0

当您使用图像类型的提交按钮时,x和y坐标是。要么忽略它们,要么将提交按钮类型更改为type =“submit”。 – ash 2011-09-12 18:08:03

回答

3

你可以使用一些JavaScript上的按钮:在beforeFilter功能

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

或者,在你的控制器,你可以检查不需要的变量的存在,带他们出去,并重定向到漂亮的URL 。这确实意味着会有2个HTTP请求。

+0

嗯,我怕这个HTTP请求重复。那么,我想这是唯一的解决方案。谢谢! – ash 2009-12-23 02:21:44

+0

你尝试过javascript解决方案吗? – nickf 2009-12-23 02:22:26

+0

是的,这工作。谢谢! – ash 2009-12-23 03:40:38

1

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

下面是在CakePHP中这样做的两个例子:重定向POSTGET请求的

优点是:

  1. 用户不要没有你想要的提交?”对话框,如果他们刷新
  2. 结果页/查询可以书签
  3. 您可以利用CakePHP的内置SEF路由,所以不是用/search?q=contact网址,你可以得到/search/contact
0

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

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