2011-06-02 110 views
3

我有下面的Codeigniter代碼來顯示一個窗體,有兩個圖像提交按鈕。我需要知道用戶點擊了哪個按鈕。通常,我只是引用傳遞的名稱或值,但沒有任何內容從這些按鈕傳遞。所有其他領域/文本框等..形式通過確定,但沒有從這些按鈕....圖片在Codeigniter中提交按鈕 - 我錯過了什麼?

....我錯過了什麼?我一直在思考這個問題幾個小時,也沒有網絡幫助!

<? 
      $attributes = array('id' => 'formname','name' => 'formname'); 
      echo form_open('processform',$attributes); 
      $btn_input = array(
       'subtype' => '' 
      ); 
      echo form_hidden($btn_input); 

      $btn_search = array(
       'type' => 'image', 
       'src'  => '/graphics/button1.gif', 
       'id'  => 'button1', 
       'name' => 'button1', 
       'value' => 'button1' 
      ); 
      ?> 
      <div id='1stbutton' style='text-align: center'> 
       <? echo form_input($btn_search);?> 
      </div> 

      <? 
      $btn_search = array(
       'type' => 'image', 
       'src'  => '/graphics/button2.gif', 
       'id'  => 'button2', 
       'name' => 'button2', 
       'value' => 'button2' 
      ); 
      ?> 
      <div id='2ndbutton' style='text-align: center'> 
       <? echo form_input($btn_search);?> 
      </div> 

      <? echo form_close(); ?> 
+1

如果您檢查源代碼,每個按鈕的「name」值都包含什麼? – 2011-06-02 15:35:25

+0

var_dump($ _ POST)返回什麼? – luca 2011-06-02 15:36:28

回答

2

我有一個類似的問題(與Zend雖然)! 事情是,當輸入類型=圖像時,瀏覽器不會傳遞「值」。 檢查點擊按鈕,你仍然可以通過添加「_x」或「_y」到你的按鈕名稱(例如'Button2_x')並檢查$ _Post數組來對此進行引用。

if(isset($_POST['button2_x'])) 
{ 
    //button2 was clicked! 
} 
else if(isset($_POST['button1_x'])) 
{ 
    //button1 was clicked go on! 
} 

如果你需要看一下here .Same問題解釋笨論壇

+0

謝謝盧卡,我會試試看! – TIW 2011-06-03 11:28:20

+0

是的,讓我們知道 – luca 2011-06-03 12:18:37

+0

一切運作良好!謝謝luca – TIW 2011-06-05 00:22:25

2

的問題不是笨相關,但相關的HTML。 「圖像」類型輸入將提交點擊它的位置的x和y座標,如果沒有點擊則輸入「0」。 value將不會被提交。

http://www.w3.org/TR/html401/interact/forms.html

當指針設備被用於在圖像上單擊,提交表單和點擊座標傳遞到服務器。 x值以圖像左側的像素爲單位進行測量,y值以圖像頂部的像素爲單位進行測量。提交的數據包括name.x = x-value和name.y = y-value,其中「name」是name屬性的值,x-value和y-value分別是x和y座標值。

然而,這仍然會爲你工作作爲按鈕點擊$_POST數組中不會出現。下面是使用您確切的代碼按鈕1從形式的樣本var_dump()(但沒有提供實際的圖像):

array(3) { 
    ["subtype"]=> 
    string(0) "" 
    ["button1_x"]=> 
    string(1) "0" 
    ["button1_y"]=> 
    string(1) "0" 
} 

所以,這是一個有點hackish,但你完全可以做到這一點,檢查被點擊其中之一:

if (isset($_POST['button1_x'])) // Button 1 clicked 

老實說,我忘了這一點,直到我只是看着它,因爲我從來沒有使用image投入。您可能會考慮使用submit類型或<button type="submit">。後者允許HTML,是比較容易的工作 - 但IE6的提防...

隨着<button>,IE6將發送實際HTML內容的崗位價值,而不是value!不幸的是,我不是在開玩笑。但是,您只需要檢查它是否爲isset(),因此如果您使用此方法,實際上並不依賴value。希望這能爲你解決問題。

+0

Wesley,非常感謝 - 我沒有真正意識到價值沒有通過 - 但名稱似乎並沒有通過......儘管這可能是出於同樣的原因,我猜。我會去添加_x到名字!你提到了一個樣式化的提交按鈕,沒有這樣做 - 大概是它的CSS樣式? – TIW 2011-06-03 11:29:06

+0

是的,這是正確的,用CSS。還有另一種造型嗎? :)以防萬一你不確定:只有當你用PHP讀取時,你纔會在HTML中添加'_x'或'_y',你明白嗎?這絕對是不尋常的行爲。試試看,你會看到。是的,'

+0

謝謝韋斯利!這工作完美! – TIW 2011-06-05 00:22:09