PHP验证码代码无法显示,求排查错误(新手求助)
排查PHP验证码代码无内容显示的问题
嘿,作为PHP新手遇到页面空白的情况太常见了,我帮你一步步拆解代码里的问题,顺便给你修正后的示例:
核心错误点
- 忘记初始化Session:PHP使用
$_SESSION前必须先调用session_start(),否则Session相关操作会失效,甚至触发隐性错误导致页面空白。 - Session变量名写法错误:你写的
$_SESSION["$first_num"]是错误的——$first_num还没定义就被当作变量解析,相当于用空字符串当Session键名。应该直接用固定的键名,比如$_SESSION["first_num"]。 - 语法错误:你的switch语句里
case "+"后面缺少了冒号:,而且代码明显截断了($answ...),语法错误会让PHP解析失败,开启错误提示的话会看到报错,没开启就会直接空白。 - 缺少输出逻辑:就算前面的逻辑都对,你的代码里没有任何输出验证码内容的语句(比如echo算式、生成图片输出),页面自然不会显示任何东西。
修正后的示例代码
<?php // 第一步:必须先启动Session session_start(); // 初始化验证码的两个数字(用固定的Session键名) if (!isset($_SESSION["first_num"])) { $_SESSION["first_num"] = rand(1, 10); } if (!isset($_SESSION["second_num"])) { $_SESSION["second_num"] = rand(1, 10); } // 随机运算符 $operators = array("+", "-", "*"); $operator = $operators[rand(0, count($operators) - 1)]; // 计算正确答案 $first_num = $_SESSION["first_num"]; $second_num = $_SESSION["second_num"]; switch ($operator) { case "+": $answer = $first_num + $second_num; break; case "-": // 减法确保结果非负,避免给用户出负数题 $answer = $first_num >= $second_num ? $first_num - $second_num : $second_num - $first_num; // 同步调整Session里的数字顺序,让显示的算式合理 if ($first_num < $second_num) { $_SESSION["first_num"] = $second_num; $_SESSION["second_num"] = $first_num; } break; case "*": $answer = $first_num * $second_num; break; } // 把答案存入Session,方便后续验证 $_SESSION["captcha_answer"] = $answer; // 输出验证码算式(这里是文本形式,你也可以改成生成图片) echo "请计算:{$_SESSION["first_num"]} {$operator} {$_SESSION["second_num"]} = ?"; ?>
额外提示
- 开启PHP错误提示:在代码开头加上
error_reporting(E_ALL); ini_set('display_errors', 1);,这样有语法错误时能直接看到报错信息,方便调试。 - 如果要生成图片验证码,需要使用GD库相关函数,不过作为新手可以先从文本验证码入手,熟悉逻辑后再进阶。
内容的提问来源于stack exchange,提问作者gawai arun
相关产品推荐
相关产品推荐

