Повторное заполнение флажков в Codeigniter после неудачной проверки формы - PullRequest
8 голосов
/ 14 июня 2011

У меня проблема с повторным заполнением набора флажков после неудачной проверки формы, возвращающей пользователя обратно в ту же форму.Выпадающие меню и текстовые вводы могут быть повторно заполнены, но не флажки!

Вот фрагмент кода для флажков:

        <td>
            <?php echo form_checkbox('ambience[]', 'casual', set_checkbox('ambience[]', 'casual')); ?> Casual <br />
            <?php echo form_checkbox('ambience[]', 'romantic', set_checkbox('ambience[]', 'romantic')); ?> Romantic <br />
            <?php echo form_checkbox('ambience[]', 'outdoor', set_checkbox('ambience[]')); ?> Outdoor / Alfresco <br />
            <?php echo form_checkbox('ambience[]', 'trendy', set_checkbox('ambience[]')); ?> Hip & Trendy <br />
            <?php echo form_checkbox('ambience[]', 'vibrant', set_checkbox('ambience[]')); ?> Vibrant <br />
            <?php echo form_checkbox('ambience[]', 'up_scale', set_checkbox('ambience[]')); ?> Upscale <br />
        </td>

Фрагмент кода для ввода текста, который успешно повторно заполнен:1006 *

<?php echo form_dropdown('price_range', $options, set_value('price_range')); ?>

Есть идеи?Я действительно запутался, почему set_checkbox не работает так, как рекламируется.

Ответы [ 8 ]

22 голосов
/ 27 октября 2011

Для правильной работы set_checkbox необходимо использовать фактическое правило проверки для этого элемента. Я столкнулся с этой проблемой и не смог получить значение для повторной отправки, пока я не включил:

$this->form_validation->set_rules('checkbox_name', 'checkbox_title', 'trim');

Тогда все работало идеально.

12 голосов
/ 14 июня 2011

Вы set_checkbox звонки не так. Когда вы используете массив типа «ambience []» в form_checkbox, вы не хотите включать квадратные скобки ([]) в ваш вызов set_checkbox. Другая проблема заключается в том, что для set_checkbox требуется второй параметр, который вы включили только в первые 2 флажка.

set_checkbox всегда должен быть таким:

set_checkbox('ambience', 'value');

Где 'значение' является вторым параметром вызова form_checkbox. Как это:

form_checkbox('ambience[]', 'value', set_checkbox('ambience', 'value'));
4 голосов
/ 14 августа 2013

Вот рабочий пример.Необходимо указать имя массива в скобках [] в каждом из $this->form_validation->set_rules(), form_checkbox() и set_checkbox().

В контроллере:

    $this->load->library('form_validation');

    $this->form_validation->set_rules('set_reminder_days[]', 'Reminder Day', 'trim');

    if( $this->form_validation->run() == FALSE ) //Field validation failed.
    {
        //form validation errors will show up automatically
    }
    else //Validation success.
    {
        //This is an array of all checked checkboxes
        $reminder_days = $this->input->post('set_reminder_days');
    }

По мнению:

    $day_options = array(
        'S' => 'Sunday',
        'M' => 'Monday',
        'T' => 'Tuesday',
        'W' => 'Wednesday',
        'Th' => 'Thursday',
        'F' => 'Friday',
        'Sa' => 'Saturday'
    );

    foreach( $day_options as $key => $day_option ) {
        echo form_checkbox('set_reminder_days[]', $key, set_checkbox('set_reminder_days[]', $key), 'class="form-checkbox"');
    }
4 голосов
/ 14 мая 2012

На самом деле я обнаружил, что это работает только в том случае, если вы используете вот так:

form_checkbox('ambience[]', 'value', set_checkbox('ambience[]', 'value'));

Вам нужны квадратные скобки в имени для его правильной работы.

0 голосов
/ 28 января 2017

Я перепробовал все решения, но ни одно из них не сработало. Поэтому я собрал все данные, упаковал их в массив, а затем использовал цикл, чтобы проверить, соответствуют ли значения в массиве значению выбранного поля, если это так, измените проверенный атрибут на зарегистрированный.

Вот HTML-код:

<div class="col-sm-10 tags">
    <label>
        <input class="tags" type="checkbox" name="tags[]" value="love" >Love                            
    </label>
    <label>
        <input class="tags" type="checkbox" name="tags[]" value="God" >God
    </label>
    <label>
        <input class="tags" type="checkbox" name="tags[]" value="Reality" >Reality
    </label>
    <label>
        <input class="tags" type="checkbox" name="tags[]" value="Entrepreneurship">Entrepreneurship
    </label>
</div>

Вот код JavaScript в функции

(function(){
    var tag_string = '<?php echo $_post['tags']; ?>',
        tags = tag_string.split(', ');
    boxes = document.getElementsByClassName('tags');
    for(i = 0; i< boxes.length;i++ ){
        if(tags.toString().includes(boxes[i].value)){
            boxes[i].checked = "checked";
        }
    }
})();
0 голосов
/ 15 февраля 2015

Это не использовать помощник формы.Я пытаюсь использовать этот код.

<input type="checkbox" name="tes_display" value="1" <?php echo set_checkbox('tes_display', '1', FALSE); ?> /> 
0 голосов
/ 20 февраля 2014

Я понял, что set_checkbox принимает 3 параметра:

 set_checkbox(string $checkboxname, string $value, boolean $isChecked);

Например:

 echo form_checkbox('mycbx[]',
                    $item['id'],
                    set_checkbox('mycbx[]', $item['id'], false)
      );

или так:

$checkbox = array(
    'name'        => 'mycbx[]',
    'value'       => $item['id'],
    'checked'     => set_checkbox('mycbx[]', $item['id'], false)
);
echo form_checkbox($checkbox);
0 голосов
/ 27 июня 2013
function set_checkbox_array($field, $value)
{
    $arr = isset($_POST[$field]) ? $_POST[$field] : FALSE;
    return ($arr !== FALSE && is_array($arr) && in_array($value, $arr)) ? 'checked="checked"' : '';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...