15

献血アプリケーションで検索/フィルタリング オプションを作成しようとしています。ドナーは、性別、名前、血液型、または 3 つすべてを選択して検索できます。これが私のコードです

function search_donar($_POST) {

        $by_name = $_POST['by_name'];
        $by_sex = $_POST['by_sex'];
        $by_group = $_POST['by_group'];
        $by_level = $_POST['by_level'];

        $search_query = "SELECT * FROM donar WHERE";
        if($by_name !="") {
          $search_query .= " name='$by_name'";
        }
        if($by_sex !="") {
          $search_query .= " sex='$by_sex'";
        }
        if($by_group !="") {
          $search_query .= " blood_group='$by_group'";
        }
        if($by_level !="") {
          $search_query .= " e_level='$by_level'";
        }
        $search_query;
        $result = mysql_query($search_query);

        return $result;
    }

そして、ここにhtmlがあります

if(isset($_POST['submit'])) {

    $retrived_result = $donar->search_donar($_POST);

}

   <form action="" method="post">
    <table width="100%" border="0" style="border:none;">
      <tr>
        <td><label>Name:&nbsp;</label><input type="text" name="by_name" /></td>
        <td><label>Sex:&nbsp;</label><input type="text" name="by_sex" /></td>
        <td><label>Blood Group:&nbsp;</label><input type="text" name="by_group" /></td>
        <td><label>Level:&nbsp;</label><input type="text" name="by_level" /></td>
        <td><input class="button" type="submit" name="submit" value="Search" /></td>
      </tr>
    </table>
    </form>

単一のフィルタリングは非常にうまく機能します。しかし、ANDを使用したすべてでフィルタリングするには、エラーが発生します。誰でも助けることができますか?

前もって感謝します

4

7 に答える 7

2

あなたのコードには、条件がどこにあるかというクエリに問題があります。ここでのクエリは 、where条件を適切に作成する必要select * from donar where by_name = "A" by_group = "N"がないようになります。And/Or以下のようなコードを試してください。

$search_query = "SELECT * FROM donar";
$query_cond = "";

if($by_name !="") {
      $query_cond .= " name='$by_name'";
}
if($by_sex !="") {

      if(!empty($query_cond)){
          $query_cond .= " AND ";
       }

      $query_cond .= " sex='$by_sex'";
}

if($by_group !="") {

      if(!empty($query_cond)){
          $query_cond .= " AND ";
       }

      $query_cond .= " blood_group='$by_group'";
}

if($by_level !="") {

      if(!empty($query_cond)){
          $query_cond .= " OR ";
       }

      $query_cond .= " e_level='$by_level'";
 }

 if(!empty($query_cond)){
      $query_cond = " Where ".$query_cond;
      $search_query.$query_cond;
 }

ここでコードでは最初に$query_cond変数を空にし、コードに従って条件を作成します。ANDそれに応じてオペレーターを管理します。$query_condそして最後に、空でないことがわかった場合は、それをに追加し$select_queryます。

お役に立てば幸いです。

ありがとう

于 2012-11-03T07:22:44.317 に答える
2

次のコード スニペット:

$search_query = "SELECT * FROM donar WHERE";
if($by_name !="") {
  $search_query .= " name='$by_name'";
}
if($by_sex !="") {
  $search_query .= " sex='$by_sex'";
}

次のようなクエリを生成します

SELECT * FROM donar WHERE name='nowak' sex='m'

句の間に論理演算子がないため、これらは有効ではありません。「AND」を追加する必要があります。コードを簡素化するために、「true and a and b ...」の形式で条件を生成できます。

$search_query = "SELECT * FROM donar WHERE true";
if($by_name !="") {
  $search_query .= " AND name='$by_name'";
}
if($by_sex !="") {
  $search_query .= " AND sex='$by_sex'";
}
...
于 2012-11-03T06:14:09.933 に答える
0

バリデーションを使用しない場合は、Field が EMPTY か NOT かを使用しないことをお勧めします。以下のコードを試してください。うまくいくことを願っています

function search_donar($_POST) {

    $by_name = $_POST['by_name'];
    $by_sex = $_POST['by_sex'];
    $by_group = $_POST['by_group'];
    $by_level = $_POST['by_level'];

    $search_query = "SELECT * FROM donar WHERE name LIKE '%$by_name%' AND sex LIKE '%$by_sex%' AND blood_group LIKE '%$by_group%' AND  e_level LIKE '%$by_level%' ";

    $result = mysql_query($search_query);

    return $result;
}
于 2012-11-03T07:30:27.870 に答える
0

このようにしてみてください:

function search_donar($_POST) {

        $by_name = $_POST['by_name'];
        $by_sex = $_POST['by_sex'];
        $by_group = $_POST['by_group'];
        $by_level = $_POST['by_level'];

        $isfirst=0;
        $search_query = "SELECT * FROM donar WHERE";
        if($by_name !="") {

          $search_query .= " name='$by_name'";
          $isfirst=1;
        }
        if($by_sex !="") {
            if($isfirst!=0)
            $search_query .= " AND ";
          $search_query .= " sex='$by_sex'";
          $isfirst=1;
        }
        if($by_group !="") {
            if($isfirst!=0)
            $search_query .= " AND ";
          $search_query .= " blood_group='$by_group'";
          $isfirst=1;
        }
        if($by_level !="") {
            if($isfirst!=0)
            $search_query .= " AND ";
          $search_query .= " e_level='$by_level'";
          $isfirst=1;
        }
        $result = mysql_query($search_query);

        return $result;
    }
于 2012-11-03T06:25:20.340 に答える