在Core PHP中使用Summernote编辑器更新带图片的文章时,无法显示内容及报错的求助
在Core PHP中使用Summernote编辑器更新带图片的文章时,无法显示内容及报错的求助
Hey Ahmad,别着急,咱们一步步拆解你的问题来解决:
首先处理那个警告错误
你看到的Warning: Trying to access array offset on value of type null是核心问题——这说明你的$row变量是null,也就是说你从数据库里根本没获取到要编辑的文章数据。你可以从这几个方向排查:
- 检查文章ID的传递:你是不是通过URL参数(比如
update-post.php?id=123)来获取要编辑的文章?先确认$_GET['id'](或者你用的其他参数)有没有正确拿到值,比如在页面顶部加一句var_dump($_GET);看看参数是否存在。 - 检查数据库查询逻辑:假设你是根据ID查询文章,你的代码大概是这样的,要确保查询能返回结果:
// 先确保数据库连接正常 $conn = mysqli_connect("localhost", "username", "password", "blog_db"); if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); } // 获取文章ID,这里用null合并运算符避免未定义变量 $post_id = $_GET['id'] ?? 0; // 注意用预处理语句防止SQL注入! $query = "SELECT * FROM posts WHERE id = ?"; $stmt = mysqli_prepare($conn, $query); mysqli_stmt_bind_param($stmt, "i", $post_id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_assoc($result); // 关键:检查是否查询到了数据 if (!$row) { echo "找不到要编辑的文章!"; exit; // 停止执行后续代码,避免报错 }
- 排查查询错误:如果查询没结果,可以用
mysqli_error($conn)查看具体的SQL错误信息,比如表名写错、字段名不对之类的。
解决Summernote无法显示内容的问题
当$row能正确获取到数据后,还要注意Summernote的特性:
- 避免多余空白:你的textarea标签里,PHP代码前后有换行和空格,这些会被Summernote解析成空白内容,导致编辑器显示异常。要把内容紧贴textarea的标签:
<textarea name="description" class="summernote form-control" cols="30" rows="10"><?php echo isset($row['description']) ? htmlspecialchars_decode($row['description']) : ''; ?></textarea>
- HTML转义还原:如果你存储文章内容的时候用了
htmlspecialchars()转义HTML标签(这是好习惯,防止XSS),那输出的时候必须用htmlspecialchars_decode()把HTML标签还原,否则Summernote只会显示纯文本的标签代码,而不是渲染富文本。 - 确保Summernote正确初始化:别忘了在页面底部加载jQuery和Summernote的JS/CSS,并且初始化编辑器:
$(document).ready(function() { $('.summernote').summernote({ height: 350, // 设置编辑器高度 toolbar: [ // 按需配置工具栏按钮 ['style', ['style']], ['font', ['bold', 'italic', 'underline', 'clear']], ['para', ['ul', 'ol', 'paragraph']], ['insert', ['picture', 'link']], ['view', ['fullscreen', 'codeview']] ] }); });
如果没有正确初始化,textarea还是普通文本框,自然没法显示富内容。
调试小技巧
- 在页面顶部加
<?php var_dump($row); ?>,看看$row['description']的具体值是不是你预期的HTML内容,有没有被截断或者损坏。 - 直接在页面输出
<?php echo htmlspecialchars_decode($row['description']); ?>,看看能不能正常渲染HTML,排除数据库存储的问题。
备注:内容来源于stack exchange,提问作者Ahmad Raza
相关产品推荐
相关产品推荐

