2014-04-24 112 views
0

我希望這個題目很好地代表了這個問題。我試圖建立一個基於多個$ vars現有的動態查詢。我正在嘗試使用簡單的if/ifelse/else塊來完成這項工作,但似乎無法使其正常工作。第一條if語句相應執行,但第三條語句失敗。我是PHP的新手,所以我認爲這是一個初學者的錯誤。我也相信最有可能以更有說服力的方式達到預期的結果。基於多個變量和條件構建動態MySQL查詢

基本上,用戶在多個文本字段中輸入一些輸入。 3個需求中只有一個需要包含一個值,但2個或全部3個需要。如果該值不存在於字段中,則應根據提供的值生成一個Query。我正在驗證併爲每個輸入創建一個變量,而不是檢查這些變量是否包含值或存在。

////////////////////////////////////////////////////// 

    if(isset($_POST['inputName']) && $_POST['inputName'] != ""){ 
    $inputName = preg_replace('#[^a-z 0-9?!]#i', '', $_POST['inputName']); 
    } 

    if(isset($_POST['inputState']) && $_POST['inputState'] != ""){ 
    $inputState = preg_replace('#[^a-z 0-9?!]#i', '', $_POST['inputState']); 
    } 

    if(isset($_POST['inputCost']) && $_POST['inputCost'] != ""){ 
    $inputCost = preg_replace('#[0-9]#i', '', $_POST['inputCost']); 
    } 

    /////////////////////////////////////////////////////// 

    if (!empty($inputName) AND !empty($inputState) AND !empty($inputCost)){ 
    $sqlCommand = "SELECT * FROM hciproject WHERE school_name LIKE '%$inputName%' AND school_state LIKE '%$inputState%' AND school_cost < '$inputCost'"; 
    } 
    elseif (!empty($inputName) AND !empty($inputState)){ 
    $sqlCommand = "SELECT * FROM hciproject WHERE school_name LIKE '%$inputName%' AND school_state LIKE '%$inputState%'"; 
    } 
    elseif (!empty($inputName) AND !empty($inputCost)){ 
    $sqlCommand = "SELECT * FROM hciproject WHERE school_name LIKE '%$inputName%' AND school_cost < '$inputCost'"; 
    } 
    elseif (!empty($inputState) AND !empty($inputCost)){ 
    $sqlCommand = "SELECT * FROM hciproject WHERE school_state LIKE '%$inputState%' AND school_cost < '$inputCost'"; 
    } 
    else{ 
    $searchOut .= "0 Results Found"; 
    } 


    // Connect to DB 
    include_once("database_connection.php"); 

    $query = mysql_query($sqlCommand) or die(mysql_error()); 
    $count = mysql_num_rows($query); 

    /////////////////////////////////////////////////////// 

此外,我打算創建只包含一個變量的elseif語句。

任何幫助,這將不勝感激。

+0

你得到什麼錯誤到底是什麼? –

+0

@EmrysMyrooin當我將值輸入到字段並測試每個if/elseif語句時,只有前兩個正確執行並構建適當的查詢。基本上只有'if'和第一個'elseif'語句正在執行,但不是下一個。謝謝 – davecalvin

回答

2

試試這個:

$inputName = preg_replace('#[^a-z 0-9?!]#i', '',& $_POST['inputName']); 
$inputState = preg_replace('#[^a-z 0-9?!]#i', '',& $_POST['inputState']); 
$inputCost = preg_replace('#[0-9]#i', '',& $_POST['inputCost']); 

$selectCondition = 1; 
if($inputName) $selectCondition.= " and school_name LIKE '%$inputName%' "; 
if($inputState) $selectCondition.= " and school_state LIKE '%$inputState%' "; 
if($inputCost) $selectCondition.= " and school_cost < $inputCos "; 

重要:

& $_POST['inputName'] is equal to (isset($_POST['inputName']) && $_POST['inputName'] != "") 
+0

我似乎無法得到這個工作。也許我只是錯誤地實現它。我不知道用戶將填寫哪些字段,因此我無法爲每個$ selectCondition使用「AND」屬性。假設用戶只爲學校輸入一個名稱,只有$ inputName var會包含一個變量,但其他兩個變量將是空的。 – davecalvin