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

动态生成的输入值无法传递至PHP POST的问题排查

问题原因与解决方案

核心问题:表单标签结构错误

你的HTML代码中,<form>标签在第一行就直接闭合了:

<form name="values" 
action="http://127.0.0.1/fmc/admin/products_sizes.php? 
group_page=1&amp;member_page=1&amp;action=add_size_heading_values" 
method="post"></form>

后续所有表单控件(下拉框、输入框、提交按钮)都不在表单范围内,即便你能获取部分字段数据是浏览器兼容行为,动态生成的member_values[]输入框也无法被正确提交。

修复步骤

  1. 调整HTML结构,让<form>标签包裹所有表单元素:
<form name="values" 
action="http://127.0.0.1/fmc/admin/products_sizes.php?group_page=1&amp;member_page=1&amp;action=add_size_heading_values" 
method="post">
  <input name="formid" type="hidden" 
  value="bd1acdc9faa900d509359f07527a565269412e8ee0489470cee47e3fecb1ea80" 
  class="form-control">
  <tr>
            <td>4</td>
            <td>
              <select name="group_id" class="custom-select" required="" 
aria-required="true">
                <option value="1">Mens T-Shirt</option>
                <option value="3">Premium Bracelet</option>                   
              </select>
            </td>
            <td>
              <input type="hidden" name="member_id" value="4">
              <div class="input-group mb-1">
                <div class="input-group-prepend">
                  <span class="input-group-text">
                    <img src="http://127.0.0.1/fmc/includes/languages/english/images/icon.gif" alt="English">
                  </span>
                </div>
                <input type="text" name="member_name[1]" required="" aria-required="true" class="form-control">
              </div>
            </td>
            <td id="values">
              <input type="text" class="form-control input-sm" name="member_values[]" value="Small"> 
              <input type="text" class="form-control input-sm" name="member_values[]" value="Medium"> 
              <input type="text" class="form-control input-sm" name="member_values[]" value="Large"> 
            </td>
            <td>
              <input type="text" name="member_sort" class="form-control" style="width: 60px;">
            </td>
            <td class="text-right">
              <button class="btn btn-link" type="submit"> 
                <span class="fas fa-save text-success" aria-hidden="true"></span> 
              </button>
            </td>
          </tr>
</form>
<script>
$(document).ready(function() {
  $('select').on('change', function() {
    var selectValue = $(this).val();
    $.ajax({
      type: "POST",
      url: "ext/scripts/get_sizes.php",
      data: { selected: selectValue },
      success: function (data) {
        $('#values').html(data);
      },
      error: function (data) {
        // 处理错误逻辑
      }
    });
  });
});
</script>

注意:将原嵌套在select内的script标签移到表单外部,符合HTML规范。

  1. 修复后端SQL注入风险
    get_sizes.php直接拼接用户输入到SQL语句中存在注入风险,改用预处理语句:
$selectedValue = (int)$_POST['selected']; // 强转为整数,匹配字段类型
$sqlQuery = $db->prepare("SELECT * FROM products_sizes where products_sizes_id = ?");
$sqlQuery->bind_param("i", $selectedValue);
$sqlQuery->execute();
$result = $sqlQuery->get_result();
$string = $result->fetch_assoc();
$str_arr = explode(",", $string['products_sizes_sizes']); // 用explode替代preg_split更高效

foreach ($str_arr as $id) {
  echo '<input type="text" class="form-control input-sm" name="member_values[]" value="'. htmlspecialchars($id) .'"> ';
}

用htmlspecialchars()转义输出值,避免XSS风险。

  1. 增加提交前的空值校验
    在数据库插入代码中,先判断member_values是否存在:
$member_id = Text::input($_POST['member_id']);
$member_sort = Text::input($_POST['member_sort']);
$group_id = Text::input($_POST['group_id']);
$member_values = $_POST['member_values'] ?? [];

if(empty($member_values)) {
  die("请选择产品尺寸"); // 或返回错误提示
}
$a = implode(',', $member_values);

foreach ($languages as $l) {
  $member_name = Text::prepare($_POST['member_name'][$l['id']]);
  $db->query("INSERT INTO products_sizes_values (products_sizes_values_id, language_id, products_sizes_id, products_sizes_values_name, products_sizes_values, psv_sort_order) VALUES (" . 
  (int)$member_id . ", " . (int)$l['id'] . ", " . (int)$group_id . ", '" . $db->escape($member_name) . "', '" . $a . "', " . (int)$member_sort . ")");
}

额外检查点

  • 用浏览器开发者工具(Network标签)查看提交请求的Form Data,确认member_values[]是否被包含
  • 确认动态生成的输入框确实插入到#values容器中,且该容器在表单范围内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24