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

JS条件语句嵌入PHP代码导致按钮无法点击问题求助

问题诊断与修复方案

核心问题:服务器端代码执行错误导致前端JS异常

你嵌入在JavaScript里的PHP代码会在页面加载时就执行,而非用户答对之后。此时$_GET['points']根本不存在,会触发Undefined index: points的PHP错误,这个错误会打断页面渲染,导致checkAnswer函数无法正常定义,最终按钮点击事件无法触发。

修复步骤:

  1. 分离前后端逻辑:把数据库更新代码移到quiz2.php中,当前页面只负责计算分数并跳转,数据库操作交给目标页面处理:

    // quiz2.php 中添加以下代码
    if(isset($_GET['points']) && is_numeric($_GET['points'])){
        $points = intval($_GET['points']);
        // 用预处理语句防止SQL注入
        $sql999 = "UPDATE games SET score = score + ? WHERE nickname = ?";
        $stmt = mysqli_prepare($conn, $sql999);
        mysqli_stmt_bind_param($stmt, "is", $points, $nickname);
        mysqli_stmt_execute($stmt);
    }
    
  2. 修正当前页面的JS代码:移除嵌入在JS中的PHP代码,调整跳转逻辑确保用户能看到结果:

    var startTime = Date.now(); // Startzeit in Millisekunden
    function checkAnswer(selectedOption) {
        const correctAnswer = '<?php echo $answer; ?>';
        if (selectedOption === correctAnswer) {
            document.getElementById('result').innerHTML = 'CORRECT!';
            var endTime = Date.now(); 
            var elapsedTime = endTime - startTime; 
            var points = Math.max(0, 10000 - elapsedTime); 
            document.getElementById('result').innerHTML += '<br>Points: ' + points;
            // 延迟1.5秒跳转,让用户看到结果
            setTimeout(() => {
                window.location.href = "quiz2.php?points=" + points;
            }, 1500);
        } else {
            document.getElementById('result').innerHTML = 'Incorrect! The answer is: ' + correctAnswer;
        }
    
        // 隐藏所有题目和选项
        document.getElementById('question').classList.add('hidden');
        document.getElementById('option1').classList.add('hidden');
        document.getElementById('option2').classList.add('hidden');
        document.getElementById('option3').classList.add('hidden');
        document.getElementById('option4').classList.add('hidden');
    }          
    
  3. 检查按钮事件绑定:确保按钮正确调用checkAnswer函数,示例如下:

    <button onclick="checkAnswer('选项1内容')">选项1</button>
    

    注意传入的参数要和$answer的实际值完全匹配。

  4. 开启PHP错误提示(临时排查用):在页面顶部添加以下代码,快速定位服务器端错误:

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    

额外提醒:

  • 必须做好SQL注入防护,绝对不要直接将用户传入的参数拼接到SQL语句中,预处理语句是标准解决方案。
  • 跳转前添加延迟能提升用户体验,避免结果刚显示就跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:01:05