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

如何实现表单公司名称唯一性校验,重复提交时触发报错?

实现公司名称唯一的表单校验(基于你的CodeIgniter环境)

要解决重复插入同名公司的问题,得从后端校验、数据库约束、前端体验三个层面入手,既保证数据绝对唯一,又提升用户体验:

1. 后端核心校验(必须做,防止绕过前端)

在你的Instituut控制器的Add_instituut方法里,先检查提交的名称是否已存在,再执行插入:

public function Add_instituut() {
    // 获取表单提交的公司名称(替换成你实际的字段名)
    $instituut_name = $this->input->post('instituut_name');

    // 查询数据库是否存在同名公司
    $this->db->where('name', $instituut_name); // 替换为表中存储名称的字段名
    $existing_instituut = $this->db->get('your_instituut_table')->row(); // 替换为你的公司表名

    if ($existing_instituut) {
        // 存储错误提示,回显到表单页面
        $this->session->set_flashdata('error', '该公司名称已存在,请更换其他名称!');
        // 重定向回表单页面(替换为你的表单路由)
        redirect('index.php/Instituut/your_form_view');
    } else {
        // 名称唯一,执行插入逻辑
        $insert_data = [
            'name' => $instituut_name,
            // 其他表单字段...
        ];
        $this->db->insert('your_instituut_table', $insert_data);
        
        $this->session->set_flashdata('success', '公司信息添加成功!');
        redirect('index.php/Instituut/your_success_page'); // 替换为成功页面路由
    }
}

2. 数据库层面加唯一索引(关键!防并发)

仅靠后端校验可能因为并发请求出现漏判,所以直接给表的名称字段加唯一索引,让数据库层面拦截重复数据:

执行以下SQL语句(替换成你的表名和字段名):

ALTER TABLE your_instituut_table ADD UNIQUE INDEX idx_unique_instituut_name (name);

3. 前端实时校验(提升用户体验)

可以在用户输入完名称后,实时检查是否存在,不用等到提交才提示:

第一步:修改视图表单

给名称输入框加ID,并添加错误提示容器:

<!-- 在表单上方先显示后端返回的错误 -->
<?php if($this->session->flashdata('error')): ?>
    <div style="color: red; text-align: center; margin-bottom: 10px;">
        <?php echo $this->session->flashdata('error'); ?>
    </div>
<?php endif; ?>

<center> <h3> Instituut toevoegen </h3> </center> <br>
<?php echo form_open('index.php/Instituut/Add_instituut'); ?>

<!-- 公司名称输入框 -->
<label for="instituut_name">公司名称:</label>
<input type="text" name="instituut_name" id="instituut_name" required>
<!-- 实时错误提示 -->
<div id="name-error" style="color: red; margin-top: 5px; display: none;"></div>

<!-- 其他表单字段... -->

<button type="submit">提交</button>
<?php echo form_close(); ?>

第二步:添加AJAX实时检查逻辑

用jQuery实现(如果用原生JS也可以,逻辑类似):

$(document).ready(function() {
    // 当输入框失去焦点时触发检查
    $('#instituut_name').blur(function() {
        var inputName = $(this).val().trim();
        if (inputName) {
            $.ajax({
                url: 'index.php/Instituut/check_instituut_name', // 新增控制器方法
                type: 'POST',
                data: {name: inputName},
                success: function(res) {
                    if (res === 'exists') {
                        $('#name-error').text('该公司名称已存在!').show();
                        // 禁用提交按钮,防止重复提交
                        $('button[type="submit"]').prop('disabled', true);
                    } else {
                        $('#name-error').hide();
                        $('button[type="submit"]').prop('disabled', false);
                    }
                }
            });
        }
    });
});

第三步:新增控制器校验方法

在Instituut控制器里添加check_instituut_name方法,处理AJAX请求:

public function check_instituut_name() {
    $name = $this->input->post('name');
    $this->db->where('name', $name);
    $exists = $this->db->get('your_instituut_table')->row();
    
    echo $exists ? 'exists' : 'available';
}

这样一套下来,既能保证数据绝对唯一,又能给用户及时的反馈,避免无效提交~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:45:12