2016-03-30 22 views
-1

私は自分のサイトで詳細な検索を設定しようとしていますが、ユーザーが空のフィールドがある場合は検索を送信するときにNULLとして送信されます。空のパラメータを除外する方法がわからない以下は 高度な検索PHP、MySQL

を検索するためのフォームです:クエリ以下

<form> 
    <div class="form-group"> 
    <div class="col-sm-2"> 
     <label for="Author" class="control-label">Author</label> 
    </div> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="author" placeholder="Author" name="author"> 
    </div> 
    </div> 
    <div class="form-group has-feedback"> 
    <div class="col-sm-2"> 
     <label for="isbn" class="control-label">ISBN</label> 
    </div> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="isbn" placeholder="ISBN" name="isbn"> 
    </div> 
    </div> 
    <div class="form-group"> 
    <div class="col-sm-2"> 
     <label for="genre" class="control-label">Genre</label> 
    </div> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="genre" placeholder="Genre" name="genre"> 
    </div> 
    </div> 
    <div class="form-group"> 
    <div class="col-sm-2"> 
     <label for="tags" class="control-label">Tags</label> 
    </div> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="tags" placeholder="Tags" name="tags"> 
    </div> 
    </div> 
    <div class="form-group"> 
    <div class="col-sm-2"> 
     <label for="location" class="control-label">Location</label> 
    </div> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="location" placeholder="Location" name="location"> 
    </div> 
    </div> 

    <div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
     <button type="submit" name="AdvancedSearch" value="Search" class="btn btn-block btn-lg btn-primary">Search</button> 

    </div> 
    </div> 
</form> 

です:すべての

$sql = "select * 
      from Book_info 
      where user_id=$u_id 
      AND title like '%$_REQUEST[title]%' 
      AND location like '%$_REQUEST[location]%' 
      AND author like '%$_REQUEST[author]%' 
      AND tags like '%$_REQUEST[tags]%' 
      AND genre like '%$_REQUEST[genre]%' 
      OR ISBN='$_REQUEST[isbn]'"; 

答えて

0

まず、私は私が直接要求値を注入する上でprepared statementsを好むについてのコメントをしなければならないと感じクエリ文字列に変換します。

<?php 

$sql="select * from Book_info where user_id=$u_id"; 

$title = $_REQUEST['title']; 
$location = $_REQUEST['location']; 

if($title != null) { 
    $sql .= " AND title like '%$title%'"; 
} 

if($location != null) { 
    $sql .= " AND location like '%$location%'"; 
} 

//and so on... 

あなたは値がnullであるかどうかを確認した後、値として限り、あなたのクエリに新しいwhere句を追加するということでアイデア:あなたの問題へ

最も簡単な解決策は、このようなものになるだろうnullではありません(または空の場合や、他の述語を追加したい場合)。