Кнопки отправки изображения в Codeigniter - что мне не хватает? - PullRequest
3 голосов
/ 02 июня 2011

У меня есть следующий код Codeigniter для отображения формы с двумя кнопками отправки изображений.Мне нужно знать, какая кнопка была нажата пользователем.Обычно я просто ссылаюсь на имя или значение, которое передается, но ничего не передается от этих кнопок.Все остальные поля / текстовые поля и т. Д. В форме проходят через ok, но ничего из этих кнопок ....

.... что мне не хватает?Я размышлял об этом в течение нескольких часов и никакой помощи из сети тоже!

Та

<? 
            $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 ]

2 голосов
/ 02 июня 2011

Проблема не связана с Codeigniter, но связана с 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. Вот пример var_dump() из вашей формы с использованием вашего точного кода, нажав кнопку 1 (но без фактического доступного изображения):

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 или <button type="submit">. Последний позволяет использовать HTML и с ним легче работать, но остерегайтесь IE6 ...

При <button> IE6 будет отправлять фактический HTML-контент в качестве значения сообщения вместо value! К сожалению, я не шучу. Однако вам нужно только проверить, является ли он isset(), поэтому на самом деле не полагайтесь на value, если вы используете этот подход. Надеюсь, это прояснит для вас.

2 голосов
/ 02 июня 2011

У меня была похожая проблема (хотя с Zend)!Дело в том, что браузер не передает «значение», когда тип ввода = изображение.чтобы проверить, какая кнопка была нажата, вы все равно могли бы сослаться на кнопку, добавив «_x» или «_y» к имени кнопки (например, «Button2_x») и проверив массив $ _Post по этому.вам нужно посмотреть здесь .Такая проблема объяснена на форуме Codeigniter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...