2010-04-15 96 views
1

我有一个小问题,我试图捕获两个按钮的输入,一个是,一个是数据库,但由于某种原因,数据库不会总是显示按钮被点击的价值,它只是显示空白。IE8及以下<input type =“image”> value work around

<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">形式投入的价值属性的代码。

我怎样才能在所有浏览器中正常工作? jQuery或Javascript可能?

+1

你能告诉我们你的代码吗?像表单字段这样基本的东西应该适用于今天使用的几乎所有浏览器。 – Joey 2010-04-15 13:06:56

+0

你能详细说明这个问题吗?您可能会显示您的实现HTML部分。 – Kangkan 2010-04-15 13:07:52

+0

当然,我会很快编辑代码。 – Odyss3us 2010-04-15 13:11:00

回答

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 s表示可能无法得到解析两个不同的名字:

<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或参数化查询交朋友。

+0

所以我会寻找类似于POST _ ['foo.bar.x']? 或者我误解了这种情况? – Odyss3us 2010-04-15 13:16:11

+0

是的,如果一个'''被点击,你会在所有浏览器中得到一个'something.x'参数并带有一个数值。 – bobince 2010-04-15 13:19:25

+1

如果你的PHP需要'$ _POST [foo.bar_x]'或者' $ _POST [foo_bar_x]'。PHP is odd。 – Quentin 2010-04-15 13:22:23

2

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

0

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

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

你需要做的是先将值复制到一些隐藏的输入。

+0

我该怎么做呢? – Odyss3us 2010-04-15 14:14:27

相关问题