记录技术成长,奔向未来!

URL别名如果要不加内容添加不上文章,如何处理

我们注意到 article_add.php 代码中,对 slug 的处理是:如果为空,则自动根据标题生成 slug。这段逻辑是正确的,理论上不会因为 slug 为空而导致添加失败。用户反馈“如果不加内容,添加不上文章”,可能是指在前端表单中,URL别名输入框被标记为 required 属性,导致空值提交时被浏览器拦截。

检查您的 article_add.php 中 HTML 表单部分,是否存在类似 <input type="text" name="slug" required> 这样的属性?如果有,请去掉 required,因为您已经允许自动生成。

如果前端没有 required,但仍无法添加,可能是数据库 slug 字段有 NOT NULL 约束且没有默认值,但您的代码中总是会生成一个值(即使标题为空,slug 也会被设为空字符串),应该不会出错。但为了安全,可以增加对空标题的处理:如果标题为空,slug 可以设为 'untitled' 或类似值。

建议您做以下调整:

  1.  article_add.php 中,确保当 $slug 为空时,自动生成的值不为空。如果标题也空,可以设置默认 slug。

  2. 检查数据库 article  slug 字段结构,建议允许 NULL 或设置默认值 '',且添加唯一索引时考虑空值问题(MySQL 允许多个空值,但空字符串视为重复)。所以最好确保每次生成的 slug 唯一。

您可以在自动生成后加上唯一性检查:

php
if (empty($slug)) {
    $slug = createSlug($title);
    // 避免重复
    $original = $slug;
    $i = 1;
    while ($db->fetch("SELECT id FROM article WHERE slug = ?", [$slug])) {
        $slug = $original . '-' . $i++;
    }
}

其中 createSlug 函数您可能未定义?您当前代码使用的是 preg_replace 方法,可以抽取成函数。

请确认以上修改是否能解决您的问题。如果还是无法添加,请提供具体的错误提示(页面提示什么?数据库报错?),以便进一步排查。

您在 article_add.php 中的代码逻辑是正确的:当 slug 为空时,会根据标题自动生成一个别名。按理说不会出现“不加内容添加不上”的问题。出现该问题的可能原因有:

  1. HTML 表单中 slug 输入框带有 required 属性,导致浏览器拦截空值提交。

  2. 生成的 slug 值可能违反数据库唯一约束(例如标题为空或生成重复的 slug)。

  3. 前端 JavaScript 阻止了提交(例如自定义验证)。

由于您未提供 HTML 表单部分,我假设是第一种情况。请检查 article_add.php 中对应的 <input> 标签,去掉 required 属性:

html
<input type="text" name="slug" placeholder="留空自动生成">

如果 slug 字段在数据库中是 NOT NULL 且没有默认值,空字符串也是允许的(除非您将空字符串视为重复值)。但为了更健壮,建议在自动生成时添加唯一性检查(避免重复),并且为标题为空的极端情况设置默认值:

php
if (empty($slug)) {
    // 如果标题也空,则使用临时标题
    $tempTitle = $title ?: '未命名文章';
    $slug = preg_replace('/[^a-zA-Z0-9\s]/', '', $tempTitle);
    $slug = strtolower(trim(preg_replace('/\s+/', '-', $slug)));
    if (empty($slug)) $slug = 'post';
    // 唯一性检查
    $original = $slug;
    $count = 1;
    while ($db->fetch("SELECT id FROM article WHERE slug = ?", [$slug])) {
        $slug = $original . '-' . $count++;
    }
}

另外,您提到的“添加不上文章”有没有具体的报错信息(如浏览器的弹窗、页面上的错误提示)?如果有,请提供,以便精确定位。如果没有错误提示,只是页面无反应,很可能是前端 required 导致的浏览器校验拦截。


发表评论 (0)

留下你的足迹

验证码 点击图片刷新