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

如何在PHP的option标签中设置并获取两个值

问题描述

以下是我的数据库截图:
数据库截图
如上图的option标签所示!我需要在option标签的value中同时包含Cost和Service的值,请问如何在select标签中设置两个值?该如何实现?

当前代码如下:

<?php
   if($genders=$_GET["gen"]=="Male") {
     $query=mysqli_query($con,"select * from tblservices WHERE gender='Male'");
   }
   if ($genders=$_GET["gen"]=="Female") {                               
      $query=mysqli_query($con,"select * from tblservices WHEREgender='Female'");
   }
      while($row=mysqli_fetch_array($query))
      {
      ?>
       <option value="<?php echo $row['Cost']; ?>" id="price"> 
       <?php echo $row['ServiceName'];?>
        (<?php echo $row['Cost']; ?>₹)</oPHPon>
       <?php } ?>
      </select>

实现方法

方法1:分隔符拼接字符串

用不会出现在值中的分隔符(比如|)将Cost和Service的唯一标识(推荐用ServiceID,比ServiceName更稳妥)拼接,提交后再拆分取值。

修正后的代码:

<?php
// 修正原代码的语法错误
$gen = $_GET["gen"] ?? '';
if($gen == "Male") {
  $query = mysqli_query($con,"select * from tblservices WHERE gender='Male'");
} elseif ($gen == "Female") {                               
  $query = mysqli_query($con,"select * from tblservices WHERE gender='Female'");
}

while($row = mysqli_fetch_array($query)) {
  // 拼接Cost和ServiceID
  $combinedValue = $row['Cost'] . '|' . $row['ServiceID'];
?>
<option value="<?php echo $combinedValue; ?>" id="price"> 
  <?php echo $row['ServiceName'];?> (<?php echo $row['Cost']; ?>₹)
</option>
<?php } ?>
</select>

提交后拆分取值示例:

<?php
if(isset($_POST['your_select_name'])) {
  $selectedValue = $_POST['your_select_name'];
  list($cost, $serviceId) = explode('|', $selectedValue);
  // 后续可直接使用$cost和$serviceId
}

方法2:JSON序列化打包

将两个值打包成JSON字符串,提交后解析还原。

代码示例:

<?php
$gen = $_GET["gen"] ?? '';
if($gen == "Male") {
  $query = mysqli_query($con,"select * from tblservices WHERE gender='Male'");
} elseif ($gen == "Female") {                               
  $query = mysqli_query($con,"select * from tblservices WHERE gender='Female'");
}

while($row = mysqli_fetch_array($query)) {
  // 生成JSON格式的字符串
  $jsonValue = json_encode(['cost' => $row['Cost'], 'serviceId' => $row['ServiceID']]);
?>
<option value="<?php echo htmlspecialchars($jsonValue); ?>" id="price"> 
  <?php echo $row['ServiceName'];?> (<?php echo $row['Cost']; ?>₹)
</option>
<?php } ?>
</select>

提交后解析示例:

<?php
if(isset($_POST['your_select_name'])) {
  $selectedValue = $_POST['your_select_name'];
  $data = json_decode($selectedValue, true);
  $cost = $data['cost'];
  $serviceId = $data['serviceId'];
}

方法3:HTML5 data属性存储

如果不需要把两个值都放在value里,可以用data属性存储额外值,通过JavaScript获取。

代码示例:

<?php
$gen = $_GET["gen"] ?? '';
if($gen == "Male") {
  $query = mysqli_query($con,"select * from tblservices WHERE gender='Male'");
} elseif ($gen == "Female") {                               
  $query = mysqli_query($con,"select * from tblservices WHERE gender='Female'");
}

while($row = mysqli_fetch_array($query)) {
?>
<option value="<?php echo $row['Cost']; ?>" data-service-id="<?php echo $row['ServiceID']; ?>" id="price"> 
  <?php echo $row['ServiceName'];?> (<?php echo $row['Cost']; ?>₹)
</option>
<?php } ?>
</select>

JavaScript获取示例:

document.getElementById('your_select_id').addEventListener('change', function() {
  const selectedOpt = this.options[this.selectedIndex];
  const cost = selectedOpt.value;
  const serviceId = selectedOpt.dataset.serviceId;
  // 后续使用两个值
});

原代码错误修正说明

原代码存在几处语法问题,已在上述示例中修复:

  • if($genders=$_GET["gen"]=="Male") 逻辑错误,应先获取参数再判断相等,而非赋值后判断
  • WHEREgender='Female' 拼写错误,应为WHERE gender='Female'
  • </oPHPon> 标签错误,应为</option>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:40:27