Php 选中mysql中的复选框
我遇到了一个问题。我有一个表单,我正试图添加一个编辑页面插入mysql。我从一张桌子上拿到所有的房间,然后我必须检查它们是否在另一张桌子上被“检查”Php 选中mysql中的复选框,php,mysql,checkbox,while-loop,Php,Mysql,Checkbox,While Loop,我遇到了一个问题。我有一个表单,我正试图添加一个编辑页面插入mysql。我从一张桌子上拿到所有的房间,然后我必须检查它们是否在另一张桌子上被“检查” Table 1 (HotelRooms): ID | HotelRoom | Hid --------------------- 1 | Standard | 20 2 | Deluxe | 20 2 | Basic | 20 Table 2 (HotelPromos) ID | Promo | Rooms | Hid --
Table 1 (HotelRooms):
ID | HotelRoom | Hid
---------------------
1 | Standard | 20
2 | Deluxe | 20
2 | Basic | 20
Table 2 (HotelPromos)
ID | Promo | Rooms | Hid
-------------------------
1 | 10% | deluxe, standard | 20
现在在我的表格中,我首先需要找到所有属于HID20酒店的房间。下面是我的select声明:
<?php
$getRooms = mysql_query("SELECT HotelRoom FROM HotelRooms WHERE HotelId = '$hid'") or die(mysql_error());
$rr = 1;
$numRooms = mysql_num_rows($getRooms);
if($numRooms == 0){
echo "Lo sentimos pero no hay habitaciones registrados para este hotel. Favor de agregar habitacion para poder agregar una promocion.";
}
while($ro = mysql_fetch_array($getRooms)){
$roomName = $ro['HotelRoom'];
?>
<input type="checkbox" name="room<?php echo $rr ?>" /><?php echo $roomName ?>
<?php
$rr++;
}
?>
不确定您的表架构,但类似于以下内容。然后检查是否设置了id。PS,逃避你的输入
SELECT HotelRoom, hp.id
FROM HotelRooms AS hr
LEFT OUTER JOIN HotelPromos AS hp ON hp.hid=hr.id
WHERE HotelId = '$hid'"
我假设Basic的ID实际上是3而不是2,这是一个打字错误
首先,在HotelPromos中,您应该使用房间ID(1、2),而不是名称(豪华、标准)
其次,您应该将HotelPromos拆分为两个表,以符合“第一个标准形式”的要求
是的,设计起来有点困难,您将不得不修改代码,但它使复杂的查询更容易编写
PromoCodes
ID | Promo
----------
1 | 10%
HotelPromos
RoomID | PromoID
----------------
1 | 1
2 | 1
现在您可以获得与酒店ID匹配的所有房间
SELECT HotelRooms.ID, HotelRooms.HotelRoom as Name, HotelPromos.PromoID
FROM HotelRooms
LEFT JOIN HotelPromos
ON HotelRooms.ID = HotelPromos.RoomID
WHERE HotelId = '$hid'
左连接
意味着我想要20号酒店的所有房间,不管他们是否有促销活动。促销ID将是促销代码的ID,如果没有可用的代码,则为NULL
,您可以使用它来决定是否选中复选框
while( $ro = mysql_fetch_assoc($getRooms) ){
$roomName = $ro['Name'];
?>
<input type="checkbox" name="room<?= $rr ?>" <?php if( $ro['PromoID'] ) { echo 'checked="checked" '; } ?>/><?php echo $roomName ?>
<?php
$rr++;
}
while($ro=mysql\u fetch\u assoc($getRooms)){
$roomName=$ro['Name'];
?>
为什么HotelRooms中的两个条目具有相同的ID?如果它是主键,则应该是唯一的。此表中的ID是指特定的房间,还是指酒店内的房间类型?从查询中检索HotelPromos.Rooms后,可以使用来分解结果并将其与HotelRooms.HotelRoom的结果进行比较,但如果可以更改表中的数据,最好规范化Rooms列,这样您就可以使用查询进行整个比较。此外,由于Rooms和HotelRoom的情况不同,您可能需要在PHP中将HotelRoom转换为小写。