如何在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
相关产品推荐
相关产品推荐

