2013-10-30 41 views
0

你好我正面臨着我的分頁系統的問題,如果我列出了mysql表中的結果,它工作正常,但萬一如果我在SQL中添加一些條件查詢類似於「AND」這一列「AND」其他列的腳本會在第一頁正確顯示結果,當我選擇第二頁而不是顯示第二部分結果時,從第26頁開始,它正在開始新的分頁並顯示從查詢中添加沒有contions的開始的所有內容。這裏是分頁與查詢代碼:當添加不同的sql查詢條件時,分頁Php不工作

//This gets all the other information from the form 
$ciudad=$_POST['ciudad']; 
$tipo=$_POST['tipo']; 

$con=mysqli_connect(); 
// Check connection 
$sql = "SELECT * FROM cursos WHERE 1"; 
if (!empty($ciudad)) { 
    $sql .= " AND ciudad = '$ciudad' "; 
} 
if (!empty($tipo)) { 
    $sql .= " AND tipo= '$tipo' "; 
} 
if (!$result = mysqli_query($con,$sql)) 
{ 
    die("Error: " . mysqli_error($con)); 
} 

$per_page =25;//define how many games for a page 
$count = mysqli_num_rows($result); 
$pages = ceil($count/$per_page); 

if(!isset($_GET['page']) || $_GET['page']=="") { 
    $page="1"; 
} else { 
    $page=$_GET['page']; 
} 
$start = ($page - 1) * $per_page; 
$sql = "SELECT * FROM cursos WHERE 1 LIMIT $start,$per_page"; 

?> 

這是生成的網頁鏈接的代碼:

<?php 
     //Show page links 
     for ($i = 1; $i <= $pages; $i++) 
      {?> 
      <li id="<?php echo $i;?>"><a href="search_cursos.php?page=<?php echo $i;?>"><?php echo $i;?></a></li> 
      <?php   
      } 
     ?> 
+0

打印選擇並在控制檯中手動探測 – ZiTAL

+1

您當前的代碼容易受到SQL注入攻擊。您可能想要查看準備好的語句,而不是:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – PeeHaa

+0

此頁面是在sevrer受保護的目錄中,所以只有誰將能夠看到它將是管理員。所以不用擔心SQL注入附加,感謝評論的方式 –

回答

1

的2個問題,其中:

  • 額外的過濾器沒有下頁再選擇($_POST將是空的)
  • 到分頁其中查詢後計算相關的指令(其,顯然,不能使用這些參數)

您可以存儲額外的查詢在會議的條件,或將其添加爲參數,在「下一個頁面鏈接」,或將您鏈接到提交表單(這可能是最好的選擇)

<li id="<?php echo $i;?>"><a href="search_cursos.php?page=<?php echo $i.'&amp;ciudad='.$ciudad.'&amp;tipo='.$tipo; ?>"><?php echo $i;?></a></li> 

如果你選擇的鏈路解決方案,不忘記設置_POST_GET(或檢查第二,如果第一個是空的,或者使用$_REQUEST

我不得不提到你的代碼是不是SQL注入自由使用mysqli_prepare()可能值得花時間(出於安全和演出)

編輯:所以,在這裏我們去:

圖片的標題說明:使用$_REQUEST並不總是建議

而且我注意到,你也執行查詢使用分頁系統之前...

//This gets all the other information from the form 
$ciudad=$_REQUEST['ciudad']; 
$tipo=$_REQUEST['tipo']; 

$con=mysqli_connect(); 
// Check connection 
$sql = "SELECT * FROM cursos WHERE 1"; 
if (!empty($ciudad)) { 
    $sql .= " AND ciudad = '$ciudad' "; 
} 
if (!empty($tipo)) { 
    $sql .= " AND tipo= '$tipo' "; 
} 

// PAGINATION MOVED UP 

$per_page =25;//define how many games for a page 
$count = mysqli_num_rows($result); 
$pages = ceil($count/$per_page); 

if(empty($_GET['page'])) { 
    $page="1"; 
} else { 
    $page=$_GET['page']; 
} 
$start = ($page - 1) * $per_page; 

$sql .= ' LIMIT '.$start.','.$per_page; 

if (!$result = mysqli_query($con,$sql)) 
{ 
    die("Error: " . mysqli_error($con)); 
} 



     //Show page links 
     for ($i = 1; $i <= $pages; $i++) 
      {?> 
      <li id="<?php echo $i;?>"><a href="search_cursos.php?page=<?php echo $i.'&amp;ciudad='.$ciudad.'&amp;tipo='.$tipo; ?>"><?php echo $i;?></a></li> 
      <?php   
      } 
     ?> 
+0

如果我選擇鏈接選項,它會顯示正確的頁數,但它會顯示在每個頁面上都有相同的結果,並且在每個頁面上顯示的結果都不是25,例如 –

+0

2分鐘,讓我用你的整個代碼編輯我的答案, – Asenar

+0

當然,如果你添加了'LIMIT X,Y'查詢被執行,以及...;) – Asenar

0

如果城市和類型設置,那麼您的SQL將有秩序兩個實例通過...您應該在if語句之後添加順序。

+0

謝謝我會解決這個問題,但總的來說,我沒有解決問題,當我點擊第二頁時,查詢列出所有結果不是指定的。 –

1

如果$城和$ TIPO都沒有空在執行您的查詢將是這樣的:

SELECT * FROM cursos WHERE 1 AND ciudad = '$ciudad' ORDER BY id DESC AND tipo= '$tipo' ORDER BY id DESC 

它應該是這樣的,如果我沒有記錯:

SELECT * FROM cursos WHERE 1 AND ciudad = '$ciudad' AND tipo= '$tipo' ORDER BY id DESC 

我會做的就是改變這一點:

$sql = "SELECT * FROM cursos WHERE 1"; 
if (!empty($ciudad)) { 
    $sql .= " AND ciudad = '$ciudad' ORDER BY id DESC "; 
} 
if (!empty($tipo)) { 
    $sql .= " AND tipo= '$tipo' ORDER BY id DESC "; 
} 

過這一點:

$sql = "SELECT * FROM cursos WHERE 1 "; 
if (!empty($ciudad)) { 
    $sql .= "AND ciudad= '$ciudad' "; 
    if (!empty($tipo)) { 
     $sql .= "AND tipo= '$tipo' "; 
    } 

     $sql .= "ORDER BY id DESC "; 
    } 

我也有一個鏈接,可能會幫助你與分頁。

http://www.phpjabbers.com/php--mysql-select-data-and-split-on-pages-php25.html

+0

我沒有從查詢中刪除ORDER選項,因爲這不是真正的問題,感謝評論我會在解決主要問題後考慮它 –