具体修改位置:在 if (empty($slug)) { $slug = createSlug($name); } 后添加唯一性检查循环。同时编辑时需传入当前ID(若有)用于排除。
下面是修改后的代码片段(替换原来的slug处理部分):
php
if(empty($slug)){$slug=createSlug($name);}// 唯一性检查(添加时排除自身ID,编辑时排除当前ID)$id_for_check=isset($_POST['id'])?intval($_POST['id']):0;$original_slug=$slug;$counter=1;while($db->fetch("SELECT id FROM category WHERE slug = ? AND id != ?",[$slug,$id_for_check])){$slug=$original_slug.'-'.$counter++;}
同时注意,在新增时 $id_for_check 为0,不影响查重;编辑时会排除自身。
请将此代码段放在 if (isset($_POST['id']) && !empty($_POST['id'])) 之前(即统一处理slug后,再执行插入或更新)。
// 处理添加/编辑$edit=null;if(isset($_GET['edit'])&&is_numeric($_GET['edit'])){$edit=$db->fetch("SELECT * FROM category WHERE id = ?",[intval($_GET['edit'])]);}if($_SERVER['REQUEST_METHOD']==='POST'){$name=trim($_POST['name']);$slug=trim($_POST['slug']);$description=trim($_POST['description']);$sort_order=intval($_POST['sort_order']);if(empty($name)){$error="分类名称不能为空";}else{// 如果 slug 为空,自动生成if(empty($slug)){$slug=createSlug($name);// 如果自动生成后仍为空(如全是特殊字符),则使用默认值if(empty($slug))$slug='category';}// 唯一性检查(添加时排除自身ID 0,编辑时排除当前ID)$current_id=isset($_POST['id'])?intval($_POST['id']):0;$original_slug=$slug;$counter=1;while($db->fetch("SELECT id FROM category WHERE slug = ? AND id != ?",[$slug,$current_id])){$slug=$original_slug.'-'.$counter++;}if(isset($_POST['id'])&&!empty($_POST['id'])){// 编辑分类$db->query("UPDATE category SET name=?, slug=?, description=?, sort_order=? WHERE id=?",[$name,$slug,$description,$sort_order,$current_id]);addAdminLog('编辑分类',"分类ID: {$current_id},名称:{$name}");header('Location: ?mod=category&msg=edit_success');exit;}else{// 新增分类$db->query("INSERT INTO category (name, slug, description, sort_order) VALUES (?, ?, ?, ?)",[$name,$slug,$description,$sort_order]);$newId=$db->lastInsertId();addAdminLog('添加分类',"分类ID: {$newId},名称:{$name}");header('Location: ?mod=category&msg=add_success');exit;}}}
发表评论 (0)
留下你的足迹