2016-04-27 77 views
0

創建一個SQL搜索查詢與我創建使用多個字段如果其他條件它工作正常,但如果1和第二個字段是emty和第三個字段不是然後它死了不工作只是因爲關鍵字OR請指教我如何將能夠糾正這種與2個或更多字段的SQL搜索

<form method="POST" action="search.php?action=go"> 
      <li> 
       <h3>Player</h3> 
       <input type="text" class="form-control" placeholder="Dylan Scout" name="playername" value="<?php if(isset($_POST["playername"])) {echo $_POST["playername"];} ?>"> 
      </li> 
      <li> 
       <h3>Age</h3> 
       <input type="text" class="form-control" placeholder="25" name="age" value="<?php if(isset($_POST["age"])) {echo $_POST["age"];} ?>"> 
      </li> 
      <li> 
       <h3>Country</h3> 
       <input type="text" class="form-control" placeholder="Wallabies" name="country" value="<?php if(isset($_POST["country"])) {echo $_POST["country"];} ?>"> 
      </li> 
      <li> 
       <h3>Club</h3> 
       <input type="text" class="form-control" placeholder="Eagle" name="club" value="<?php if(isset($_POST["club"])) {echo $_POST["club"];} ?>"> 
      </li> 
      <li> 
       <button type="submit" name="search">Search</button> 
      </li> 
     </form> 

,這裏是我的SQL PHP查詢

<?php 
     if(isset($_GET["action"]) == 'go') { 
      $stmt = "SELECT * FROM users WHERE"; 
      if($_POST["playername"]) { 
       $stmt .= " OR fname LIKE '%".$_POST["playername"]."%' OR lname LIKE '%".$_POST["playername"]."%'"; 
      } 
      if($_POST["age"]) { 
       $stmt .= " OR age LIKE '%".$_POST["age"]."%' "; 
      } 
      if($_POST["country"]) { 
       $stmt .= " OR country LIKE '%".$_POST["country"]."%' "; 
      } 
      if($_POST["club"]) { 
       $stmt .= " OR club LIKE '%".$_POST["club"]."%' "; 
      } 
     } else { 
      $stmt = "SELECT * FROM users "; 
     } 
     echo $stmt . "<br />"; 
     $sql = mysqli_query($connection, $stmt); 
    ?> 

請讓我知道我會怎麼能夠使它彷彿正常工作,我寫在第三個領域,並將其他領域留空,那麼它將成爲無處不在,哪些將成爲我顯然是錯誤的查詢,將無法正常工作

謝謝

+1

你需要閱讀,理解並開始使用參數化查詢鮑比表來拜訪了。 http://bobby-tables.com/ –

回答

4

功能implode會幫助你。

將它們添加到數組中並在連接之後進行連接。

<?php 
$array = array(); 
if (isset($_POST["playername"])) 
    $array[] = "fname LIKE '%".$_POST["playername"]."%' OR lname LIKE '%".$_POST["playername"]."%"; 
if (isset($_POST["age"])) 

    ... 

$stmt = "SELECT * FROM users"; 
if (count($array) > 0) 
    $stmt .= " WHERE " . implode(" OR ",$array); 
$sql = mysqli_query($connection, $stmt); 
?> 
+0

完美但你能解釋你爲什麼使用數組以及它是如何工作的嗎?和where子句怎麼樣,如果所有空字段和點擊搜索然後它也給我一個錯誤我怎麼能擺脫這 –

+0

這不是完整的答案。對於爆發,我們需要數組,因此他已經採用數組來存儲條件並將其爆炸。我在上面的回答中做了同樣的事情。 @MarkAlan – RJParikh

+0

在數組中,我放置了where子句。我用「或」文字連接它們。然後,如果需要,我添加了「WHERE」和條款。 – androbin

0

試試這個。使用implode()你可以做到這一點。

<?php 

    if(isset($_GET["action"]) == 'go') { 

     $where = array(); 
     if($_POST["playername"]) { 
      $where[] = " OR fname LIKE '%".$_POST["playername"]."%' OR lname LIKE '%".$_POST["playername"]."%'"; 
     } 
     if($_POST["age"]) { 
      $where[] = " OR age LIKE '%".$_POST["age"]."%' "; 
     } 
     if($_POST["country"]) { 
      $where[] = " OR country LIKE '%".$_POST["country"]."%' "; 
     } 
     if($_POST["club"]) { 
      $where[] = " OR club LIKE '%".$_POST["club"]."%' "; 
     } 

     if(!empty($where)) 
     { 
      $stmt = "SELECT * FROM users WHERE " . implode(" AND ", $where) ." "; 
     } 
     else 
     { 
      $stmt = "SELECT * FROM users "; 
     } 

    } else { 
     $stmt = "SELECT * FROM users "; 
    } 

    echo $stmt . "<br />"; 
    $sql = mysqli_query($connection, $stmt); 
    ?> 
+0

我已經嘗試在我的本地工作正常。 @Mark Alan – RJParikh

+1

冗餘代碼太多。如果沒有postdata被髮送,這將失敗。 – androbin

+1

太多,如果其他塊 – ssnake

0

加where條件數組,下次使用implode function,例如:

<?php 
if(isset($_GET["action"]) == 'go') { 
    $stmt = "SELECT * FROM users"; 
    if($_POST["playername"]) { 
     $where[] = "fname LIKE '%".$_POST["playername"]."%' OR lname LIKE '%".$_POST["playername"]."%'"; 
    } 
    if($_POST["age"]) { 
     $where[] = "age LIKE '%".$_POST["age"]."%' "; 
    } 
    if($_POST["country"]) { 
     $where[] = "country LIKE '%".$_POST["country"]."%' "; 
    } 
    if($_POST["club"]) { 
     $where[] = "club LIKE '%".$_POST["club"]."%' "; 
    } 

    if(count($where)) 
     $stmt .= " WHERE " . implode(" OR ", $where); 

    echo $stmt . "<br />"; 
    $sql = mysqli_query($connection, $stmt); 
?>