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

PHP问题:点击编辑按钮后无法获取正确的muscle选择$_POST值

问题分析与解决方案

问题概述

当前开发的PHP程序基于XAMPP的Apache环境,仅通过JSON文件存储数据,未使用AJAX或MySQL。页面包含name="muscle"的下拉选择框,选项为chest、back、leg:点击choice提交按钮后,PHP会根据选中的muscle值从JSON数组$program中取出对应内容,生成以数组key为name的输入框(初始值为JSON中的val)。但点击edit提交按钮时,print_r($program[$_POST["muscle"]])始终返回chest对应的数组,无法获取实际选中的muscle值,导致无法正确获取输入框值并更新JSON文件。

问题根源

点击edit提交时,表单未携带当前选中的muscle值。原代码中仅第一次点击choice时,muscle值通过POST传递;但生成edit按钮所在的表单区域时,没有将选中的muscle值以隐藏域或重新渲染选中状态下拉框的方式包含进去,导致PHP接收不到正确的muscle参数(此时$_POST["muscle"]可能未定义,程序默认取第一个选项chest)。


解决方案1:添加隐藏域保存muscle值

在生成输入框的代码块中,添加一个隐藏输入框存储当前选中的muscle值,确保点击edit时该值能被POST到后台。

修改后的生成输入框代码:

<?php if(isset($_POST["choice"])) : ?>
<h3> Current Workout Program </h3>
<!-- 新增隐藏域,保存选中的muscle值 -->
<input type="hidden" name="muscle" value="<?= $_POST["muscle"] ?>">
<?php foreach ($program[$_POST["muscle"]] as $key => $val): ?>
<p><?= $key. ":" . $val;?></p>
<input type="text" name="<?= $key?>" value="<?= $val?>">
<?php endforeach;?>
<input type="submit" name="edit" value="edit">
<?php endif;?>

解决方案2:重新渲染下拉框并保持选中状态

如果需要用户在编辑页面仍能切换肌肉部位,可重新渲染下拉选择框,并设置当前选中的muscle为默认选中项,确保提交edit时能获取正确的muscle值。

修改后的代码:

<?php if(isset($_POST["choice"])) : ?>
<h3> Current Workout Program </h3>
<!-- 重新渲染下拉框,保持当前选中状态 -->
<select name="muscle">
    <option value="chest" <?= $_POST["muscle"] == "chest" ? "selected" : "" ?>>Chest</option>
    <option value="back" <?= $_POST["muscle"] == "back" ? "selected" : "" ?>>Back</option>
    <option value="leg" <?= $_POST["muscle"] == "leg" ? "selected" : "" ?>>Leg</option>
</select>
<?php foreach ($program[$_POST["muscle"]] as $key => $val): ?>
<p><?= $key. ":" . $val;?></p>
<input type="text" name="<?= $key?>" value="<?= $val?>">
<?php endforeach;?>
<input type="submit" name="edit" value="edit">
<?php endif;?>

后续编辑逻辑优化

获取正确的muscle值后,可通过以下代码更新JSON文件:

if (isset($_POST["edit"])){
    $selectedMuscle = $_POST["muscle"];
    // 提取输入框的键值对(排除submit和muscle参数)
    $updatedData = [];
    foreach ($_POST as $key => $value) {
        if ($key !== "edit" && $key !== "muscle") {
            $updatedData[$key] = $value;
        }
    }
    // 更新$program数组中对应肌肉部位的数据
    $program[$selectedMuscle] = $updatedData;
    // 将更新后的数组写入JSON文件
    file_put_contents('your_program_file.json', json_encode($program, JSON_PRETTY_PRINT));
    // 可选:添加操作成功提示
    echo "训练计划更新成功!";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:25:22