2010-04-15 66 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

相關問題