选择框作为功能

时间:2014-02-17 00:00:02

标签: php mysql checkbox

在我的数据库中有以下字段,它们使用0或1表示true或false来说明该功能是否可用:

feature1
feature2
feature3
feature4

所有这些都对应于我的PHP页面中的可用复选框,允许选择一个功能。

每个元素都是这样的:

<input type="checkbox" name="feature1" value="1">

然后我将其设置为变量,如果没有勾选复选框,则将变量设置为0:

$feature1 = $_POST['feature1'];
if ($feature1 != '1'){$feature1 = 0;}

除了功能(例如玩家数量,日期等)之外,还有更多选择,因为它适用于预订系统。如果未选择某个功能,则应显示与其他条件匹配的所有字段,以及具有该功能且不可用的所有内容。所以在某种程度上,类似于:

if ($feature1 = 1){
[SHOW ONLY SPORTS WHERE FEATURE1 IS TRUE AND OTHER CRITERIA IS TRUE]
}
else {
[SHOW ALL SPORTS WHERE OTHER CRITERIA IS TRUE, FEATURE1 BEING TRUE OR FALSE DOES NOT MATTER]
}

这是我对数据库的查询(忽略mysql_ * - 我理解风险,但在这种情况下不相关,请不要抨击)。

$test = mysql_query("SELECT * FROM sport WHERE players = '$players' AND room_type='$rm_type' AND feature1='$feature1'");

当用户想要feature1时,这很好,但是如果他们不介意feature1是true还是false(因为它是一个附加选项),它只会显示feature1为false的位置。它应该显示feature1为true或false的所有内容。

显然我可以这样做:

if ($feature1 == 1){
$test = mysql_query("SELECT * FROM sport WHERE players = '$players' AND room_type='$rm_type' AND feature1='$feature1'");}

else {
$test = mysql_query("SELECT * FROM sport WHERE players = '$players' AND room_type='$rm_type'");}

但是,有了多个单独的功能,它需要大量的if语句,并且有很多可能的mysql查询。

我有什么方法可以解决这个问题吗?例如,用户选择了他们想要的功能2和功能4,它应该显示功能2和4为TRUE的所有结果,功能1和3为TRUE或FALSE。

希望这是有道理的。任何可以提供帮助的技术指南都会非常感激。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情吗?

$sql = "SELECT * FROM sport WHERE players = '$players' AND room_type='$rm_type'";
if ($feature1 == 1){
   $sql = $sql . " AND feature1='$feature1'";
}
if ($feature2 == 1){
   $sql = $sql . " AND feature2='$feature2'";
{
if ($feature3 == 1){
   $sql = $sql . " AND feature3='$feature3'";
{
if ($feature4 == 1){
   $sql = $sql . " AND feature4='$feature4'";
{

$test = mysql_query($sql);

或者你可以试试

$sql = "SELECT * FROM sport WHERE players = '$players' AND room_type='$rm_type'
        AND (feature1='$feature1' OR '$feature1' != '1')
        AND (feature2='$feature2' OR '$feature2' != '1')
        AND (feature3='$feature3' OR '$feature3' != '1')
        AND (feature4='$feature4' OR '$feature4' != '1')";
$test = mysql_query($sql);