PHP+AJAX提交项目表单时如何校验name字段重复并返回错误提示
完整实现方案
1. 后端PHP代码修改(save_project函数新增重复校验)
修改后的完整函数代码如下:
function save_project(){ extract($_POST); $data = ""; foreach($_POST as $k => $v){ if(!in_array($k, array('id','user_ids')) && !is_numeric($k)){ if($k == 'description') $v = htmlentities(str_replace("'","’",$v)); if(empty($data)){ $data .= " $k='$v' "; }else{ $data .= ", $k='$v' "; } } } if(isset($user_ids)){ $data .= ", user_ids='".implode(',',$user_ids)."' "; } // 新增name字段重复校验逻辑 $check_sql = "SELECT id FROM project_list WHERE name = '{$name}' "; // 编辑场景下排除当前项目自身,避免误判重复 if(!empty($id)){ $check_sql .= " AND id != {$id} "; } $check_result = $this->db->query($check_sql); if($check_result->num_rows > 0){ // 存在同名项目,返回2作为重复标识 return 2; } if(empty($id)){ $save = $this->db->query("INSERT INTO project_list set $data"); }else{ $save = $this->db->query("UPDATE project_list set $data where id = $id"); } if($save){ return 1; } // 保存失败返回0 return 0; }
额外优化建议:给数据库
project_list表的name字段添加唯一索引,从数据库层面兜底避免并发提交导致的重复数据问题。
2. 前端AJAX代码修改(新增重复错误提示处理)
修改后的表单提交代码如下:
$('#manage-project').submit(function(e){ e.preventDefault() start_load() $.ajax({ url:'ajax.php?action=save_project', data: new FormData($(this)[0]), cache: false, contentType: false, processData: false, method: 'POST', type: 'POST', success:function(resp){ if(resp == 1){ alert_toast('数据保存成功',"success"); setTimeout(function(){ location.href = 'index.php?page=project_list' },2000) }else if(resp == 2){ // 处理名称重复的错误提示 alert_toast('项目名称已存在,请更换后重试',"error"); end_load(); // 结束加载动画 }else{ // 处理其他保存失败的情况 alert_toast('保存失败,请稍后重试',"error"); end_load(); } } }) })
内容的提问来源于stack exchange,提问作者Yohannes Debelu
相关产品推荐
相关产品推荐

