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

PHP引入evaluation.php后$ext_系列变量在index.php中无法正常获取的原因是什么?

问题原因
  • 核心逻辑偏差:你设计的$ext_系列变量仅在evaluation.php收到POST请求的id参数时才会被赋值,但你在index.php中是页面首次服务端渲染阶段就直接include了evaluation.php,此时用户还没有点击任何图片,没有对应的id参数传入POST请求,自然不会进入赋值分支,index.php也就读取不到这些变量。你之前在evaluation.php中能打印到正确值,应该是你单独向该文件发起带POST参数的测试请求时才生效的场景,和index.php首次加载的场景完全不同。
  • 代码判断错误:evaluation.php中判断查询结果的逻辑有误,你写的if($evaluation_mod_state)是判断PDO预处理对象是否创建成功,而非判断是否查询到对应数据,应该改为if($evaluation_modRes),否则就算没有匹配到数据也会尝试给$ext_变量赋值,引发未定义数组键的报错。
适配需求的修复方案

你的需求是9张图片共用一个弹窗、动态加载数据,应该改用AJAX异步请求的逻辑,不要依赖服务端首次渲染填充弹窗内容:

  1. 调整index.php的弹窗代码,首次渲染时弹窗内容留空即可,给所有触发弹窗的图片增加自定义属性存储对应的pictureSession值,比如<img class="modal-trigger" src="xxx.jpg" data-modal-id="123">
  2. 编写JS点击事件:监听所有.modal-trigger的点击事件,读取点击元素的data-modal-id值,通过POST请求发送给evaluation.php
  3. 调整evaluation.php代码,查询到数据后直接返回JSON格式的结果,示例代码修改如下:
<?php
session_start();
header('Content-Type: application/json');
$pdo = new PDO('mysql:host=localhost;dbname=databaseexample', 'xyz', '123');

$return = [];
if(isset($_POST['id']) && !empty($_POST['id'])) {
    $evaluation_modid = $_POST['id'];
    $evaluation_mod_state = $pdo->prepare("SELECT * FROM mM WHERE pictureSession = :psession");
    $evaluation_mod_state->execute(array("psession" => $evaluation_modid));
    $evaluation_modRes = $evaluation_mod_state->fetch();
    if($evaluation_modRes) {
        $return['code'] = 0;
        $return['data'] = [
            'pictureSession' => $evaluation_modRes['pictureSession'],
            'modalHeader' => $evaluation_modRes['modalHeader'],
            'modalHUnderline' => $evaluation_modRes['modalHUnderline'],
            'modalVerlinkung' => $evaluation_modRes['modalVerlinkung'],
            'modalModel' => $evaluation_modRes['modelName'],
            'gearHeader' => $evaluation_modRes['gearHeader'],
            'gearDesc' => $evaluation_modRes['gearBeschreibung']
        ];
        // 同时查询pictureManager的图片列表也可以放在这里一起返回
    } else {
        $return['code'] = 1;
        $return['msg'] = '未查询到对应数据';
    }
} else {
    $return['code'] = 1;
    $return['msg'] = '参数缺失';
}
echo json_encode($return);
?>
  1. JS收到返回结果后,动态替换弹窗内的标题、链接、描述、图片列表等内容,再显示弹窗即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:04