分页和php会话变种

时间:2011-12-01 03:17:05

标签: php session pagination

我在这里只有一个简单的问题是desc:

我正在为我的网站处理新闻档案页面,搜索档案是以开始日期,结束日期和新闻类别作为搜索参数完成的。表单值存储在$ _SESSION var中,然后它们作为数组传递以用于分页和其他目的。 我的问题是如果用户由于某种原因再次进行新的搜索,如何防止在主存档搜索页面上显示搜索结果。

这是代码

<?php 
session_start();
if (isset($_POST['submit'])) {
    //get data from the form
    $archFld_1 = $_POST['archiveFld1'];
    $archFld_2 = $_POST['archiveFld2'];
    $archFld_3 = $_POST['archiveFld3'];
   //just some check on fields
   if (strlen($archFld_1) > 10) { $archFld_1 = ""; }
   if (strlen($archFld_2) > 10) { $archFld_2 = ""; }
   //save them as a array and store to session var
   $_archValues = array($archFld_3, $archFld_1, $archFld_2);
   $_SESSION['storeValues'] = $_archValues;
}
if (isset($_SESSION['storeValues'])) {
    //check params for search
    //set cat for query
    if ($_SESSION['storeValues'][0] > 0) { $valCat = "AND newsCat=".     $_SESSION['storeValues'][0] ." "; } else { $valCat = ""; }
    //set date for query
    if(($_SESSION['storeValues'][1] != "" ) && ($_SESSION['storeValues'][2] == "")) {
        $DateStart = $_SESSION['storeValues'][1];
        $valDate = " AND STR_TO_DATE(newsDate, '%d-%m-%Y') >= STR_TO_DATE('$DateStart', '%d-%m-%Y') ";
    }
    if(($_SESSION['storeValues'][2] != "") && ($_SESSION['storeValues'][1]=="")) {
        $DateEnd = $_SESSION['storeValues'][2];
        $valDate = " AND STR_TO_DATE(newsDate, '%d-%m-%Y') <= STR_TO_DATE('$DateEnd', '%d-%m-%Y') ";
    }
    if(($_SESSION['storeValues'][1]!="") && ($_SESSION['storeValues'][2] != "")) {
        $DateStart = $_SESSION['storeValues'][1];
        $DateEnd = $_SESSION['storeValues'][2];
        $valDate = " AND STR_TO_DATE(newsDate, '%d-%m-%Y') BETWEEN STR_TO_DATE('$DateStart', '%d-%m-%Y') AND STR_TO_DATE('$DateEnd', '%d-%m-%Y') ";
    }
    //query string and stire it to session
    $archQuery_string = $valCat.$valDate;
    $_SESSION['storeQuery'] = $archQuery_string;
}
//pagination start
$page = $_GET['id'];
$perPage = 10;
$result = wbQuery("SELECT * FROM wb_news WHERE newsLang=1 ". $_SESSION["storeQuery"] ."ORDER BY newsId DESC"); 
$totalPages = mysql_num_rows($result);
if(!$page)
$page = 1;
$start = ($page - 1)*$perPage;
?>
    <div id="sps_middle">
        <div class="sps_cnt">
            <div id="sps_middle_ly1">
                <div class="sps_cnt_small">
                    <div class="sps_page_title"><h3><?php echo $wb_lng['txtArchiveTitle']; ?></h3></div>
                        <div class="sps_pages_cnt" style="padding-top: 10px; float: left; margin-bottom: 15px;">
                            <div class="sps_middle_col01">
                                <div style="float: left;">
                                <p>
                                    <?php echo $wb_lng['txtArchiveInfo']; ?>
                                </p>
                                    <form action="<?php $PHP_SELF; ?>" method="post" name="archiveForm" class="archiveForm">
                                        <ul>
                                            <li>
                                                <input name="archiveFld1" type="text" id="archiveFld1" value="<?php echo $wb_lng['txtArhivaFld_01']; ?>" />
                                                <input name="archiveFld2" type="text" id="archiveFld2" value="<?php echo $wb_lng['txtArhivaFld_02']; ?>" />
                                                <select name="archiveFld3">
                                                    <option value="0"><?php echo $wb_lng['txtArhivaFld_07']; ?></option>
                                                    <option value="0" ><?php echo $wb_lng['txtArhivaFld_06']; ?></option>
                                                    <option value="1"><?php echo $wb_lng['txtArhivaFld_03']; ?></option>
                                                    <option value="2"><?php echo $wb_lng['txtArhivaFld_04']; ?></option>
                                                    <option value="3"><?php echo $wb_lng['txtArhivaFld_05']; ?></option>
                                                </select>
                                            </li>
                                            <li style="float: right;">
                                                <input name="reset" type="reset" class="sps_archiveform_btn" value="<?php echo $wb_lng['txtArchiveFormReset']; ?>"/>
                                                <input name="submit" type="submit" class="sps_archiveform_btn" value="<?php echo $wb_lng['txtArchiveFormSend']; ?>"/>
                                            </li>
                                        </ul>
                                    </form>
                                </div>
                                <hr />
<?php
if (#HERE GOES SOME CODE TO PERFORM THE CHECK!!!#) {
    //perform db query
    $result = wbQuery("SELECT * FROM wb_news WHERE newsLang=1 ". $_SESSION['storeQuery'] ."ORDER BY newsId DESC LIMIT $start, $perPage"); 
    //count rows
    $totalnews = mysql_num_rows($result);
    $count = 1;
    if($totalnews == 0) {
        //no results, say to the user
        echo "\t\t\t<div class=\"cil_news_text_big\">\n\t\t\t\t".$wb_lng['txtArchiveNoEntries']."\n\t\t\t</div>\n";
    } else {
        //we have results, yeeeeeeeeey
        while($ROWnews = mysql_fetch_object($result)){
            //set link extensions by the news cat
            switch ($ROWnews->newsCat) {
                case 1:
                    $newsCat_link = "news";
                    break;
                case 2:
                    $newsCat_link = "statements";
                    break;
                case 3:
                    $newsCat_link = "events";
                    break;
            }
            //text summary
            if (strlen($ROWnews->newsShort) > 0 ) {$newsShortTxt = strip_tags($ROWnews->newsShort);
                if ($lang_id==2) { $newsShortTxt =  wbTranslit($newsShortTxt); }
            } else {
                $newsShortTxt = strip_tags($ROWnews->newsFull);
                if ($lang_id==2) { $newsShortTxt = wbTranslit($newsShortTxt); }
            }
            $newsShortTxt = wbShorTxt($newsShortTxt, 210, "... <a title=\"".$wb_lng['txtShowMore']."\" href=\"http://".$_SERVER['HTTP_HOST']."/".$lang_link."/".$newsCat_link."/".$ROWnews->newsId."/full/\">".$wb_lng['txtShowMore']."...</a>");
            //show news
            echo "\t\t<div class=\"sps_news_list\">\n";
            echo "\t\t<div class=\"sps_news_l\">\n";
            echo "\t\t\t<img alt=\"\" src=\"http://".$_SERVER['HTTP_HOST']."/content/images/news/_thumb/".$ROWnews->newsImageThumb."\" />\n";
            echo "\t\t</div>";
            echo "\t\t<div class=\"sps_news_r\">\n";
            //transliterate title
            if ($lang_id==2) { $newsTitle =  wbTranslit($ROWnews->newsTitle); } else { $newsTitle =  $ROWnews->newsTitle; } 
            echo "\t\t\t<div class=\"sps_news_title\">\n\t\t\t\t<a title=\"".$newsTitle."\" href=\"http://".$_SERVER['HTTP_HOST']."/".$lang_link."/".$newsCat_link."/".$ROWnews->newsId."/full/\">".$newsTitle."</a>\n\t\t\t</div>\n";
            echo "\t\t\t<div class=\"sps_news_date\">\n\t\t\t\t".$ROWnews->newsDate."\n\t\t\t</div>\n";
            echo "\t\t\t<div class=\"sps_news_text_sh\">\n\t\t\t\t".$newsShortTxt."\n\t\t\t</div>\n";
            echo "\t\t</div>";
            echo "\t\t</div>";
            //show <hr /> based on $count
            if($totalnews != $count) { echo "\t\t\t<hr />\n"; }
            $count++;
        }
    }
//pagination check
if($totalPages>$perPage) {
?>
                                <hr />
                                <div class="sps_pagginate">
                                   <?PHP wbPageTurnFront($PHP_SELF."/".$lang_link."/archive/", $totalPages, $page, $perPage); ?>
                                </div>
<?php 
    }
}
?>

有什么想法吗? Tnx:)

1 个答案:

答案 0 :(得分:0)

你可能正在寻找这样的东西吗?:

# start of page:
if (!isset($_SESSION['HasSearched']) {
    $_SESSION['HasSearched'] = 0;
}

// ...
// ...
// ...

# when you execute code for displaying search results
# check first if the session has been set:
if ($_SESSION['HasSearched'] == 0) {
    # proceed with search code
    # then set it to 1 since a search has been performed just now
    $_SESSION['HasSearched'] = 1;
} else {
    # this means a search had been previously made.
    # based on your requirement, no results should be displayed
    # since the assumption would be that a new search would be put in place

    # code to display fresh page with search form goes here

    # reset the session variable's value
    $_SESSION['HasSearched'] = 0;
}

如果没有,请告诉我们..

[编辑]根据帖子中的新信息:

你可以尝试一下吗?:

<?php 
session_start();
# check if the form was submitted
if (isset($_POST['submit'])) {
    //get data from the form
    $archFld_1 = $_POST['archiveFld1'];
    $archFld_2 = $_POST['archiveFld2'];
    $archFld_3 = $_POST['archiveFld3'];
    //just some check on fields
    if (strlen($archFld_1) > 10) { $archFld_1 = ""; }
    if (strlen($archFld_2) > 10) { $archFld_2 = ""; }
    //save them as a array and store to session var
    $_archValues = array($archFld_3, $archFld_1, $archFld_2);
    $_SESSION['storeValues'] = $_archValues;
    $newSearch = 0;
} else if (isset($_GET['newSearch'])) {
    if ($_GET['newSearch'] == 1) {
        # new search requested by user (clicked link at the end (for now))
        $_SESSION['storeValues'] = NULL;
        $newSearch = 1;
    }
} else {
    # this may mean that the form was not submitted, nor was the `new search` link clicked
}

# let's check if we are just refreshing or taking from a new page or not
if (isset($_SESSION['storeValues'])) {
    //check params for search
    //set cat for query
    if ($_SESSION['storeValues'][0] > 0) { $valCat = "AND newsCat=".     $_SESSION['storeValues'][0] ." "; } else { $valCat = ""; }
    //set date for query
    if(($_SESSION['storeValues'][1] != "" ) && ($_SESSION['storeValues'][2] == "")) {
        $DateStart = $_SESSION['storeValues'][1];
        $valDate = " AND STR_TO_DATE(newsDate, '%d-%m-%Y') >= STR_TO_DATE('$DateStart', '%d-%m-%Y') ";
    }
    if(($_SESSION['storeValues'][2] != "") && ($_SESSION['storeValues'][1]=="")) {
        $DateEnd = $_SESSION['storeValues'][2];
        $valDate = " AND STR_TO_DATE(newsDate, '%d-%m-%Y') <= STR_TO_DATE('$DateEnd', '%d-%m-%Y') ";
    }
    if(($_SESSION['storeValues'][1]!="") && ($_SESSION['storeValues'][2] != "")) {
        $DateStart = $_SESSION['storeValues'][1];
        $DateEnd = $_SESSION['storeValues'][2];
        $valDate = " AND STR_TO_DATE(newsDate, '%d-%m-%Y') BETWEEN STR_TO_DATE('$DateStart', '%d-%m-%Y') AND STR_TO_DATE('$DateEnd', '%d-%m-%Y') ";
    }
    //query string and stire it to session
    $archQuery_string = $valCat.$valDate;
    $_SESSION['storeQuery'] = $archQuery_string;
} else {
    $_SESSION['storeQuery'] = '';
}

?>
    <div id="sps_middle">
        <div class="sps_cnt">
            <div id="sps_middle_ly1">
                <div class="sps_cnt_small">
                    <div class="sps_page_title"><h3><?php echo $wb_lng['txtArchiveTitle']; ?></h3></div>
                        <div class="sps_pages_cnt" style="padding-top: 10px; float: left; margin-bottom: 15px;">
                            <div class="sps_middle_col01">
                                <div style="float: left;">
                                <p>
                                    <?php echo $wb_lng['txtArchiveInfo']; ?>
                                </p>
                                    <form action="<?php $PHP_SELF; ?>" method="post" name="archiveForm" class="archiveForm">
                                        <ul>
                                            <li>
                                                <input name="archiveFld1" type="text" id="archiveFld1" value="<?php echo $wb_lng['txtArhivaFld_01']; ?>" />
                                                <input name="archiveFld2" type="text" id="archiveFld2" value="<?php echo $wb_lng['txtArhivaFld_02']; ?>" />
                                                <select name="archiveFld3">
                                                    <option value="0"><?php echo $wb_lng['txtArhivaFld_07']; ?></option>
                                                    <option value="0" ><?php echo $wb_lng['txtArhivaFld_06']; ?></option>
                                                    <option value="1"><?php echo $wb_lng['txtArhivaFld_03']; ?></option>
                                                    <option value="2"><?php echo $wb_lng['txtArhivaFld_04']; ?></option>
                                                    <option value="3"><?php echo $wb_lng['txtArhivaFld_05']; ?></option>
                                                </select>
                                            </li>
                                            <li style="float: right;">
                                                <input name="reset" type="reset" class="sps_archiveform_btn" value="<?php echo $wb_lng['txtArchiveFormReset']; ?>"/>
                                                <input name="submit" type="submit" class="sps_archiveform_btn" value="<?php echo $wb_lng['txtArchiveFormSend']; ?>"/>
                                            </li>
                                        </ul>
                                    </form>
                                </div>
                                <hr />
<?php

//pagination start 
$page = $_GET['id'];
$perPage = 10;
$result = wbQuery("SELECT * FROM wb_news WHERE newsLang=1 ". $_SESSION["storeQuery"] ."ORDER BY newsId DESC"); 
$totalPages = mysql_num_rows($result);
if (!$page) {
    $page = 1;
}
$start = ($page - 1)*$perPage;

if ($newSearch == 0) {
    //perform db query
    $result = wbQuery("SELECT * FROM wb_news WHERE newsLang=1 ". $_SESSION['storeQuery'] ."ORDER BY newsId DESC LIMIT $start, $perPage"); 
    //count rows
    $totalnews = mysql_num_rows($result);
    $count = 1;
    if($totalnews == 0) {
        //no results, say to the user
        echo "\t\t\t<div class=\"cil_news_text_big\">\n\t\t\t\t".$wb_lng['txtArchiveNoEntries']."\n\t\t\t</div>\n";
    } else {
        //we have results, yeeeeeeeeey
        while($ROWnews = mysql_fetch_object($result)){
            //set link extensions by the news cat
            switch ($ROWnews->newsCat) {
                case 1:
                    $newsCat_link = "news";
                    break;
                case 2:
                    $newsCat_link = "statements";
                    break;
                case 3:
                    $newsCat_link = "events";
                    break;
            }
            //text summary
            if (strlen($ROWnews->newsShort) > 0 ) {$newsShortTxt = strip_tags($ROWnews->newsShort);
                if ($lang_id==2) { $newsShortTxt =  wbTranslit($newsShortTxt); }
            } else {
                $newsShortTxt = strip_tags($ROWnews->newsFull);
                if ($lang_id==2) { $newsShortTxt = wbTranslit($newsShortTxt); }
            }
            $newsShortTxt = wbShorTxt($newsShortTxt, 210, "... <a title=\"".$wb_lng['txtShowMore']."\" href=\"http://".$_SERVER['HTTP_HOST']."/".$lang_link."/".$newsCat_link."/".$ROWnews->newsId."/full/\">".$wb_lng['txtShowMore']."...</a>");
            //show news
            echo "\t\t<div class=\"sps_news_list\">\n";
            echo "\t\t<div class=\"sps_news_l\">\n";
            echo "\t\t\t<img alt=\"\" src=\"http://".$_SERVER['HTTP_HOST']."/content/images/news/_thumb/".$ROWnews->newsImageThumb."\" />\n";
            echo "\t\t</div>";
            echo "\t\t<div class=\"sps_news_r\">\n";
            //transliterate title
            if ($lang_id==2) { $newsTitle =  wbTranslit($ROWnews->newsTitle); } else { $newsTitle =  $ROWnews->newsTitle; } 
            echo "\t\t\t<div class=\"sps_news_title\">\n\t\t\t\t<a title=\"".$newsTitle."\" href=\"http://".$_SERVER['HTTP_HOST']."/".$lang_link."/".$newsCat_link."/".$ROWnews->newsId."/full/\">".$newsTitle."</a>\n\t\t\t</div>\n";
            echo "\t\t\t<div class=\"sps_news_date\">\n\t\t\t\t".$ROWnews->newsDate."\n\t\t\t</div>\n";
            echo "\t\t\t<div class=\"sps_news_text_sh\">\n\t\t\t\t".$newsShortTxt."\n\t\t\t</div>\n";
            echo "\t\t</div>";
            echo "\t\t</div>";
            //show <hr /> based on $count
            if($totalnews != $count) { echo "\t\t\t<hr />\n"; }
            $count++;
        }
    }
    //pagination check
    if($totalPages>$perPage) {
?>
                                <hr />
                                <div class="sps_pagginate">
                                   <?PHP wbPageTurnFront($PHP_SELF."/".$lang_link."/archive/", $totalPages, $page, $perPage); ?>
                                </div>
<?php 
    }
}

# placing this code for your testing: i'm currently thinking that you'll need a user-ended trigger that a new search is desired
echo '<br /><a href=\'' . $_SERVER['PHP_SELF'].'?newSearch=1' . '\'> Perform a new search </a><br />';

?>

我想我可能会有点困惑,但是如果你不介意的话就给它一个机会。