You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

注册后数据库存数正常,访问指定URL时出现TypeError错误求助

问题分析与解决

错误原因定位

报错Uncaught TypeError: Cannot access offset of type string on string出现在messages.php第10行,核心原因是$_SESSION['user']被存储为字符串类型,而非预期的数组,导致无法通过['username']这种数组偏移方式访问值。

同时当前代码与配置存在两处明显问题:

1. Session跳转逻辑错误

messages.php中同时输出两个header跳转指令,浏览器仅会执行第一个,逻辑完全混乱:

if(!isset($_SESSION['user'])) {
    header('location: '.BASE_URL.'login');
    header('location: '.BASE_URL.'register'); // 这行不会生效
    exit;
}

2. URL重写规则不匹配

你设计的URL结构是example.com/u/username/view,但.htaccess中^u messages.php的规则仅匹配/u路径,没有捕获username和view参数,无法正确传递路由信息。


修复步骤

步骤1:修正Session存储与访问逻辑

确保注册/登录成功后,$_SESSION['user']被存储为数组(比如从数据库查询用户信息后存入session):

// 示例:登录成功后的session存储逻辑
$user = $statement->fetch(PDO::FETCH_ASSOC);
$_SESSION['user'] = $user; // 将用户信息数组存入session

如果$_SESSION['user']确实仅存储了用户名(字符串),则直接修改messages.php第10行代码:

$statement->execute(array($_SESSION['user'])); // 直接使用字符串值

步骤2:修复跳转逻辑

保留一个合理的跳转路径,比如未登录时统一跳转到登录页:

if(!isset($_SESSION['user'])) {
    header('location: '.BASE_URL.'login');
    exit;
}

步骤3:调整URL重写规则

修改.htaccess中^u的规则,捕获username和view参数并传递给messages.php:

RewriteRule ^u/([^/]+)/view$ messages.php?username=$1 [NC,L]

这样访问example.com/u/username/view时,就能通过$_GET['username']获取到目标用户名(如果业务需要的话)。


内容的提问来源于stack exchange,提问作者Lorenzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:31:01