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

如何将下拉选择框的Value与选项文本同时插入数据库?

解决方法

方法一:无需JavaScript,通过合并Value传递双值

这种方法不用写JS代码,直接把需要的两个值合并到下拉框的value属性中,后台再拆分使用。

  1. 修改前端下拉框的Option代码:
    把原Option的value改为同时包含pv_subkriteria和nama,用一个不会出现在文本中的分隔符(比如|)拼接:
<option value="<?php echo $a['pv_subkriteria'] . '|' . $a['nama']; ?>"><?php echo $a['nama']; ?></option>
  1. 在hitung.php中拆分获取到的值:
    接收$_POST['subkrt'][$i][$j]时,用explode函数拆分出数值和文本:
if(isset($_POST['subkrt'][$i][$j])){
    // 拆分value中的两个值
    list($pv_value, $subkrt_text) = explode('|', $_POST['subkrt'][$i][$j]);
    $matriks[$i][$j] = $pv_value * $rows[$j];
    $value = $matriks[$i][$j];
    $jmlsub[$i] += $value;

    $id_alternatif = getIDAlternatif($i);
    $id_kriteria = getKriteriaID($j);
    // 假设你的nilai_alt表新增了nama_subkriteria字段存储文本,修改插入/更新语句
    if (mysqli_num_rows($a)==0) {
        $b = "INSERT INTO nilai_alt VALUES('',$id_alternatif,$id_kriteria,$value,'$subkrt_text')";
    } else {
        $b = "UPDATE nilai_alt SET nilai_alternatif=$value, nama_subkriteria='$subkrt_text' WHERE id_alternatif = $id_alternatif AND id_kriteria = $id_kriteria";
    }

    // 后续代码保持不变
}

注意:如果nama文本可能包含|,换一个不会出现的分隔符(比如@@@);同时要注意SQL注入风险,建议后续改用预处理语句优化代码。

方法二:用简单JavaScript配合隐藏输入框

如果不想合并value,可通过隐藏输入框单独存储选项文本,只需要几行基础JS:

  1. 修改前端代码,给每个select添加onchange事件,同时新增隐藏输入框:
<td>
    <select class="btn-secondary" name="subkrt[<?php echo $i ?>][<?php echo $j ?>]" required onchange="setSubkrtText(this, <?php echo $i ?>, <?php echo $j ?>)">
        <option value="" style="display:none;" required>-Pilih-</option>
        <?php
        $query = mysqli_query($conn, "SELECT pv_alternatif.pv_subkriteria, subkriteria.nama FROM pv_alternatif INNER JOIN subkriteria ON pv_alternatif.id_alternatif = subkriteria.id WHERE id_kriteria=$j+1");
        while ($a = mysqli_fetch_array($query)) {
        ?>
            <option value="<?php echo $a['pv_subkriteria']; ?>"><?php echo $a['nama']; ?></option>
        <?php
        }
        ?>
    </select>
    <!-- 新增隐藏输入框,存储选项文本 -->
    <input type="hidden" name="subkrt_text[<?php echo $i ?>][<?php echo $j ?>]" id="subkrt_text_<?php echo $i ?>_<?php echo $j ?>">
</td>
  1. 在HTML页面的<head>或表单下方添加这段JS:
function setSubkrtText(selectElement, i, j) {
    // 获取选中选项的文本
    var selectedText = selectElement.options[selectElement.selectedIndex].text;
    // 赋值给对应的隐藏输入框
    document.getElementById('subkrt_text_' + i + '_' + j).value = selectedText;
}
  1. 在hitung.php中直接获取文本值:
if(isset($_POST['subkrt'][$i][$j]) && isset($_POST['subkrt_text'][$i][$j])){
    $pv_value = $_POST['subkrt'][$i][$j];
    $subkrt_text = $_POST['subkrt_text'][$i][$j];
    $matriks[$i][$j] = $pv_value * $rows[$j];
    $value = $matriks[$i][$j];
    $jmlsub[$i] += $value;

    $id_alternatif = getIDAlternatif($i);
    $id_kriteria = getKriteriaID($j);
    // 修改插入/更新语句,存入文本
    if (mysqli_num_rows($a)==0) {
        $b = "INSERT INTO nilai_alt VALUES('',$id_alternatif,$id_kriteria,$value,'$subkrt_text')";
    } else {
        $b = "UPDATE nilai_alt SET nilai_alternatif=$value, nama_subkriteria='$subkrt_text' WHERE id_alternatif = $id_alternatif AND id_kriteria = $id_kriteria";
    }

    // 后续代码保持不变
}

提示:无论用哪种方法,都要确保数据库表有对应的字段存储选项文本(比如给nilai_alt表新增nama_subkriteria字段),如果要插入到其他表,调整对应的SQL语句即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:50:42