首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从mysql选中的复选框

从mysql选中的复选框
EN

Stack Overflow用户
提问于 2012-06-30 04:18:31
回答 2查看 346关注 0票数 2

我遇到了一个问题。我有一个表单,我试图添加一个编辑页面插入到mysql。我从一张桌子上获取所有的房间,然后我必须检查它们是否在另一张桌子上被“检查”了。

代码语言:javascript
运行
复制
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

现在在我的表单中,我首先需要找到属于Hid为20的酒店的所有房间。所以下面是我的select语句:

代码语言:javascript
运行
复制
<?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++;
    }
?>

有没有人知道如何检查HotelPromos表,看看它是否在“房间”列下面,并在其中添加一个“checked=”?

任何帮助都将非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-30 08:46:54

我假设Basic的ID实际上是3而不是2,这是一个打字错误。

首先,在HotelPromos中,您应该使用房间in (1,2),而不是名称(豪华,标准)。

其次,您应该将HotelPromos拆分为两个表,以符合Database Normalization的“第一范式”。

是的,这是一个稍微困难的设计,你将不得不修改你的代码,但它使复杂的查询更容易编写。

代码语言:javascript
运行
复制
PromoCodes
ID | Promo
----------
1  | 10%

HotelPromos
RoomID | PromoID
----------------
1      | 1
2      | 1

现在,您可以获取与酒店ID匹配的所有房间

代码语言:javascript
运行
复制
SELECT HotelRooms.ID, HotelRooms.HotelRoom as Name, HotelPromos.PromoID
    FROM HotelRooms
    LEFT JOIN HotelPromos
        ON HotelRooms.ID = HotelPromos.RoomID
    WHERE HotelId = '$hid'

LEFT JOIN意味着我想要20号酒店的所有房间,不管他们是否有促销活动。PromoID将是促销代码的ID,如果没有可用的代码,则为NULL,您可以使用它来决定是否选中该复选框。

代码语言:javascript
运行
复制
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++;
}

最后一件事,我认为您应该使用$ro['ID']而不是新的变量$rr

票数 1
EN

Stack Overflow用户

发布于 2012-06-30 04:27:05

不确定您的表模式,但类似于以下内容。然后检查是否设置了id。附言,转义你的输入!

代码语言:javascript
运行
复制
SELECT HotelRoom, hp.id
FROM HotelRooms AS hr
LEFT OUTER JOIN HotelPromos AS hp ON hp.hid=hr.id
WHERE HotelId = '$hid'"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11268431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档