如何将下拉选择框的Value与选项文本同时插入数据库?
解决方法
方法一:无需JavaScript,通过合并Value传递双值
这种方法不用写JS代码,直接把需要的两个值合并到下拉框的value属性中,后台再拆分使用。
- 修改前端下拉框的Option代码:
把原Option的value改为同时包含pv_subkriteria和nama,用一个不会出现在文本中的分隔符(比如|)拼接:
<option value="<?php echo $a['pv_subkriteria'] . '|' . $a['nama']; ?>"><?php echo $a['nama']; ?></option>
- 在
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:
- 修改前端代码,给每个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>
- 在HTML页面的
<head>或表单下方添加这段JS:
function setSubkrtText(selectElement, i, j) { // 获取选中选项的文本 var selectedText = selectElement.options[selectElement.selectedIndex].text; // 赋值给对应的隐藏输入框 document.getElementById('subkrt_text_' + i + '_' + j).value = selectedText; }
- 在
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
相关产品推荐
相关产品推荐

