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

CodeIgniter 4表单可验证HTML控件但无法提交的故障排查求助

问题:CodeIgniter 4 表单验证通过但无法提交

我用CodeIgniter 4框架开发了一个网站,其中某个页面的表单能正常触发HTML自带的required属性验证,但点击提交按钮后完全没有提交动作,试过各种方法都没定位到问题。

对应的表单代码如下:

<form method="post" id="feedbackForm">
    <div class="mb-2">
        <label class="form-label">Who you are?</label>
        <select name="category" class="form-control form-control-sm" required="">
            <option value="" selected="" disabled="">---- Select ----</option>
            <option value="Student">Student</option>
            <option value="Parent">Parent</option>
            <option value="Guest">Guest</option>
        </select>
    </div>
    <div class="mb-2">
        <label class="form-label">Your Name</label>
        <input type="text" name="name" class="form-control form-control-sm" required="">
    </div>
    <div class="mb-2">
        <label class="form-label">Roll No. (students only)</label>
        <input type="text" name="roll" class="form-control form-control-sm">
    </div>
    <div class="mb-2">
        <label class="form-label">Select Faculty</label>
        <select name="faculty" class="form-control form-control-sm" required="">
            <option value="" selected="" disabled="">---- Select ----</option>
            <option value="1">Faculty of Humanities</option>
            <option value="2">Faculty of Social Science</option>
            <option value="3">Faculty of Commerce</option>
            <option value="4">Faculty of Science</option>
            <option value="100">Not Applicable (For Parent/Guest)</option>
        </select>
    </div>
    <div class="row">
        <div class="col-md-6">
            <div class="mb-2">
                <label class="form-label">Mobile No.</label>
                <input type="text" name="mobile" class="form-control form-control-sm" required="">
            </div>
        </div>
        <div class="col-md-6">
            <div class="mb-4">
                <label class="form-label">Email Address</label>
                <input type="email" name="email" class="form-control form-control-sm" required="">
            </div>
        </div>
    </div>
    <button type="submit" value="submit" class="btn btn-sm">SUBMIT & GO NEXT</button>                       
</form>

可能的原因及解决方法:

  • 缺少CSRF令牌:CodeIgniter 4默认开启CSRF保护,表单未包含CSRF字段会被框架拦截。在表单内添加CSRF字段:

    <?= csrf_field() ?>
    

    或者手动添加隐藏域:

    <input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>">
    
  • 表单未指定action属性:虽然默认提交到当前URL,但显式指定action可避免路由规则影响:

    <form method="post" id="feedbackForm" action="<?= site_url('feedback/send') ?>">
    
  • JavaScript阻止提交:打开浏览器控制台(F12)查看是否有JS报错,比如绑定了表单submit事件的代码出错,导致默认提交行为被阻止。

  • 服务器端验证拦截:前端验证通过不代表服务器端验证通过。在控制器的send方法里添加调试代码,确认是否接收到POST数据:

    public function send()
    {
        if ($this->request->is('post')) {
            var_dump($this->request->getPost());
            exit;
            // 后续验证逻辑
        }
        return view('feedback/send');
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:45:55