所以我想使用多个过滤器过滤来自 db 的数据。我现在有 2 个选择,GENDER和MARITAL STATUS。如果我从GENDER中选择例如'male',而在MARITAL STATUS中没有任何内容,我希望结果是所有具有选项'male'的数据。如果我还从 MARITAL STATUS 中选择“离婚”,那么结果将是同时具有“男性”和“离婚”选项的数据。
<div class="sidebar-filters">
<div class="filters">
<span>Gender</span>
<select id="gender" name="gender">
<option value="">Please select gender</option>
<option value="male">male</option>
<option value="female">female</option>
<option value="agender">agender</option>
</select>
<span>Marital Status</span>
<select id="marital_status" name="marital_status">
<option value="">Please select marital status</option>
<option value="married">married</option>
<option value="widowed">widowed</option>
<option value="separated">separated</option>
<option value="divorced">divorced</option>
<option value="single">single</option>
</select>
</div>
</div>
<div class="results-wrap">
<?php
$query = "SELECT * FROM reviews1";
$result = mysqli_query($conn, $query);
$queryResult = mysqli_num_rows($result);
if($queryResult > 0){
while($row = mysqli_fetch_assoc($result)){
echo "<div class='review-wrap'>
<h3>".$row['r_title']."</h3>
<p>".$row['age']."</p>
</div>";
}
}else{
echo "There are no results matching your search";
}
?>
在我的 scripts.js 中,我有
$('#gender').on('change', function(){
var value = $(this).val();
$.ajax({
url: "http://uttertest.ecom-shops.com/wp-admin/admin-ajax.php",
type: 'POST',
data: {
action: 'filtering',
request: value
},
beforeSend:function(){
$(".results-wrap").html("Wait...");
},
success:function(data){
$(".results-wrap").html(data);
},
error:function(xhr){
$(".results-wrap").html("Error");
}
});
});
在functions.php中我有
add_action( 'wp_ajax_nopriv_filtering', 'filtering' );
add_action( 'wp_ajax_filtering', 'filtering' );
function filtering(){
$server = "localhost";
$username = "username";
$password = "*****";
$dbname = "databasename";
$conn = mysqli_connect($server, $username, $password, $dbname);
$request = $_POST['request'];
$query = "SELECT * FROM reviews WHERE gender='$request'";
$result = mysqli_query($conn, $query);
$queryResult = mysqli_num_rows($result);
if($queryResult > 0){
while($row = mysqli_fetch_assoc($result)){
echo "<div class='review-wrap'>
<h3>".$row['r_title']."</h3>
<p>".$row['age']."</p>
</div>";
}
}else{
echo "There are no results matching your search";
}
}
到目前为止很好,如果我改变性别,数据显示正确,根据选择的选项。问题是如何结合选择中的两个选择?不仅这两个选择,还有一些将来在 html 中添加的复选框,选中或未选中,并更新从 db 获取的数据,每次更改选择或选中或未选中复选框时。
此外,我不需要提交按钮,只要选中复选框或选择 select 中的选项,更改就应适用于更改。