douzhi2012 2011-12-01 03:17
浏览 24
已采纳

分页和php会话变种

I just have one simple question here is the desc:

I'm working on news archive page for my website, search over archive is done with start date, end date and news category as search parameters. Form values are stored in $_SESSION var, and then they are passed around as an array for pagination and other purposes. My question would be how to prevent displaying search results on main archive search page if user for some reason goes again to it to make a new search.

here's the code

<?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\">
\t\t\t\t".$wb_lng['txtArchiveNoEntries']."
\t\t\t</div>
";
    } 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\">
";
            echo "\t\t<div class=\"sps_news_l\">
";
            echo "\t\t\t<img alt=\"\" src=\"http://".$_SERVER['HTTP_HOST']."/content/images/news/_thumb/".$ROWnews->newsImageThumb."\" />
";
            echo "\t\t</div>";
            echo "\t\t<div class=\"sps_news_r\">
";
            //transliterate title
            if ($lang_id==2) { $newsTitle =  wbTranslit($ROWnews->newsTitle); } else { $newsTitle =  $ROWnews->newsTitle; } 
            echo "\t\t\t<div class=\"sps_news_title\">
\t\t\t\t<a title=\"".$newsTitle."\" href=\"http://".$_SERVER['HTTP_HOST']."/".$lang_link."/".$newsCat_link."/".$ROWnews->newsId."/full/\">".$newsTitle."</a>
\t\t\t</div>
";
            echo "\t\t\t<div class=\"sps_news_date\">
\t\t\t\t".$ROWnews->newsDate."
\t\t\t</div>
";
            echo "\t\t\t<div class=\"sps_news_text_sh\">
\t\t\t\t".$newsShortTxt."
\t\t\t</div>
";
            echo "\t\t</div>";
            echo "\t\t</div>";
            //show <hr /> based on $count
            if($totalnews != $count) { echo "\t\t\t<hr />
"; }
            $count++;
        }
    }
//pagination check
if($totalPages>$perPage) {
?>
                                <hr />
                                <div class="sps_pagginate">
                                   <?PHP wbPageTurnFront($PHP_SELF."/".$lang_link."/archive/", $totalPages, $page, $perPage); ?>
                                </div>
<?php 
    }
}
?>

Any ideas? Tnx :)

  • 写回答

1条回答 默认 最新

  • duanjin9035 2011-12-01 03:27
    关注

    Is it possible that you might be looking for something like this?:

    # 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;
    }
    

    If not, let us know..

    [EDIT] Based on new information from post:

    Could you try this?:

    <?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\">
    \t\t\t\t".$wb_lng['txtArchiveNoEntries']."
    \t\t\t</div>
    ";
        } 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\">
    ";
                echo "\t\t<div class=\"sps_news_l\">
    ";
                echo "\t\t\t<img alt=\"\" src=\"http://".$_SERVER['HTTP_HOST']."/content/images/news/_thumb/".$ROWnews->newsImageThumb."\" />
    ";
                echo "\t\t</div>";
                echo "\t\t<div class=\"sps_news_r\">
    ";
                //transliterate title
                if ($lang_id==2) { $newsTitle =  wbTranslit($ROWnews->newsTitle); } else { $newsTitle =  $ROWnews->newsTitle; } 
                echo "\t\t\t<div class=\"sps_news_title\">
    \t\t\t\t<a title=\"".$newsTitle."\" href=\"http://".$_SERVER['HTTP_HOST']."/".$lang_link."/".$newsCat_link."/".$ROWnews->newsId."/full/\">".$newsTitle."</a>
    \t\t\t</div>
    ";
                echo "\t\t\t<div class=\"sps_news_date\">
    \t\t\t\t".$ROWnews->newsDate."
    \t\t\t</div>
    ";
                echo "\t\t\t<div class=\"sps_news_text_sh\">
    \t\t\t\t".$newsShortTxt."
    \t\t\t</div>
    ";
                echo "\t\t</div>";
                echo "\t\t</div>";
                //show <hr /> based on $count
                if($totalnews != $count) { echo "\t\t\t<hr />
    "; }
                $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 />';
    
    ?>
    

    I think I might be getting a bit confused, but give this a shot if you don't mind.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000