2012-04-26 13 views
0


検索フォームからの入力値に基づいてMYSQLデータベースにクエリするPHPドキュメントがあります。私はアプリケーション全体をはるかに使いやすくすると思われる機能を1つ追加するのに苦労している以外は、すべてが完全に機能しています。

フォームからのユーザ入力に基づいてPHPドキュメントのSQLクエリを変更するのが難しい

私のデータベース内にテーブルは、基本的には様々な社会クラブの情報を格納しています。それは彼らの場所、名前、booking_price、alcohol_permittedに関するデータを持っています。私が助けを必要とするビットはalcohol_permittedに関連付けられています。データベースには、1または2が格納されています.2は、アルコールが許可されていることを意味し、1は、そうでないことを意味します。

現在、私のフォームは、次のようになります。

<form> 
    <label for="alcohol_check">Search clubs where alcohol permitted?</label> 
     <input type="radio" id="alcohol_check1" value="1" /><label for="radio1">No</label> 
     <input type="radio" id="alcohol_check2" value="2" /><label for="radio2">Yes</label> 
     <input type="radio" id="alcohol_check3" value="???" /><label for="radio3">Show both</label> 

    <label for="club_name">Enter social club name:</label> 
     <input type="text" id="club_name" name="club_name"/> 
</form> 



私のPHPは、次のようになります。

$user_alcohol_permitted_selection = $_POST['alcohol_check']; //Value sent using jquery .load() 
$user_social_club_name_input = $_POST['name']; //Value sent using jquery .load() 

$query="SELECT * FROM social_clubs 
     WHERE name = $user_social_club_name_input 
     AND 
     WHERE alcohol_permitted = $user_alcohol_permitted_selection"; 

問題は、現時点です、私のクエリはソーシャルクラブを検索するだけですアルコールを提供するか、しないでください。現在、alcohol_permittedフォームから渡された値は1または2です。 ユーザが「both」オプションを選択した場合、アルコールを扱うソーシャルクラブとそうでないクラブを取得するようにクエリを実行するにはどうすればよいですか?私はそれを把握できません!クエリにif文が必要ですか?

これをチェックしていただきありがとうございます。私はこれを非常にうまく説明していない場合は申し訳ありません。

+2

あなたは** [Bobby Tables](http://bobby-tables.com/)について読んで、SQLインジェクションを避けるためにプリペアドステートメントを使い始める必要があります。 – eggyal

答えて

1

これは動作するはずです。

さらに
$user_alcohol_permitted_selection = $_POST['alcohol_check']; //Value sent using jquery .load() 
$user_social_club_name_input = $_POST['name']; //Value sent using jquery .load() 

$query="SELECT * FROM social_clubs 
     WHERE name = $user_social_club_name_input"; 

if ($user_alcohol_permitted_selection == "???") 
{ 
    $query.= "AND WHERE alcohol_permitted = 1 OR alcohol_permitted = 2"; 
} else { 
    $query.= "AND WHERE alcohol_permitted = $user_alcohol_permitted_selection"; 
} 

alcohol_permittedにのみ、私はあなたが彼の答えで提案therealmitchconnorsようBOOLする列の型を変更することをお勧めしたい1または2の値が含まれている場合。 !に注意してください

$query="SELECT * FROM social_clubs 
     WHERE name = $user_social_club_name_input";  

if ($user_alcohol_permitted_selection != "???") 
{ 
    $query.= "AND WHERE alcohol_permitted = $user_alcohol_permitted_selection"; 
} 

その後、あなたはに条件文をダウントリムすることができます。

+1

WHERE alcohol_permitted = 1 AND alcohol_permitted = 2は、「OR」にする必要があります。 'x = 1 AND x = 2'は常にfalseです。 –

+0

@FrankFarmerありがとうございます。私の悪い。 – LukeP

+1

'if(!$ user_alcohol_permitted_selection ==" ??? ")'はおそらく 'if($ user_alcohol_permitted_selection!=" ??? ")'でなければなりません。 –

0

まず、alchohol_permittedカラムのデータ型をbool(MySQLのbit(1))に変更してください。読んでいるだけで、私は寒さを感じます...

今、あなたの質問に。これを試してください:

WHERE $user_alcohol_permitted_selection IS NULL 
OR alcohol_permitted = $user_alcohol_permitted_selection 
関連する問題