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

动态生成select元素时无法通过PHP执行MySQL查询问题求助

问题核心原因

  • 第一:你在提交按钮的点击事件里加了e.preventDefault(),直接阻止了表单的默认提交行为,PHP自然接收不到任何POST数据,这是你修改键名仍无法取值的核心原因
  • 第二:你的第一个下拉框select元素name属性是selectStock,但PHP里默认取的键是option,就算表单正常提交也取不到对应值
  • 第三:如果你需要提交第二个多选框里的所有选中股票,当前第二个select的name属性不支持接收数组,也需要调整

具体修改方案

1. 原生表单提交场景(页面会刷新)

直接删除btnAdd.onclick事件里的e.preventDefault();代码,让表单可以正常提交到PHP。
同时把PHP里的取值代码修改为:

$tickerChosen = $_POST["selectStock"];

即可正常拿到第一个下拉框选中的股票代码。

如果需要拿到你添加到第二个多选框里的所有股票,先把第二个select的属性修改为:

<select id="list" name="list[]" multiple>

PHP里用$_POST['list']就能拿到所有选中的股票数组,调整SQL为批量查询即可获取多只股票的开盘价。


2. 无刷新获取数据场景(推荐)

如果不想页面刷新,建议用AJAX异步提交请求,替换原有点击逻辑即可:

btnAdd.onclick = async (e) => {
  e.preventDefault();
  if (name.value == '') {
    alert('请选择股票代码');
    return;
  }
  // 异步提交选中的股票代码到PHP查询
  const res = await fetch(window.location.href, {
    method: 'POST',
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    body: `selectStock=${encodeURIComponent(name.value)}&submit=1`
  });
  const openPrices = await res.json();
  // 拿到查询结果后再添加到列表
  const option = new Option(name.value, name.value);
  sb.add(option, undefined);
  selected.push({
    x: option.value,
    y: openPrices[0][0] // 对应你查询出来的最新开盘价
  });
  name.value = '';
  name.focus();
};

对应的PHP查询完成后输出JSON即可:

if (isset($_POST["submit"])) {
  $tickerChosen = $_POST["selectStock"];
  $stmt = $conn->prepare("SELECT Open FROM symbolsv2 WHERE ticker=? ORDER BY Date DESC LIMIT 2");
  $stmt->bind_param("s", $tickerChosen);
  $stmt->execute();
  $result = $stmt->get_result();
  $openPrices = $result->fetch_all();
  $stmt->close();
  echo json_encode($openPrices);
  exit;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:05