PHP跨页面获取username变量报错:Undefined index: username如何解决?
解决PHP中Undefined index: username的问题
你遇到的这个错误是因为$_POST['username']只在表单提交的单次请求里有效,当你跳转到final.php时,这是一个全新的HTTP请求,$_POST数组里已经没有username这个键了,所以会抛出未定义索引的提示。
好在你已经在使用$_SESSION存储分数了,我们可以用同样的方式来保存用户名,跨页面调用就不会有问题了,具体修改步骤如下:
第一步:在登录验证时将用户名存入Session
找到你的login.php文件(登录页里include的那个),在验证用户名和密码成功的代码块里,添加一行代码把用户名存入Session:
// 假设这是login.php里验证通过后的代码 $_SESSION['login_user'] = $username; // $username是你从表单获取到的用户名变量
注意:如果
login.php里还没调用session_start(),一定要在文件最开头加上session_start();,否则Session无法正常工作。
第二步:修改final.php获取用户名的方式
把final.php里用$_POST['username']的代码改成从Session里取:
<p>Congratulations <?php echo $_SESSION['login_user']; ?> ! You completed the test</p>
另外,要确保session_start()在final.php的最顶部调用,不能有任何HTML输出或者echo在它前面,所以调整你的代码顺序:
<?php session_start(); // 移到最前面,确保在任何输出之前执行 include 'database.php'; ?> <?php function visualizza($file) { $f = fopen($file, "r"); $content = fread($f, filesize($file)); fclose($f); return $content; } ?> <html> <main> <div class="container"> <h2> Quiz Completato!</h2> <p> Congratulations <?php echo $_SESSION['login_user']; ?> ! You completed the test</p> <p>Final Score:<?php echo $_SESSION['score']; ?> </p> </div> </main>
小提示:你的原
visualizza函数里,fclose($f)写在return之后,这行代码永远不会被执行到,会导致文件资源无法正常释放,上面的代码已经帮你调整了位置。
这样修改后,final.php就能正常显示登录的用户名了,也不会再出现Undefined index的错误啦。
内容的提问来源于stack exchange,提问作者carl23
相关产品推荐
相关产品推荐

