如何在CodeIgniter中使用PHP显示表单字段?

时间:2016-11-24 10:01:48

标签: php html css codeigniter

我已经为我的表格选择了制造商的输入。

<div class="form-group">
    <label for="manufacturer">Manufacturer</label>
    <select id="manufacturerSelect" name="manufacturer" class="form-control">
        <option disabled selected value> -- select an manufacturer -- </option>
        <?php foreach ($manufacturers as $manufacturers_item): ?>
            <option value="<?=$manufacturers_item['id'];?>" <?php echo set_select('manufacturer',$manufacturers_item['id'], ( !empty($manufacturer) && $manufacturer == $manufacturers_item['id'] ? TRUE : FALSE )); ?> ><?=$manufacturers_item['name'];?></option>
        <?php endforeach; ?>
         <option disabled>──────────</option>
        <option value="24" <?php echo set_select('manufacturer','24', ( !empty($manufacturer) && $manufacturer == '24' ? TRUE : FALSE )); ?> >Other</option>
    </select>
    <?php echo form_error('manufacturer'); ?><br />
</div>

如果选中“other”(值== 24),则会询问其他输入:

$('body').on('change', '#manufacturerSelect', function() { 
    if ($(this).val() == 24) {
        $("#otherManufacturerSelect").removeClass('hidden');
    } else {
        $("#otherManufacturerSelect").addClass('hidden')
    }
});

和HTML:

<div id="otherManufacturerSelect"  class="form-group">
    <label for="otherManufacturer" >What is it then?</label>
    <input type="text" name="otherManufacturer" class="form-control">
    <?php echo form_error('otherManufacturer'); ?><br />
</div>

CSS:

.hidden {
    display: hidden;
}

现在,如果用户选择“其他”作为制造商,则显示添加输入。如果manufacturer == 24,则在服务器端添加其他制造商的表单验证规则。问题是每次用户从服务器获得响应时都会显示其他制造商输入。我可以将class="hidden"默认添加到其他制造商div,但如果表单验证没有运行,则其他制造商字段将不再显示给用户。

我需要的是PHP IF条件:

<div id="otherManufacturerSelect" <?php if(/*???*/):?>class="hidden"<?php endif; ?> class="form-group">

只有当制造商不是“其他”时,才会添加class="hidden"。但我无法想到严峻的条件。

任何帮助将不胜感激!

修改

控制器:

public function create()
{
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');

    $this->form_validation->set_rules('manufacturer', 'Manufacturer', 'required');
    if($this->input->post('manufacturer') == '24'){
        $this->form_validation->set_rules('otherManufacturer', 'Other manufacturer', 'required');
    }

    $data['manufacturers'] = $this->puzzles_model->getManufacturers();

    if ($this->form_validation->run() === FALSE)
    {
        $this->load->view('puzzles/create', $data);
    }
    else
    {
        /* do the upload, return upload errors or save in db*/
    }
}

1 个答案:

答案 0 :(得分:1)

在您的特定情况下,这将解决问题:

<div id="otherManufacturerSelect" class="form-group <?php if(isset($manufacturer) && $manufacturer !== '24') { echo 'hidden'; } ?> ">
    <label for="otherManufacturer" >What is it then?</label>
    <input type="text" name="otherManufacturer" class="form-control">
    <?php echo form_error('otherManufacturer'); ?><br />
</div>

然后你可以删除JS片段。附加表单将隐藏在服务器端(将设置class =“hidden”)。

我看到你在同一个模板中使用var $ manufacturer。我看不到你的控制器以及你如何传递变量但是你也可以使用$ _GET ['manufacturer']或$ _POST ['manufacturer'](取决于你的表单操作方法)而不是$ manufacturer。 注意:$ _GET ['manufacturer'],$ _POST ['manufacturer']和$ _REQUEST ['manufacturer']未经过清理输入。使用$ manufacturer时,我认为它已在您的控制器中进行了清理。