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

PHP无JS实现表单提交后隐藏已答Jeopardy题目的方法

无JavaScript实现Jeopardy答题板已答题目隐藏方案

核心实现逻辑完全基于PHP Session持久化作答状态,服务端渲染页面前判断题目是否已被作答,已作答题目不再渲染可点击的分值按钮,即可实现提交后自动隐藏的效果,全程不需要前端JS参与。

第一步:重构状态存储逻辑

在play.php文件最开头的session_start();之后,先初始化用于存储已答题目ID的Session数组,同时建议将零散的分类、题目、答案数组合并为结构化数组,减少重复判断代码:

<?php
session_start();
// 首次访问初始化已答题目集合、分数
if (!isset($_SESSION['answered_questions'])) {
    $_SESSION['answered_questions'] = [];
}
if (!isset($_SESSION['Score'])) {
    $_SESSION['Score'] = 0;
}

// 结构化存储所有分类、对应分值的题目和答案
$categories = [
    1 => [
        'name' => '第一个分类名称',
        'questions' => [
            100 => ['q' => '100分题目内容', 'a' => '对应答案'],
            200 => ['q' => '200分题目内容', 'a' => '对应答案'],
            300 => ['q' => '300分题目内容', 'a' => '对应答案'],
            400 => ['q' => '400分题目内容', 'a' => '对应答案'],
            500 => ['q' => '500分题目内容', 'a' => '对应答案'],
        ]
    ],
    // 按相同格式补全2-5号分类即可
];

修改原有表单提交的跳转逻辑,跳转到题目页时带上当前题目的唯一标识:

if (isset($_POST['question'])) {
    $qid = $_POST['question'];
    // 从题目ID解析出分类ID和对应分值
    sscanf($qid, "cat%d_%d", $catId, $point);
    $_SESSION["Question"] = $categories[$catId]['questions'][$point]['q'];
    $_SESSION["Answer"] = $categories[$catId]['questions'][$point]['a'];
    $_SESSION["Points"] = $point;
    // 跳转时携带题目ID,方便答完后标记状态
    header("Location: questionPage.php?qid={$qid}");
    exit;
}

在questionPage.php的答案判分逻辑末尾,将当前做完的题目ID存入已答集合,再跳转回游戏主页:

// 答案判分、分数累加逻辑完成后执行
$qid = $_GET['qid'];
// 将题目ID标记为已答
$_SESSION['answered_questions'][] = $qid;
// 跳转回游戏板
header("Location: play.php");
exit;

第二步:页面渲染时按状态输出内容

渲染游戏板表格时,不要硬编码所有分值按钮,遍历题目列表时先判断当前题目是否在已答集合中,按需输出内容:

<form method="post">
  <div id="container">
    <table id="board">
      <tr id="categories">
        <?php foreach ($categories as $catId => $cat): ?>
          <th><?= $cat['name'] ?></th>
        <?php endforeach; ?>
      </tr>
      <?php foreach ([100,200,300,400,500] as $point): ?>
      <tr>
        <?php foreach ($categories as $catId => $cat):
          $qid = "cat{$catId}_{$point}";
          // 已答题目直接输出空白单元格
          if (in_array($qid, $_SESSION['answered_questions'])):
        ?>
          <td class="answered"></td>
        <?php else: ?>
          <!-- 未答题目输出可点击的提交按钮 -->
          <td>
            <button type="submit" name="question" value="<?= $qid ?>"><?= $point ?></button>
          </td>
        <?php endif;
        endforeach; ?>
      </tr>
      <?php endforeach; ?>
    </table>
  </div>
</form>

注意事项

  • 所有header()跳转语句后必须加exit;终止后续代码执行,避免逻辑异常
  • 你原有代码中存在中文全角右引号(比如数组元素里的"x”"),请统一替换为半角双引号,否则会触发PHP语法错误
  • 可以给已答单元格添加.answered类,通过CSS设置为和游戏板背景一致的样式即可,不需要额外写显示/隐藏的判断逻辑
  • 整个流程完全基于服务端状态存储+页面渲染,不需要任何JavaScript代码,完全符合需求要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:18:23