В настоящее время я пытаюсь сделать функцию расширенного поиска. В настоящее время у меня есть форма с 7 возможными полями ввода. Я пытаюсь добиться того, чтобы, когда пользователи заполняли поля формы, эти поля будут определять условия, установленные для моего бэкэнда для «фильтрации» данных.
Следовательно, если пользовательские поля в 2 полях из 7, эти 2 поля ввода будут использоваться в качестве условий фильтрации моего бэкэнда. Если другой пользователь заполняет 3 поля ввода из 7, то 3 условия и т. Д. Таким образом, пользователи могут выбрать для заполнения любые возможные комбинации / количество входов: минимум 1 и максимум 7. Условия будут установлены только при заполнении поля ввода. (Надеюсь, вы, ребята, понимаете, откуда я иду, хахаха)
Таким образом, я хотел бы спросить, как мне подходить к этому?
As My understanding
HTML Form
<form action="#" method="post">
<div class="form-group">
<label class="col-md-2">Search Field 1 </label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 1" name="Field[][Field_one]">
</div>
<label class="col-md-2">Search Field 2</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 2" name="Field[][Field_two]">
</div>
</div>
<div class="form-group">
<label class="col-md-2">Search Field 3</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 1" name="Field[][Field_three]">
</div>
<label class="col-md-2">Search Field 4</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 4" name="Field[][Field_four]">
</div>
</div><div class="form-group">
<label class="col-md-2">Search Field 5</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 5" name="Field[][Field_five]">
</div>
<label class="col-md-2">Search Field 6</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 6" name="Field[][Field_six]">
</div>
</div><div class="form-group">
<label class="col-md-2">Search Field 7</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Search Field 7" name="Field[][Field_seven]">
</div>
</div>
<div class="form-group">
<label class="col-md-2">Search</label>
<div class="col-md-10">
<input type="submit" name="submit" value="Find" />
</div>
</div>
</form>
PHP Script:
if( isset( $_POST['Field'] ) ){
$levels = $_POST['Field'];
foreach($levels as $level ){
if( isset($level['Field_one']) && strlen($level['Field_one']) > 0 ){
$Field_one = $level['Field_one'] ;
}
if( isset($level['Field_two']) && strlen($level['Field_two']) > 0 ){
$Field_two = $level['Field_two'];
}
if( isset($level['Field_three']) && strlen ($level['Field_three']) > 0 ){
$Field_three = $level['Field_three'];
}
if( isset($level['Field_four']) && strlen($level['Field_four']) > 0 ){
$Field_four = $level['Field_four'];
}
if( isset($level['Field_five']) && strlen($level['Field_five']) > 0 ){
$Field_five = $level['Field_five'];
}
if( isset($level['Field_six']) && strlen($level['Field_six']) > 0 ){
$Field_six = $level['Field_six'];
}
if( isset($level['Field_seven']) && strlen($level['Field_seven']) > 0 ){
$Field_seven = $level['Field_seven'];
}
}// end foreach
}// end if
Просто решение, вы можете попробовать следующее .. это может помочь
//get all the request params
$request = $_POST;
$query_data = array();
//check for the each filter set or not
if(isset($_POST['field1'] && $_POST['field1']!="" )){
$query_data['column1'] = $_POST['field1'];
}
.
.
.
.
if(isset($_POST['field7']) && $_POST['field7']!=""){
$query_data['column7'] = $_POST['field7'];
}
$where_condition = " where ";
foreach ($query_data as $key => $value ){
$where_condition .= "$key='$value' AND ";
}
$where_condition .= " 1=1 "
$sql = "select * from table1 ".$where_condition;
$queryarray = array();
if(isset($_POST['field1'])&&strlen($_POST['field1']) > 0) array_push($queryarray,'column 1 = "'.$_POST['field1'].'"') ;
.
.
.
V
if(isset($_POST['field7'])&&strlen($_POST['field7'])>0) array_push($queryarray,'column 7 = "'.$_POST['field7'].'"') ;
$query = 'SELECT * FROM table WHERE'.implode(' AND ', $queryarray);
Я думаю, что это лучший подход