IE8及以下<input type =“image”/>值可以解决

时间:2010-04-15 13:03:33

标签: javascript jquery mysql html

我有一个小问题,我试图捕获两个按钮的输入,一个是,一个没有,进入数据库但由于某种原因数据库并不总是显示点击按钮的值,它只是显示空白。

<form  action="refer.php" method="post" id="formID" >
  <div class="prompt_container" style="float: left;">
    <span class="prompt_item"><input type="image" src="images/yes.jpg"
      alt="submit" value="yes" onclick="this.disabled=true,this.form.submit();"
      /></span>
    <input type="hidden" name="refer" value="yes">
  </div>
</form>

<form action="thank_you.php" method="post" id="formID" >
  <div class="prompt_container" style="float: right;">
    <span class="prompt_item"><input type="image" src="images/no.jpg"
      alt="submit" value="no" onclick="this.disabled=true,this.form.submit();"
      /></span>
    <input type="hidden" name="refer" value="no" >
  </div>
</form>

以下是将其全部写入数据库的代码

session_start();

$name = $_SESSION['name'];

$tel = $_SESSION['tel'];
$email = $_SESSION['email'];
$refer = $_POST['refer'];
$curDate = date("Y-m-d");

mysql_connect ("host", "user", "pass") or die ('Error: ' . mysql_error());
mysql_select_db ("database");

$query = "INSERT INTO Table (id, name, tel, email, refered, date)
  VALUES('NULL', '".$name."', '".$tel."', '".$email."', '".$refer."', '".$curDate."')";

mysql_query($query) or die (mysql_error()); 

显然,低于IE8的任何内容都会忽略所有<input type="image">表单输入的value属性。

我怎样才能让它在所有浏览器中正常运行?可能是jQuery还是Javascript?

3 个答案:

答案 0 :(得分:3)

问题可能是在坐标上点击(1,2):

<input type="image" name="foo" value="bar"/>

IE将通过:

foo.x=1&foo.y=2

其他浏览器将通过的地方:

foo=bar&foo.x=1&foo.y=2

因此,要使图像输入跨浏览器工作,您需要嗅探name.x参数的存在,而不仅仅是name

如果您需要两个不同的图像按钮,这意味着它们需要有两个单独的名称,而不是依赖于可能无法解析的不同value

<input type="image" name="foo.bar"/>
<input type="image" name="foo.bof"/>

然后在服务器端检查是否存在参数foo.bar.xfoo.bof.x

[编辑:编辑]

<input type="image" value="yes"/>

这不起作用。如果没有name属性,image输入不是成功的控件,因此value将不会被传递,并且协调数据也可能无法传递。

<input type="hidden" name="refer" value="yes">

无论点击哪个image,都会提交两个隐藏的输入。 image输入的成功不会影响任何其他hidden元素的成功。

$query = "INSERT INTO Table (id, name, tel, email, refered, date) VALUES('NULL', '".$name."', '".$tel."', '".$email."', '".$refer."', '".$curDate."')";

那里有一些非常危险的SQL注入。您应该与mysql_real_escape_string或参数化查询结交朋友。

答案 1 :(得分:2)

为输入提供不同的名称,检查提交的数据中是否存在name.x

答案 2 :(得分:0)

我注意到您在提交表单之前禁用了输入。

你不能这样做,如果你想提交这些输入的值。禁用的输入未提交

您需要做的是首先将值复制到某些隐藏的输入。