如何实现表单公司名称唯一性校验,重复提交时触发报错?
实现公司名称唯一的表单校验(基于你的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
相关产品推荐
相关产品推荐

