2014-12-03 3 views
1

내가 사용하고있는 쿼리를 기반으로 페이지 매김을 유지하려하지만 내 문제는 페이지 매김의 첫 번째 페이지에서만 작동하고 이후에는 필터가없는 표준 페이지로 되돌아갑니다 (페이지 1에 내 필터가 표시됨). , 2 페이지는 모든 결과를 보여줍니다). 내 페이지를 클릭 할 때 필터링 된 쿼리를 수행 할 효과적인 방법이 있는지 궁금합니다.이를 수행하는 방법에 관해서는 지금 막 손실에 처해 있습니다. 여기에 현재 내 코드는 다음과 같습니다MySQL 쿼리가 PHP 페이지 매김을 수행하도록하는 방법?

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"> 

<style type="text/css"> 

#win-range, #gaa-range, #sv-range{ 
width: 160px; 
font-size: 10px; 
margin: 0 auto;  
} 
#win-range a, #gaa-range a, #sv-range a{ 
margin-top: 0px !important; 
padding: 0 !important; 
} 
</style> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 

<script> 
$(function(){ 

$("#win-range").slider({ 
range: true, 
min: 1, 
max: 1000, 
values: [1, 1000], 
slide: function(event, ui) { 
    // in order to pass the user selected values to your app, we will use jQuery to prepopulate certain hidden form elements, then grab those values from the $_POST 
    $("#minwins").val(ui.values[0]); 
    $("#maxwins").val(ui.values[1]); 
    $("#winamount").val(ui.values[0] + " - " + ui.values[1]); 
} 
}); 
$("#winamount").val($("#win-range").slider("values", 0) + " - " + $("#win-range").slider("values", 1)); 

}); 
$(function(){ 

$("#gaa-range").slider({ 
range: true, 
min: 0, 
max: 10, 
values: [0, 10], 
slide: function(event, ui) { 
    // in order to pass the user selected values to your app, we will use jQuery to prepopulate certain hidden form elements, then grab those values from the $_POST 
    $("#mingaa").val(ui.values[0]); 
    $("#maxgaa").val(ui.values[1]); 
    $("#gaaamount").val(ui.values[0] + " - " + ui.values[1]); 
} 
}); 
$("#gaaamount").val($("#gaa-range").slider("values", 0) + " - " + $("#gaa-range").slider("values", 1)); 

}); 
$(function(){ 

$("#sv-range").slider({ 
range: true, 
min: 750, 
max: 1000, 
values: [750, 1000], 
slide: function(event, ui) { 
    // in order to pass the user selected values to your app, we will use jQuery to prepopulate certain hidden form elements, then grab those values from the $_POST 
    $("#minsv").val(ui.values[0]); 
    $("#maxsv").val(ui.values[1]); 
    $("#svamount").val(ui.values[0] + " - " + ui.values[1]); 
} 
}); 
$("#svamount").val($("#sv-range").slider("values", 0) + " - " + $("#sv-range").slider("values", 1)); 

}); 
</script> 

<?php 
include("includes/header.php"); 
include("includes/mysqli_connect.php"); 

$minwins = $_POST['minwins']; 
$maxwins = $_POST['maxwins']; 
$mingaa = $_POST['mingaa']; 
$maxgaa = $_POST['maxgaa']; 
$minsv = $_POST['minsv']; 
$maxsv = $_POST['maxsv']; 
$querySelection = $_POST['q']; 
// FILTERING YOUR DB 
$sortstats = $_GET['sortstats']; 
$sortstatslow = $_GET['sortstatslow']; 
// pagination 
    $getcount = mysqli_query ($con,"SELECT COUNT(*) FROM Player"); 
    $postnum = mysqli_result($getcount,0);// this needs a fix for MySQLi upgrade; see custom function below 
    $limit = 6; //how many blog posts per page you will see. 
    if($postnum > $limit){ 
    $tagend = round($postnum % $limit,0); 
    $splits = round(($postnum - $tagend)/$limit,0); 

    if($tagend == 0){ 
    $num_pages = $splits; 
    }else{ 
    $num_pages = $splits + 1; 
    } 

    if(isset($_GET['pg'])){ 
    $pg = $_GET['pg']; 
    }else{ 
    $pg = 1; 
    } 
    $startpos = ($pg*$limit)-$limit; 
    $limstring = "LIMIT $startpos,$limit"; 
    }else{ 
    $limstring = "LIMIT 0,$limit"; 
    } 

    // MySQLi upgrade: we need this for mysql_result() equivalent 
    function mysqli_result($res, $row, $field=0) { 
     $res->data_seek($row); 
     $datarow = $res->fetch_array(); 
     return $datarow[$field]; 
    } 


?> 
<div class="listingcontainer"> 
<div class="sidebar"> 
    <h3>Sort By:</h3> 
    <a href="listings.php?sortstats=Wins">Most Wins</a> 
    <a href="listings.php?sortstatslow=GAA">Best Goals Against</a> 
    <a href="listings.php?sortstats=SavePerc">Best Save %</a> 
    <hr/> 
    <h3>Custom Filter</h3> 
    <br/> 
    <div class="custom-filter"> 
     <form name="filters" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="filters"> 
      <label for="winamount">Win Range:</label> 
      <input type="text" id="winamount" /> 
      <div style="clear:both;"></div> 
      <input type="hidden" id="minwins" name="minwins" value="0" /> 
      <input type="hidden" id="maxwins" name="maxwins" value="1000" /> 
      <div id="win-range"></div> 
      <br/> 
      <label for="gaaamount">GAA:</label> 
      <input type="text" id="gaaamount" /><br /> 
      <div style="clear:both;"></div> 
      <input type="hidden" id="mingaa" name="mingaa" value="0" /> 
      <input type="hidden" id="maxgaa" name="maxgaa" value="10" /> 
      <div id="gaa-range"></div> 
      <br/> 
      <label for="svamount">SV %:</label> 
      <input type="text" id="svamount" /><br /> 
      <div style="clear:both;"></div> 
      <input type="hidden" id="minsv" name="minsv" value="750" /> 
      <input type="hidden" id="maxsv" name="maxsv" value="1000" /> 
      <div id="sv-range"></div> 
      <input type="submit" name="submit" id="submit"/> 
     </form> 
    </div> 
</div> 
<div class="main-listings"> 
<h1>Current NHL Goaltenders</h1> 
<?php 

    $result = mysqli_query($con, "SELECT * FROM Player ORDER BY PlayerID ASC $limstring"); 

    if(isset($sortstats)) { 
     $result = mysqli_query($con,"SELECT * FROM Player ORDER BY $sortstats DESC $limstring ") or die (mysql_error()); 
    } 
    if(isset($sortstatslow)) { 
     $result = mysqli_query($con,"SELECT * FROM Player ORDER BY $sortstatslow ASC $limstring ") or die (mysql_error()); 
    } 
    if(isset($_POST['submit'])) 
    { 
     $result = mysqli_query($con, "SELECT * FROM Player WHERE Wins BETWEEN '$minwins' AND '$maxwins' AND 
                GAA BETWEEN '$mingaa' AND '$maxgaa' AND SavePerc BETWEEN '$minsv' AND '$maxsv' 
                ORDER BY PlayerID ASC $limstring") or die (mysql_error()); 
    } 

    while($row = mysqli_fetch_array($result)){ 
     $name = $row['LastName'] . ", " . $row['FirstName']; 
     $wins = $row['Wins']; 
     $pid = $row['PlayerID']; 
     $image = $row['Picture']; 
     $gaa = $row['GAA']; 
     $sv = $row['SavePerc']; 
     echo "<div class=\"player-listing\">"; 
     echo "<div class=\"image-holder\">"; 
     echo "<span class=\"helper\"></span>"; 
     echo "<a href=\"viewplayer.php?playerId=$pid\"><img src=\"admin/thumbs/$image\" alt=\"$name\"></a>"; 
     echo "</div>"; 
     echo "<div style=\"clear:both;\"></div>"; 
     echo "<a href=\"viewplayer.php?playerId=$pid\">$name</a>"; 
     echo "<table align=\"center\">"; 
     echo "<tr>"; 
     echo "<td style=\"border-bottom: 1px solid #212121;\">Wins</td>"; 
     echo "<td style=\"border-bottom: 1px solid #212121;\">GAA</td>"; 
     echo "<td style=\"border-bottom: 1px solid #212121;\">SV%</td>"; 
     echo "</tr>"; 
     echo "<tr>"; 
     echo "<td>$wins</td>"; 
     echo "<td>$gaa</td>"; 
     echo "<td>.$sv</td>"; 
     echo "</tr>"; 
     echo "</table>"; 
     echo "</div>"; 
    } 

    // paging links: 
    echo "<div class=\"paging\">"; 
    if($postnum > $limit){ 
     echo "<span class=\"page-numbers\"><strong>Pages:</strong> &nbsp;&nbsp;&nbsp;</span>"; 
     $n = $pg + 1; 
     $p = $pg - 1; 
     $thisroot = $_SERVER['PHP_SELF']; 
     if($pg > 1){ 
      echo "<a href=\"$thisroot?pg=$p\"><< prev</a>&nbsp;&nbsp;"; 
     } 
     for($i=1; $i<=$num_pages; $i++){ 
      if($i!= $pg){ 
       echo "<a href=\"$thisroot?pg=$i\">$i</a>&nbsp;&nbsp;"; 
      }else{ 
       echo "$i&nbsp;&nbsp;"; 
      } 
     } 
     if($pg < $num_pages){ 
      // INSERT QUERY STRING VARIBLE TO CARRY OVER DB QUERY 
      echo "<a href=\"$thisroot?pg=$n\">next >></a>"; 
     } 
     echo "&nbsp;&nbsp;"; 
    } 
    // end paging 
    echo "</div>"; 
?> 
</div> 
<div style="clear:both;"></div> 
당신이 세션에서 필터를 검색하고 항상 세션 값은 모든 검색 설정되지 않았거나 확인하고 querry.untill 당신에 데이터를 전달하고 저장을

+0

세션을 사용하고 각 세션마다 사용자 지정 문자열 필터를 설정하는 데 필요한 모든 작업을 수행했습니다. 내 문제는 페이지 당 한도를 충족시키지 못하는 결과가 거의 없다면 페이지 하단에 페이징 링크가 표시되고 클릭하면 내 필터와 관련이없는 결과가 더 많이 표시된다는 것입니다. 이 문제가 수정 되었습니까? –

답변

0

아무도 리셋하지 않는 한 그 검색 조건을 설정하고 사용자가 해당 검색 기준을 null로 재설정하면 해당 세션 검색 변수에 대해 세션에 값을 비워 두십시오.

0

당신은, 당신이 사용하는 $ _POST에서 필터 조건을 얻기 위해 코드에서 예를

$filter = "minwins={$minwins}&maxwins={$maxwins}&mingaa={$mingaa}&minsv={$minsv}&maxsv={$maxsv}&q={$querySelection}"; 
    if($pg > 1){ 
     echo "<a href=\"$thisroot?pg=$p&$filter\"><< prev</a>&nbsp;&nbsp;"; 
    } 
    for($i=1; $i<=$num_pages; $i++){ 
     if($i!= $pg){ 
      echo "<a href=\"$thisroot?pg=$i&$filter\">$i</a>&nbsp;&nbsp;"; 
     }else{ 
      echo "$i&nbsp;&nbsp;"; 
     } 
    } 
    if($pg < $num_pages){ 
     // INSERT QUERY STRING VARIBLE TO CARRY OVER DB QUERY 
     echo "<a href=\"$thisroot?pg=$n&$filter\">next >></a>"; 
    } 

를 들어, paginating 링크에 모든 필터 조건을 통과 그것에서 얻을해야하기 때문에 $ _REQUEST로 변경해야 URL ($ _GET).

당신은 항상 URL 키 (필터)의 목록을 생성하기 위해 아래에 사용할 수

$minwins = $_REQUEST['minwins']; 
0

예.

foreach($_GET as $key => $value){ 
    $url_keys .= $key . "=" . $value . "&"; 
} 

그런 다음 URL을 다음/이전 페이지에 추가하십시오.

echo "<a href=\"$thisroot?pg=$n&$url_keys\">next >></a>"; 

그런 다음 URL을 통해 필터를 전달하고 다음 페이지에서 액세스 할 수 있습니다.

관련 문제