You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:37:04