2017-10-10 34 views
2

私は私が人々が私のテーブルから適切なミュージシャンのプロフィールを見つけることができるようにする検索サイドバーを持っているこの音楽サイトを持っています。検索フォームはチェックボックスで構築され、PHPとMySQLを使用して自分のテーブルに接続します。私は、場所、ユーザータイプ、彼らが演奏する音楽のジャンル、そしてアルバムがリリースされているかどうかなどのカテゴリからプロファイルを探してほしい。複数のチェックボックス名で検索をクエリ

<form action="udforsk.php" method="post" enctype="multipart/form-data"> 
    <h2>User type</h2> 
    <input type="checkbox" name="type[]" value="Solo"> 
    <input type="checkbox" name="type[]" value="Duo"> 
    <input type="checkbox" name="type[]" value="Band"> 

    <h2>Location</h2> 
    <input type="checkbox" name="location[]" value="area_1"> 
    <input type="checkbox" name="location[]" value="area_2"> 
    <input type="checkbox" name="location[]" value="area_3"> 
    <input type="checkbox" name="location[]" value="area_4"> 
    <input type="checkbox" name="location[]" value="area_5"> 

    <h2>Genre</h2> 
    <input type="checkbox" name="genre[]" value="genre_1"> 
    <input type="checkbox" name="genre[]" value="genre_2"> 
    <input type="checkbox" name="genre[]" value="genre_3"> 
    <input type="checkbox" name="genre[]" value="genre_4"> 
    <input type="checkbox" name="genre[]" value="genre_5"> 

    <h2>Album or demo</h2> 
    <input type="checkbox" name="release[]" value="album"> 
    <input type="checkbox" name="release[]" value="demo"> 
</form> 

私は、これは幅クエリフックアップすることにしたい、しかし、私は、カテゴリの一部が記入されていない検索をどのように扱うかの問題があります。ポジションチェックボックスのどれもチェックされていない場合、すべてのロケーションはクエリ検索で公正ゲームです。

今は私のクエリがこのように見えるユーザーの後ろにINを使用して検索しようとしていますが、$ _POST入力が空のときに問題が発生します。今は場所とジャンルで動作させるようにしようとしています。

$sql = "SELECT artist.ArtistID, artist.ArtistName, artist.RegionID, 
artist_genre.ArtistID, artist_genre.GenreID 
FROM artist, artist_genre 
WHERE artist.RegionID IN ($areaer) AND artist_genre.GenreID IN ($genrer)"; 

一般的には、チェックボックスで複数の検索変数を持つクエリ検索はたくさん助けのでしょうかすべてのヘルプ。

$conditions = []; 
$query = 'your query '; 
$conditions[] = isset($_POST['location']) ? 'artist.RegionID in ('.implode(',',$_POST['location']).')'; 
$conditions[] = isset($_POST['genre']) ? 'artist.GenreID in ('.implode(',',$_POST['genre']).')'; 
if(sizeof($conditions) > 0) query.='where '.implode(' and ',conditions); 

をしかし、あなたが準備されたステートメントで作業する場合、それは良いでしょう:

+0

[PHP:投稿されたvarsが空であるかどうかを確認](https://stackoverflow.com/questions/3190464/php-check-if-any-posted-vars-are-empty-form-all-fields-required ) –

+0

[$ _POST-valueが空であるかどうかを確認](https://stackoverflow.com/questions/9154719/check-whether-post-value-is-empty) –

+0

デフォルト値を使用する場合は、入力タイプ= "隠し"なので、何もチェックされていないと、デフォルト値が投稿されます –

答えて

0

あなたはこのコードを試すことができます。

関連する問題