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异步请求的逻辑,不要依赖服务端首次渲染填充弹窗内容:
- 调整index.php的弹窗代码,首次渲染时弹窗内容留空即可,给所有触发弹窗的图片增加自定义属性存储对应的
pictureSession值,比如<img class="modal-trigger" src="xxx.jpg" data-modal-id="123"> - 编写JS点击事件:监听所有
.modal-trigger的点击事件,读取点击元素的data-modal-id值,通过POST请求发送给evaluation.php - 调整
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); ?>
- JS收到返回结果后,动态替换弹窗内的标题、链接、描述、图片列表等内容,再显示弹窗即可。
内容的提问来源于stack exchange,提问作者Levi
相关产品推荐
相关产品推荐

