$ _POST变量在Chrome中检测到,但在Firefox中未检测到

时间:2012-09-29 07:53:58

标签: php html forms post

我在表单中使用2个图像来整理数据库中的查询结果。表单使用POST方法提交。当我点击第一个图像时,查询结果必须按升序排序,当我点击第二个图像时,结果必须按降序排序。 这是表单的代码:

 <form name="" action="" method="post">
   <input type="hidden" name="typep" value="price" />
   <input type="image"  name="sort"  value="asc"  src="images/asc-ar.png" />
   <input type="image"  name="sort"  value="desc" src="images/dsc-ar.png" />
 </form>

现在这是检查$_REQUEST['sort']变量是否已设置的代码,因此是否需要排序。

if ($_REQUEST['sort'] != "")
{
    $sort  = $_REQUEST['sort'];
    $typep = $_REQUEST['typep'];
   //query to be executed depending on values of $sort and $typep
}

Firefox确实检测到$_REQUEST['typep']变量,但未检测到$_REQUEST['sort']变量。 这虽然在Chrome中完美运行。当我在Firefox中测试网站时,它没有检测到$_REQUEST['sort']变量,因此if条件的计算结果为false,搜索结果也没有排序。

3 个答案:

答案 0 :(得分:1)

显然,在HTML5标准开发的某些时候,有人认为input type="image"的实际价值并不重要,他们决定不要求浏览器以任何方式提交它:link to specification

不幸的是,似乎Firefox不仅严格遵守规范。 A comment to a bug submitted to the Firefox developers表示在Opera和Internet Explorer中也会出现此行为。

因此,您可以通过检查随表单提交的.x / .y坐标来测试图片是否已被点击,但您无法确定哪两个图片已被点击,因为您没有在不同的浏览器中可靠地获得它的价值,并且仍然通过该值的浏览器也可能遵循规范并在将来的某个时候放弃它。您需要以不同的方式命名两个按钮。

答案 1 :(得分:0)

实际上Firefox只会发送点击的坐标。如果您想使用input type="image",可以使用:

<input type="submit" name="sort" value="desc"><img src="..." /></input>

<input type="submit" name="sort" value="asc"><img src="..." /></input>

或者你可以使用css input type="submit"input type="image"相当于向按钮提供背景图片,因此请改用它。

答案 2 :(得分:0)

如果表单中有多个具有相同名称的输入控件,它们将在PHP中显示为数组,而不是单个值。

什么是

var_dump($_POST)

var_dump($_REQUEST)

显示?