2011-12-01 5 views
0

난 그냥 여기 하나 개의 간단한 질문이 바르하면 내림차순입니다 :페이지 매김과 PHP 세션이

내 웹 사이트에 대한 뉴스 아카이브 페이지에서 일하고 있어요, 아카이브를 통해 검색이 시작 날짜, 종료 날짜 및 뉴스 카테고리로 이루어집니다 검색 매개 변수. 양식 값은 $ _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 :

+0

검색이 완료되었음을 알리는 세션을 하나 더 추가해 보았습니까? 'HasSearched'세션 변수와 같이 페이지가 처음로드 될 때 0으로 시작하고 (이미 isset을 통해 확인) 검색이 이루어지면 1로 설정합니다. 그런 다음 코드가 이미 1인지 확인한 다음 돈을 걸고 새로운 검색이 될 것이므로 검색 결과를 표시하지 마십시오 ... – Nonym

+0

그냥 확인하는 중 ... 각 페이지의 검색 결과 상단에 검색 양식을 표시하고 있습니까? 그리고 네, 여기서 코드 그룹을 고정시켜야한다고 생각합니다. – Nonym

+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 />'; 

?> 

? : 조금 혼란스러워 지겠지만, 상관 없으면이 기회를주십시오.

+0

고맙습니다. Nonym :) 바로 시도하고 작동하는지 알려 드리겠습니다. –

+0

아니, 나는 그것을 시도했다. 아무런 효과가 없습니다. 제 질문을 수정하고 코드를 지나치면 문제에 대한 더 나은 시각을 얻을 수 있습니다. –

+0

문제는 if 절의 배치 어딘가에 있다고 생각합니다 ... –

관련 문제