2016-09-16 20 views
1

複数オプションの検索を作成しようとしています。私はどこからでも見てきましたが、適切な解決策を見つけることができないようですが、多くのウェブサイトでこれがあります。 だから私は(あなたが少しない穴に切り捨てられます)私のHTMLフォームを持っている:PHP Mysqli詳細検索(マルチオプション)

<form method="get" id="searchForm" name="searchForm" action="search-text.php" > 
<select name="make" id="make"> 
<option value="">ANY MAKE</option> 
<option value="make1">MAKE1</option> 
<option value="make2">MAKE2</option> 
</select> 
<select name="model" id="model"> 
<option value="">ANY MODEL</option> 
<option value="model1">MODEL1</option> 
<option value="model2">MODEL2</option>     
</select> 
<select name="minprice" id="minprice"> 
<option value="">ANY PRICE</option> 
<option value="1">1</option> 
<option value="2">2</option>     
</select> 
<select name="maxprice" id="maxprice"> 
<option value="">ANY PRICE</option> 
<option value="1">1</option> 
<option value="2">2</option>     
</select> 
</form> 

その後search.phpページに、私はすべての変数を取得することができますが、私はSELECTクエリを記述するために苦労しています。私はANDを使用しようとしましたが、もちろん、これはすべての変数が設定されている場合にのみ機能します。私は合計で8つの変数を設定することができます。 私は以下のようなことをしようとしましたが、明らかに行く方法ではありません。

SELECT * FROM search data where if(isset($make)) AND if(isset($model)) etc etc 

ご協力いただきありがとうございます。アドバイスをいただければ幸いです。私はできる限り多くのことを学ぼうとしていますが、私は本当にこのことに固執しています。

UPDATE:だから私はいくつかの創造的な実験を行っていると私は近いんだと感じ、それが働いて得ることができません。

$query = array(); 
if (!empty($_GET['vType'])) { 
$query[] = "vType='$vType'"; 
} 
if (!empty($_GET['make'])) { 
$query[] = "make='$make'"; 
} 
if (!empty($model)) { 
$query[] = "model='$model'"; 
} 
if (!empty($yearfrom)) { 
$query[] = "minyear >'$yearfrom'"; 
} 
if (!empty($yearto)) { 
$query[] = "maxyear>'$yearto'"; 
} 
if (!empty($minprice)) { 
$query[] = "minPrice >'$minprice'"; 
} 
if (!empty($maxprice)) { 
$query[] = "maxyear >'$maxprice'"; 
} 
if (!empty($location)) { 
$query[] = "location='$location'"; 
} 
if (empty($query)){ 
$where = "WHERE"; 
}else{ 
$where = ""; 
} 
$query = implode(' AND ', $query); 
$sql = "SELECT * FROM searchdata $where $query"; 

$result = mysqli_query($conDB, $sql); 
if (mysqli_num_rows($result) === 0) { 
echo 'Nothing Found'; 
} 
while ($row = $result->fetch_assoc()) { 
echo $row['vType']; 

私はここに非常に多くの何か間違ったことをやっていると確信しています。おかげで皆私は本当にあなたの助けに感謝します

+0

は、あなたが送信ボタンを持っていますか? –

+0

具体的にどのようにフレームを照会したいか教えてください! – Jagrati

答えて

0

のように行うことができますちょうど多くの多くの時間後にみんなそれを考え出しました。他の誰かが同じ問題に直面しているときに私がコードを投稿すると思った。あなたのすべての返信をお寄せいただきありがとうございます。 $ query = array();

if (!empty($_GET['vType'])) { 
$vType = $_GET['vType']; 
$query[] = "vType='$vType'"; 
} 
if (!empty($_GET['make'])) { 
$make = $_GET['make']; 
$query[] = "make='$make'"; 
} 
if (!empty($_GET['model'])) { 
$model = $_GET['model']; 
$query[] = "model='$model'"; 
} 
if (!empty($_GET['minyear'])) { 
$yearfrom = $_GET['minyear']; 
$query[] = "years>='$yearfrom'"; 
} 
if (!empty($_GET['maxyear'])) { 
$yearto = $_GET['maxyear']; 
$query[] = "years<='$yearto'"; 
} 
if (!empty($_GET['minPrice'])) { 
$minprice = $_GET['minPrice']; 
$query[] = "vPrice>='$minprice'"; 
} 
if (!empty($_GET['maxPrice'])) { 
$maxprice = $_GET['maxPrice']; 
$query[] = "vPrice<='$maxprice'"; 
} 
if (!empty($_GET['location'])) { 
$location = $_GET['location']; 
$query[] = "location='$location'"; 
} 
if (!empty($query)){ 
$where = "WHERE"; 
}else{ 
$where = ""; 
} 

$searchquery = implode(' AND ', $query); 
$getsearch = "SELECT * FROM searchdata $where $searchquery"; 

$ressearch = mysqli_query($conDB, $getsearch); 
if (mysqli_num_rows($ressearch) === 0) { 
echo 'Nothing Found'; 
}else{ 
while($r = $ressearch->fetch_assoc()) { 
//echo results here... 
} 

みんなありがとう:)

+0

あなたのコードはSQLインジェクションに対して脆弱です –

0

あなたは、PHPスクリプトを使用して、あなたのクエリをフレームすることができます。このような何か:

$query = "select * search_data where"; 

if(isset($make) && isset($model)){ 
    //do something 
    $query .= "something you want to do "; 
} 
+0

ありがとうございます。私はこのようなものを考えてみましたが、訪問者が検索することができる方法はたくさんあります(場所とmaxpriceなどを使ってmakeとlocationを使って検索することができます)。配列から文字列を作成する? –

+0

@FelipeFernándezSánchez非常に多くの方法で検索できます。厳密な比較、部分文字列検索が必要なもの、多少の比較が必要なもの、セットから選択が必要なものがあります。この情報を保持していると思われる配列のリスト –

+0

どうすればいいですか?if(isset($ _ GET ['make']; $ query = "make = $ make" AND?最後のクエリはSELECT * FROM searchdata WHERE $ makeですか? –

1

あなたはまた、その

$sql = "select * from table_name where column = $param1" 

if(isset($param2)) 
{ 
$sql=. "and column2 = $param2" 
}` 
if(isset($param3)) 
{ 
$sql=. "and column3 = $param3" 
}` 
if(isset($param4)) 
{ 
$sql=. "and column4 = $param4" 
}` 
+0

それは他の答えとどのように違うのですか? –

+0

私のparamsはdiffです – Ashish

関連する問題