PHP测验/评估结果页变量不显示 重构后页面空白问题排查
问题原因
你的重构代码存在3个致命问题,直接导致页面空白无输出:
- 执行顺序错误:你把结果变量的定义放在了判断输出逻辑的后面。PHP是自上而下顺序执行的,当你运行
if ($blueLow && $redLow && $blackLow){echo $lowLowLow;}这段判断时,$lowLowLow、$lowLowMedium这些变量还没被定义,条件永远不成立,自然没有任何内容输出。 - 维度等级变量未赋值:你在第一部分判断维度等级的代码里,只写了
$blueLow;这类语句,这行代码没有任何实际作用——你既没有给这个变量赋值为true作为等级标记,也没有做任何输出操作,PHP会把未赋值的$blueLow/$redLow/$blackLow识别为null(等价于false),后续的组合判断全部失效。 - 缺失边界兜底逻辑:三个维度的等级判断都没有写else兜底分支,如果用户得分超出你预设的区间(比如蓝色维度得分高于35),对应的等级变量会直接处于未定义状态,直接触发判断错误。
修正方案
调整代码执行顺序,给等级变量明确赋值,补上兜底逻辑即可,修正后的代码结构如下:
// 第1步:先定义所有结果模板(放在最前面,保证后续调用时变量已存在) $lowLowLow = "<div id='results'>$blueTotal / $redTotal / $blackTotal</div> <div id='explanation'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla, turpis a ultricies ultricies, tellus nisi faucibus dui, ac lobortis.</div>"; $lowLowMedium = "<div id='results'>$blueTotal / $redTotal / $blackTotal</div> <div id='explanation'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla, turpis a ultricies ultricies, tellus nisi faucibus dui, ac lobortis.</div>"; $lowLowHigh = "<div id='results'>$blueTotal / $redTotal / $blackTotal</div> <div id='explanation'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla, turpis a ultricies ultricies, tellus nisi faucibus dui, ac lobortis.</div>"; // 第2步:计算每个维度的等级,给对应变量赋值布尔值标记 // 蓝色维度判断 if ($blueTotal >=0 && $blueTotal<=10){ $blueLow = true; $blueMedium = false; $blueHigh = false; } else if ($blueTotal >=11 && $blueTotal<=22){ $blueLow = false; $blueMedium = true; $blueHigh = false; } else if ($blueTotal >=23 && $blueTotal<=35){ $blueLow = false; $blueMedium = false; $blueHigh = true; } else { // 兜底逻辑,处理超出区间的得分 $blueLow = false; $blueMedium = false; $blueHigh = true; } // 红色维度判断 if ($redTotal >=0 && $redTotal<=8){ $redLow = true; $redMedium = false; $redHigh = false; } else if ($redTotal >=9 && $redTotal<=15){ $redLow = false; $redMedium = true; $redHigh = false; } else if ($redTotal >=16 && $redTotal<=25){ $redLow = false; $redMedium = false; $redHigh = true; } else { $redLow = false; $redMedium = false; $redHigh = true; } // 黑色维度判断 if ($blackTotal >=0 && $blackTotal<=11){ $blackLow = true; $blackMedium = false; $blackHigh = false; } else if ($blackTotal >=12 && $blackTotal<=21){ $blackLow = false; $blackMedium = true; $blackHigh = false; } else if ($blackTotal >=22 && $blackTotal<=34){ $blackLow = false; $blackMedium = false; $blackHigh = true; } else { $blackLow = false; $blackMedium = false; $blackHigh = true; } // 第3步:匹配组合输出结果 if ($blueLow && $redLow && $blackLow){ echo $lowLowLow; } else if ($blueLow && $redLow && $blackMedium){ echo $lowLowMedium; } else if ($blueLow && $redLow && $blackHigh){ echo $lowLowHigh; } // 后续其余得分组合,按照相同格式往下补else if分支即可
补充提示:如果调试时还是看不到输出,可以在代码开头加上
error_reporting(E_ALL); ini_set('display_errors', 1);开启PHP错误显示,能直接看到未定义变量这类报错,快速定位问题。
内容的提问来源于stack exchange,提问作者Matt Allen
相关产品推荐
相关产品推荐

