Как проверить форму Checkbox в Codeigniter и повторно заполнить галочкой - PullRequest
2 голосов
/ 20 ноября 2011

Очевидно, у меня есть 2 проблемы.

  1. Когда я отправляю форму флажка, которая представляет собой значение массива и не проверенную форму, она не показывает ошибку проверки, например, «это поле обязательно для заполнения». Это показывает ошибку, когда я проверяю один из них. Обычно это должно было показать мне, хотя я ничего не проверяю в форме и просто нажимаю «отправить».

  2. Как я могу снова установить флажок, если отмечен, когда я отправляю, как проверено? Думайте как set_value. В set_value он заполняет предыдущие данные. При этом я хочу, чтобы он автоматически проверялся при отправке.

Мой контроллер

function preferences() {
    $user = $this->ion_auth->user()->row();
    $data['first_name'] = $user->first_name;
    $data['last_name'] = $user->last_name;
    $data['user_id'] = $user->id;
    $data['address'] = $this->main_model->office_zip_match($user->zipcode);

    $this->form_validation->set_rules('days[]', 'Days', 'required');
    $this->form_validation->set_rules('contact[]', 'Contact', 'required');

    if ($this->form_validation->run() == true) {
        echo print_r($this->input->post());
    } else {
        $this->load->view('auth/preferences', $data);
    }
}

Мой взгляд:

<div>Days to Deliver</div>
<?php echo form_open('signup/preferences'); ?>
<input type="checkbox" name="days[]" value="monday" id="days" /> Monday<br />
<input type="checkbox" name="days[]" value="tuesday" id="days" /> Tuesday<br />
<input type="checkbox" name="days[]" value="wednesday" id="days" /> Wednesday<br />
<input type="checkbox" name="days[]" value="thursday" id="days" /> Thursday<br />
<input type="checkbox" name="days[]" value="friday" id="days" /> Friday<br />
<div>How would you like us to contact you? (When package arrives / for all other issues</div>
<input type="checkbox" name="contact[]" value="email" id="contact" /> Email<br />
<input type="checkbox" name="contact[]" value="text" id="contact" /> Text<br />
<input type="checkbox" name="contact[]" value="cell" id="contact" /> Cell<br />
<div><input type="submit" value="Send" /></div>
<?php echo form_close(); ?>
<?php echo validation_errors(); ?>

Ответы [ 4 ]

1 голос
/ 21 ноября 2011

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

Во-вторых, используйте if для установки checked = "checked" .

$ my_option_values ​​ - это хеш-массив опций флажков.

<input type="checkbox" name="my_option[]" value="blah" 
<?php ( in_array('blah', $_POST['my_option']) || in_array('blah', $my_option_values) ) ? print 'checked="checked"' : FALSE; ?> />

Если хотите, сделайте это функцией и поместите в вспомогательный файл.

1 голос
/ 20 ноября 2011

Проблема в том, что браузеры, по спецификации, не должны отправлять значения для непроверенных флажков.Флажки по определению являются необязательными полями.Каким должно быть значение, если оно не проверено?Ноль?0?HTML не имеет встроенного обработчика для этого использования флажков.

Но есть некоторые обходные пути.Мне нравится использовать javascript для включения скрытого поля с желаемым значением «unchecked».Например (с jQuery):

<input type="checkbox" name="foo" value="1" />
<script type="text/javascript">
$(function() {
    $('input[name="foo"]').change(function() {
        var $t = $(this);
        if ( !$t.attr('checked'))
        {
            $t.after('<input type="hidden" name="foo" value="0" />');
        }
        else
        {
            $t.next().remove();
        }
    });
});
</script>

Это не столько проблема CI, сколько проблема "html form interface".

0 голосов
/ 28 октября 2013

Вы можете использовать:

<input type="checkbox" name="mailing_address" value="0" <?php echo set_checkbox('mailing_address', '0'); ?> />

В контроллере вы можете проверить это:

var_dump($this->input->post('mailing_address'));
0 голосов
/ 11 мая 2013

Поскольку вы используете помощник по форме, вы можете использовать следующий способ.

<?php foreach (array('monday', 'tuesday', 'wednesday', 'thursday', 'friday') AS $day) : ?>
<?php echo form_checkbox('days[]', $day, in_array($day, (array)$this->input->post('days'))) . ucfirst($day) ?><br />
<?php endforeach ?>

<?php foreach (array('email', 'text', 'cell') AS $contact) : ?>
<?php echo form_checkbox('contact[]', $contact, in_array($contact, (array)$this->input->post('contact'))) . ucfirst($contact) ?><br />
<?php endforeach ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...