PHP嵌套echo时while循环输出异常,页面显示代码而非内容求助
解决PHP嵌套echo中while循环未执行的问题
你的问题出在两个核心点:一是登录判断逻辑写反了,二是把while循环代码作为普通字符串直接输出,PHP不会解析字符串内部的代码。以下是具体解决方法:
1. 修正登录判断逻辑
原代码中if(isset($_SESSION["loggedin"]))判断为真时,输出"You are not logged in.",这和你“登录后显示表格”的需求完全相反,需要把if和else的内容调换。
2. 让while循环正确执行
你当前是把while循环的代码当作HTML文本直接echo出去,PHP不会运行字符串里的PHP代码。必须跳出当前的echo上下文,直接编写PHP代码执行循环,再继续输出HTML内容。
修正后的代码示例(PHP与HTML混合写法)
<?php session_start(); // 必须先启动session,否则无法读取$_SESSION变量 if(!isset($_SESSION["loggedin"])) { // 未登录时提示 echo "You are not logged in."; } else { // 已登录时显示页面 ?> <!DOCTYPE html> <html> <head> <title>Index - Sandwich Fun™</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="robots" content="noindex"> <style type="text/css"> .smorgass { position: absolute; top: 0; left: 0; width: 100%; } table, th, td { border: 1px solid black; } </style> </head> <body> <table height="500" class="smorgass"> <tr> <th colspan="3"> <?php // 这里直接编写PHP循环代码,会被执行而非直接输出 // 注意:无限循环会导致页面卡死,建议添加终止条件,比如循环3次 $loopCount = 0; while ($loopCount < 3) { echo "Sandwich Fun™"; $loopCount++; } ?> </th> </tr> <tr><td></td><td></td><td></td></tr> <tr><td></td></tr> </table> </body> </html> <?php } ?>
关键注意事项
- 避免用大段echo输出HTML,改用PHP与HTML混合的写法,代码更易读、易维护。
- 原代码中的
while(1===1)是无限循环,会导致页面持续加载甚至崩溃,务必添加合理的终止条件(比如限制循环次数)。 - 必须在使用
$_SESSION前调用session_start(),否则无法读取登录状态。
内容的提问来源于stack exchange,提问作者Greenwitch88
相关产品推荐
相关产品推荐

