2016-04-27 19 views
0

複数のフィールドを持つSQL検索クエリを作成しました。それ以外の条件ではうまくいきましたが、1と2のフィールドがemtyで3番目のフィールドがない場合は、 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); 
    ?> 

である私は、私はそれが私かのように正常に動作させることができるだろうか教えてください3番目のフィールドに書き込み、他のフィールドは空のままにしておくと、asWHEREまたはbecoになります

+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

完璧ですが、なぜあなたはアレイを使用したのか、そしてどのように動作しているのか説明できますか?どのような空のフィールドと検索をクリックした場合、それはまた、私はこれを取り除くことができますどのようにエラーを与えているかのようにどこの節については –

+0

これは完全な答えではありません。私たちは配列が必要なので、条件を保存して爆発させるために配列をとっていました。私は上記の答えで行ったことと同じです。 @MarkAlan – RJParikh

+0

配列にはwhere節を入れます。私はそれらを '' OR ''テキストで接続します。それが必要な場合は、 '' 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

私は自分のローカルでうまく動作しようとしました。 @マークアラン – RJParikh

+1

冗長コードが多すぎます。ポストデータが送信されない場合、これは失敗します。 – androbin

+1

elseブロックが多すぎる – ssnake

0

例えば、アレイ、および次の使用implode functionにWHERE条件を追加します。

<?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); 
?> 
関連する問題