PHP登录后跳转页面无法显示对应用户名问题排查求助
代码问题分析
1. 表单提交目标不匹配
你的HTML表单action属性配置的是INDEX.PHP,但你编写的登录校验逻辑存放在LOGIN.PHP中,用户提交表单根本不会触发你写的校验规则,首先需要把form的action属性改为LOGIN.PHP。
2. 变量无法跨页面传递
HTTP请求本身是无状态的,你在LOGIN.PHP里定义的$username是当前请求的局部变量,执行header跳转后,当前请求的所有临时变量都会被销毁,跳转后的no_error.php完全拿不到这个变量的值。
3. 缺少登录态持久化机制
你没有使用Session、Cookie或者参数传递的方式把用户名同步到跳转后的页面,目标页面的$username属于未定义变量,自然无法正常输出。
修复方案
步骤1:修正表单提交地址
修改HTML表单的action属性:
<form action="LOGIN.PHP" method="POST" class="two"> <!-- 其余表单内容保持不变 --> </form>
步骤2:用Session存储用户名(推荐,安全性更高)
修改LOGIN.PHP,顶部开启Session,校验通过后将用户名存入Session:
<?php // 代码最顶部先开启Session session_start(); if(isset($_POST['submit'])){ $post_username = $_POST['username']; $username = ''; if ($post_username === "01234567891012"){ $username = "PISHOY"; } elseif ($post_username === "01234567891013"){ $username = "HANY"; } elseif ($post_username === "01234567891014"){ $username = "ALI"; } elseif ($post_username === "01234567891015"){ $username = "PISH"; } else{ header("Location: error.php"); exit; } // 校验通过后把用户名存入Session $_SESSION['username'] = $username; header('Location: no_error.php'); exit; } ?>
步骤3:修改目标页面代码,从Session中读取用户名
跳转后的no_error.php页面顶部也需要开启Session,再输出对应的用户名:
<div id="true"><?php session_start(); include 'index_p.php'; // 先判断Session是否存在,避免出现未定义报错 echo "HELLO " . ($_SESSION['username'] ?? '访客'); ?></div>
临时替代方案:跳转时通过URL参数传递(不推荐,明文可见可篡改)
如果不想使用Session,也可以在跳转时把用户名拼在URL参数中,LOGIN.PHP里的跳转代码修改为:
header('Location: no_error.php?username=' . urlencode($username));
目标页面取值逻辑改为:
echo "HELLO " . ($_GET['username'] ?? '访客');
内容的提问来源于stack exchange,提问作者Pishoy Moris
相关产品推荐
相关产品推荐

