You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 3表单提交时下拉选择框必填错误不显示求助

问题描述

我跟着YouTube教程制作CodeIgniter高校管理系统,在WAMP服务器上提交表单时遇到问题:空表单提交时,gender和role_id这两个下拉选择框的必填验证错误无法显示。已检查表单输入的name属性与数据库表字段匹配,但问题仍存在。

控制器代码(welcome.php)

defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

    /**
     * Index Page for this controller.
     *
     * Maps to the following URL
     *      http://example.com/index.php/welcome
     *  - or -
     *      http://example.com/index.php/welcome/index
     *  - or -
     * Since this controller is set as the default controller in
     * config/routes.php, it's displayed at http://example.com/
     *
     * So any other public methods not prefixed with an underscore will
     * map to /index.php/welcome/<method_name>
     * @see https://codeigniter.com/user_guide/general/urls.html
     */
    
    public function index()
    {   
        //$this->load->helper('url');
        $this->load->view('home');
        
    }
    
    public function adminRegister()
    {
        $this->load->model('queries');
        $roles = $this->queries->getRoles();
        // print_r($roles);
        // exit();
        $this->load->view('register',['roles'=>$roles]);
    }
    
    public function adminLogin()
    {
        echo 'Login';
    }
    public function adminSignup()
    {
        //echo 'Registered succesfully';
        
        $this->form_validation->set_rules('username','Username','required');
        $this->form_validation->set_rules('email','Email','required');
        $this->form_validation->set_rules('gender','Gender','required');
        $this->form_validation->set_rules('role_id','Role','required');
        $this->form_validation->set_rules('password','Password','required');
        $this->form_validation->set_rules('confpwd','Password Again','required');
        $this->form_validation->set_error_delimiters('<div class="text-danger">','</div>');
        
        if($this->form_validation->run()){
            echo 'validation passed';
        }else{
            //echo 'validation error';
            echo validation_errors();
        }
    }
}

视图代码(register.php)

<?php include('inc/header.php');?>
  <div class="container mt-2">
   <?php  echo form_open('welcome/adminSignup',['class'=>'form-hoizontal']);?>
       <h3 class="text-center display-4">ADMIN REGISTER</h3>
       <hr/>
    <div class="row">
    
       <div class="col-md-6">
       
           <div class="form-group">
             <div class="row">
                <div class="col-md-3">
                  <label for="username" class="mt-2">User name:</label>
                </div>
                 <div class="col-md-9">
                   <!-- <input type="text" class="form-control" placeholder="User name" id="username"> -->
                   <?php 
                   $data = array(
                    'type'  => 'text',
                    'name'  => 'username',
                    'placeholder' => 'Enter Username',
                    'class' => 'form-control'
                       );
                   echo form_input($data); ?>
                </div>
              </div>
            </div>  
            
         </div>
       
       <div class="col-md-6">
          <?php echo form_error('username','<div class="text-danger">','</div>');?>
       </div>
       
    </div><!--row-->
    
    <div class="row">
    
       <div class="col-md-6">
       
              <div class="form-group">
              <div class="row mt-3">
                <div class="col-md-3">
                   <label for="email" class="mt-2">Email address:</label>
                </div>
                 <div class="col-md-9">
                    <!-- <input type="email" class="form-control" placeholder="Enter email" id="email"> -->
                     <?php 
                   $data = array(
                    'type'  => 'email',
                    'name'  => 'email',
                    'placeholder' => 'Enter Email',
                    'class' => 'form-control'
                       );
                   echo form_input($data); ?>
                 </div>
               </div>
            </div>  
            
         </div>
       
       <div class="col-md-6">
          <?php echo form_error('email','<div class="text-danger">','</div>');?>
       </div>
       
    </div><!--row-->
    
    
    <div class="row">
    
       <div class="col-md-6">
       
                 <div class="form-group">
                  <div class="row mt-3">
                    <div class="col-md-3">
                       <label for="gender" class="mt-2">Gender:</label>
                    </div>
                     <div class="col-md-9">
                        <!-- <input type="email" class="form-control" placeholder="Enter email" id="email"> -->
                         <select class="form-control" name="gender">
                            <option>Select</option>
                            <option>Male</option>
                            <option>Female</option>
                            
                        </select>
                    </div>
                  </div>
              </div>
            
         </div>
       
       <div class="col-md-6">
          <?php echo form_error('gender','<div class="text-danger">','</div>');?>
       </div>
       
    </div><!--row-->
    
    <div class="row">
    
       <div class="col-md-6">
       
           <div class="form-group">
              <div class="row mt-3">
                <div class="col-md-3">
                   <label for="email" class="mt-2">Role:</label>
                </div>
                 <div class="col-md-9">
                    <select class="form-control" name="role_id">
                    
                        <option>Select</option>
                    <?php if(count($roles)) { ?>
                        <?php foreach ($roles as $role){?>
                        <option><?php echo $role->rolename;?></option>
                        <?php }
                        } ?>
                    </select>
                </div>
              </div>
          </div> 
            
         </div>
       
       <div class="col-md-6">
           <?php echo form_error('role_id','<div class="text-danger">','</div>');?>
       </div>
       
    </div><!--row-->
    
    <div class="row">
    
       <div class="col-md-6">
       
            <div class="form-group">  
              <div class="row mt-3">
                <div class="col-md-3">
                  <label for="password" class="mt-2">Password:</label>
                </div>
                 <div class="col-md-9">
                   <!-- <input type="password" class="form-control" placeholder="Enter password" id="password"> -->
                    <?php 
                   $data = array(
                    'type'  => 'password',
                    'name'  => 'password',
                    'placeholder' => 'Enter Password',
                    'class' => 'form-control'
                       );
                   echo form_input($data); ?>
                </div>
              </div>
           </div>
            
         </div>
       
       <div class="col-md-6">
          <?php echo form_error('password','<div class="text-danger">','</div>');?>
       </div>
       
    </div><!--row-->
    
    <div class="row">
    
       <div class="col-md-6">
       
            <div class="form-group">  
              <div class="row mt-3">
                <div class="col-md-3">
                  <label for="password" class="mt-2">Password Again:</label>
                </div>
                 <div class="col-md-9">
                   <!-- <input type="password" class="form-control" placeholder="Enter password" id="password"> -->
                    <?php 
                   $data = array(
                    'type'  => 'password',
                    'name'  => 'confpwd',
                    'placeholder' => 'Enter Password Again',
                    'class' => 'form-control'
                       );
                   echo form_input($data); ?>
                </div>
              </div>
           </div>
            
         </div>
       
       <div class="col-md-6">
           <?php echo form_error('confpwd','<div class="text-danger">','</div>');?>
       </div>
       
    </div><!--row-->
    
    <div class="row">
     <div class="col-md-6">
            <!--  <button type="submit" class="btn btn-dark float-right">Register</button> -->
           <div class="float-right">
             <?php echo form_submit('Register', 'Register',"class='btn btn-dark'"); ?>
           <?php echo anchor('welcome','GO BACK',['class'=>'btn  btn-warning']);?>
           </div>
       </div>
       
    </div>
    
    
    <?php echo form_close(); ?>
  </div>
<?php include('inc/footer.php');?>
解决方案

问题根源在于下拉选择框的默认选项:默认的<option>Select</option>会提交文本内容Select,CodeIgniter的required规则会判定该字段已有值,因此不会触发验证错误。

修改步骤:

  1. 修改gender下拉框:给默认选项添加value="",未选择时提交空值:
<select class="form-control" name="gender">
    <option value="">Select</option>
    <option>Male</option>
    <option>Female</option>
</select>
  1. 修改role_id下拉框:同样给默认选项添加value="":
<select class="form-control" name="role_id">
    <option value="">Select</option>
<?php if(count($roles)) { ?>
    <?php foreach ($roles as $role){?>
    <option><?php echo $role->rolename;?></option>
    <?php }
    } ?>
</select>
  1. 可选优化:如果role_id需要提交角色ID而非名称,需修改选项的value属性关联角色ID字段(如$role->id):
<option value="<?php echo $role->id;?>"><?php echo $role->rolename;?></option>

修改后,未选择下拉框选项提交表单时,gender和role_id字段值为空,required验证规则会生效并显示错误提示。

内容的提问来源于stack exchange,提问作者Sash_007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:05:30