2011-06-02 114 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