私は顧客情報と機器を追跡するために使用されているデータベースを持っています。私はすべてのデータを読み込み可能な形式にマージする作業用の検索ページを持っています。 1ページに1つの結果しか表示されないように設定されています。検索ページ区切りのフィルタ?
検索にフィルタリングを追加しようとしています。この方法では、姓だけを検索している場合、機器データベースを検索する時間を無駄にすることはありません。 CustomersテーブルのLast Nameフィールドのみを検索します。私は問題を解決するためには、次のページが押されたときに結果がゼロになることがある。
私はなぜそれが起こっているのか考えています。これは、フィルターを使用するためにチェックボックス付きの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> ";
}
}
たとえば、姓「姓」を検索すると、結果1の10が表示されます。次に、次のボタンを押すと、検索されたキーワードで結果が見つからない場合に組み込んだエラーが表示されます。
私は次のボタンを押すとGET URLが2ページ目に変わりますが、そのときに$ SLastName issetが見えなくなるため検索SQLの値が失われることが考えられます。
これを解決する方法がわかりません。
TYを支援する任意のページで、あなたのクエリの希望を実行する必要があることに基づいてキーワードを取得することができます。以下のコードを追加して終了しました。 もちろんセッションはトップで開始します session_start(); 最初の宣言を変更しました $ construct = ''; これを に変更しました$ construct = $ _SESSION "[" construct "]; ifステートメントを閉じる前にすべてのセットの後に $ _SESSION [" construct "] = $ construct;を追加しました 私はセッション全体を通して使用していますサイトを殺すことができないので、最初の検索ページの先頭にこれを追加しました。 $ _SESSION ["construct"] = ''; 私がそれをしなければ、最後のオプションを保存します新しい検索で – Markw