很明显,我有两个问题。
当我提交一个复选框表格,它是一个数组值和非cheched表单时,它不会显示验证错误,例如“此字段是必需的”。当我检查其中一个时,它显示错误。通常它应该显示我,即使我没有检查表格上的任何内容,只需按提交。
当我提交为已选中时,如何将复选框重新填充为已选中。像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(); ?>
答案 0 :(得分:1)
问题在于,按规范,浏览器不应为未选中的复选框发送值。根据定义,复选框是可选字段。如果未经检查,该值应该是多少?空值? 0? HTML没有使用复选框的内置处理程序。
但是,有一些解决方法。我喜欢使用javascript来启用隐藏字段,其中包含我想要的“未选中”值。例如(使用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表单界面”问题。
答案 1 :(得分:1)
首先;使用自定义callback验证您的复选框,您可以执行任何想要验证内容的内容。
其次;使用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; ?> />
如果需要,请将其设为函数并将其放在帮助文件中。
答案 2 :(得分:0)
当您使用表单助手时,您可以使用以下方式。
<?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 ?>
答案 3 :(得分:0)
您可以使用:
<input type="checkbox" name="mailing_address" value="0" <?php echo set_checkbox('mailing_address', '0'); ?> />
在Controller中,您可以查看它:
var_dump($this->input->post('mailing_address'));