Codeigniter中的图像提交按钮 - 我缺少什么?

时间:2011-06-02 15:29:44

标签: php codeigniter

我有以下Codeigniter代码来显示表单,带有两个图像提交按钮。我需要知道用户点击了哪个按钮。通常我只引用传递的名称或值,但没有从这些按钮传递任何内容。表单上的所有其他字段/文本框等..都通过了ok,但没有来自这些按钮......

....我错过了什么?我一直在思考这个问题几个小时,网上也没有帮助!

TA

<? 
            $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(); ?>

2 个答案:

答案 0 :(得分:2)

我遇到了类似的问题(尽管有Zend)! 问题是,当输入type = image时,浏览器不会传递“值”。 要检查哪个按钮被单击,您仍然可以通过在按钮名称(Ex'Button2_x')中添加“_x”或“_y”来引用该按钮,并检查$ _Post数组。

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

如果您需要查看here。相同的问题在Codeigniter论坛中解释

答案 1 :(得分:2)

问题与Codeigniter无关,但与HTML有关。 “图像”类型输入将提交单击位置的x和y坐标,如果未单击则输入“0”。 <{1}}将不会被提交。

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坐标值。 / p>

但是,这仍然适用于您,因为点击的 按钮不会显示在value数组中。以下是您的表单中的示例$_POST,使用您的确切代码点击按钮1(但没有可用的实际图片):

var_dump()

所以,它有点hackish,但你可以这样做来检查点击了哪一个:

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

老实说,在我查看之前,我已经忘记了这一点,因为我从不使用if (isset($_POST['button1_x'])) // Button 1 clicked 输入。您可以考虑使用样式化的image类型或submit。后者允许HTML并且更容易使用 - 但要注意IE6 ......

使用<button type="submit">,IE6会将实际HTML内容作为帖子值而不是<button>发送!不幸的是,我不是在开玩笑。但是,您只需检查它是否为value,因此如果您使用此方法,请不要真正依赖isset()。希望这能为你解决问题。