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

PHP USSD代码修改input值提示Invalid input的修复方案

USSD应用菜单导航修复方案

问题核心分析

硬编码$input = '1'或$input = 1无法进入Option 1子菜单,反而触发「Invalid input」,本质是会话状态跟踪缺失或输入逻辑不匹配:

  • USSD是会话式交互,代码依赖当前菜单层级(如主菜单/子菜单)判断输入有效性,硬编码输入时未同步设置对应的会话状态,导致代码无法识别输入的上下文。
  • 代码可能使用了严格类型比较(===),若硬编码的输入类型(数字/字符串)与用户实际提交的输入类型不一致,会触发不匹配。

具体修复步骤

1. 同步初始化会话状态

USSD菜单导航依赖会话状态变量(如$current_menu)判断当前层级,测试时需先将状态设置为「主菜单」:

// 先初始化会话状态为主菜单(模拟用户刚进入应用的场景)
$_SESSION['current_menu'] = 'main'; 
// 硬编码输入,保持与用户实际提交的类型一致(通常为字符串)
$input = '1'; 

2. 统一输入类型匹配

检查代码中菜单判断的比较逻辑,确保硬编码输入与用户实际输入的类型一致:

// 示例主菜单判断逻辑,使用严格比较时需保证输入为字符串
switch ($_SESSION['current_menu'] ?? 'main') {
    case 'main':
        // 用字符串'1'匹配,避免数字1与字符串'1'的类型不匹配
        if ($input === '1') { 
            // 进入子菜单,更新会话状态
            $_SESSION['current_menu'] = 'option1_sub';
            echo "Option 1 子菜单:1. 子选项A 2. 子选项B";
        } else {
            echo "Invalid input";
        }
        break;
    case 'option1_sub':
        // 子菜单逻辑处理
        break;
}

3. 添加调试日志定位问题

若仍有错误,在代码中添加日志跟踪会话状态与输入值,快速定位问题点:

// 输出到服务器日志,查看当前菜单层级和输入值
error_log("当前菜单层级:" . ($_SESSION['current_menu'] ?? '未初始化'));
error_log("当前输入值:" . $input);

4. 验证会话状态流转

确保进入子菜单时会话状态被正确更新,返回上级菜单时状态也能同步重置:

// 子菜单返回主菜单的逻辑示例
case 'option1_sub':
    if ($input === '0') {
        $_SESSION['current_menu'] = 'main';
        echo "返回主菜单:1. 选项1 2. 选项2";
    }
    break;

内容的提问来源于stack exchange,提问作者user21345056

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:22:12