2014-02-17 97 views
-1

我的數據庫中有以下字段,它採取0或1來表示真或假的陳述功能是否可用:選擇框爲特徵

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'"); 

這是正常時,用戶不希望特徵1,但如果他們不介意特徵1是真還是假的(因爲它是一個額外的選項),這將只顯示其中特徵1是假的。它應顯示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爲真的所有結果,而特徵1和3爲真或假。

希望這是有道理的。任何指向技術,可以在這裏幫助將非常讚賞。

+1

即與此有關,風險不僅'mysql_ *'庫,風險就是你直接使用的查詢變量,而事實使用任何衛生處理,並且也可能發生在PDO和MySQLi上,因此請確保使用[**'mysql_real_escape_string' **]清理數據(http://www.php.net/manual/en/function.mysql-real-escape -string.php)或根據正在使用的庫準備好的語句! – Prix

回答

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);