我有一个数据库,用于跟踪客户信息和设备。我有一个有效的搜索页面,它将所有数据合并为可读格式。它被设置为每页仅显示一个结果。
我正在尝试在搜索中添加过滤。这样,如果您只搜索姓氏,就不会浪费时间搜索设备数据库。它只会搜索客户表中的姓氏字段。我已经解决了这个问题,当按下下一页时,它会得到零结果。
我知道为什么会发生这种情况。这是因为我使用带有复选框的 isset 来执行过滤器。
$SLastName = $_GET['LastName'];
$SFirstName = $_GET['FirstName'];
$SAddress = $_GET['Address'];
$SAP = $_GET['AP'];
$SEquipment = $_GET['Equipment'];
$SEverything = $_GET['Everything'];
if (isset($SLastName)){
$construct .="(customers.LastName LIKE '%$search_each%')";
if (isset($SFirstName)){
$construct .=" OR (customers.FirstName LIKE '%$search_each%')";
}
if (isset($SAddress)){
$construct .=" OR (customers.Address LIKE '%$search_each%')";
}
if (isset($SAP)){
$construct .=" OR (aps.AP LIKE '%$search_each%')";
}
if (isset($SEquipment)){
$construct .=" OR (equipment.ESN LIKE '%$search_each%')
OR (equipment.WMAC LIKE '%$search_each%')
OR (equipment.SN LIKE '%$search_each%')
OR (equipment.Manufacturer LIKE '%$search_each%')";
}
if (isset($SEverything)){
$construct .=" OR (customers.Account LIKE '%$search_each%')
OR (customers.AlternatePhone LIKE '%$search_each%')
OR (customers.Phone LIKE '%$search_each%')
OR (routableip.routable_IP LIKE '%$search_each%')
OR (unitip.UNITIP_new LIKE '%$search_each%')";
}
}
else if(isset($SFirstName)){
$construct .="(customers.FirstName LIKE '%$search_each%')";
if (isset($SAddress)){
$construct .=" OR (customers.Address LIKE '%$search_each%')";
}
if (isset($SAP)){
$construct .=" OR (aps.AP LIKE '%$search_each%')";
}
if (isset($SEquipment)){
$construct .=" OR (equipment.ESN LIKE '%$search_each%')
OR (equipment.WMAC LIKE '%$search_each%')
OR (equipment.SN LIKE '%$search_each%')
OR (equipment.Manufacturer LIKE '%$search_each%')";
}
}
else if(isset($SAddress)){
$construct .="(customers.Address LIKE '%$search_each%')";
if (isset($SAP)){
$construct .=" OR (aps.AP LIKE '%$search_each%')";
}
if (isset($SEquipment)){
$construct .=" OR (equipment.ESN LIKE '%$search_each%')
OR (equipment.WMAC LIKE '%$search_each%')
OR (equipment.SN LIKE '%$search_each%')
OR (equipment.Manufacturer LIKE '%$search_each%')";
}
}
else if(isset($SAP)){
$construct .="(aps.AP LIKE '%$search_each%')";
if (isset($SEquipment)){
$construct .=" OR (equipment.ESN LIKE '%$search_each%')
OR (equipment.WMAC LIKE '%$search_each%')
OR (equipment.SN LIKE '%$search_each%')
OR (equipment.Manufacturer LIKE '%$search_each%')";
}
}
else if(isset($SEquipment)){
$construct .="(equipment.ESN LIKE '%$search_each%')
OR (equipment.WMAC LIKE '%$search_each%')
OR (equipment.SN LIKE '%$search_each%')
OR (equipment.Manufacturer LIKE '%$search_each%')";
}
搜索输入页面使用复选框。在提交页面上选中这些框以查看设置了哪些字段。设置的字段决定了 sql 的内容。
就像我说的,这对于查找第一个结果来说效果很好。
这是我的代码中与分页相关的部分。
$start = isset($_GET['start']) ? $_GET['start']: '';
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0;
//Pagination Starts
$prev = $start - $per_page;
$next = $start + $per_page;
$adjacents = 3;
$last = $max_pages - 1;
if($max_pages > 1){
//previous button
if (!($start<=0)) {
$PrevButton .= "<a href='search.php?
search=$search&submit=Search&start=$prev' class='button Prev1'
style='vertical-
align:middle'><span>Prev</span></a> ";
}
else{
$PrevButton .= "<a class='incative' style='vertical-
align:middle'><span>Prev</span></a> ";
}
$current =$next;
//next button
if (!($start >=$foundnum-$per_page)){
$NextButton = "<a href='search.php?
search=$search&submit=Search&start=$next' class='button Next2'
style='vertical-align:middle'><span>Next</span></a>";
}
else {
$NextButton = "<a class='incative' style='vertical-
align:middle'><span>Next</span></a> ";
}
}
例如,如果我搜索姓氏 Smith。它将显示 10 个结果中的第 1 个。然后,当我按下“下一步”按钮时,当它找不到任何包含搜索关键字的结果时,它会显示我内置的错误。
我认为发生的情况是,当按下下一个按钮时,它会更改 GET url 以显示第 2 页,但当发生这种情况时,它会丢失搜索 sql 的值,因为它不再看到 $SLastName 设置。
我不知道如何解决这个问题。
最佳答案
是的,你是对的,你必须将搜索关键字存储在 session 变量中,从那里你可以在任何页面中获取关键字,并在此基础上运行你的查询希望这会对你有所帮助
关于php - 带分页的搜索过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614167/