2016-06-22 13 views
0

次のコードを使用して、データベースの大きなテーブルにページ番号を適用しています。それはうまく動作しますが、どのようにWHERE Week = "?" SELECTクエリの$ start $ limit変数を使用して(テーブルの52週間)そのようにして、前のボタンまたは次のボタンを押すと、その週の行の前または次の週に移動します。週単位のページ番号

<div id="content"> 
<?php 
include("dbconfig.php"); 
$start=0; 
$limit=10; 

if(isset($_GET['id'])) 
{ 
    $id=$_GET['id']; 
    $start=($id-1)*$limit; 
} 
else{ 
    $id=1; 
} 
//Fetch from database first 10 items which is its limit. For that when 
page open you can see first 10 items. 
$query=mysqli_query($dbconfig,"select * from user LIMIT $start, $limit"); 
?> 
<ul> 
<?php 
//print 10 items 
while($result=mysqli_fetch_array($query)) 
{ 
    echo "<li>".$result['username']."</li>"; 
} 
?> 
</ul> 
<?php 
//fetch all the data from database. 
$rows=mysqli_num_rows(mysqli_query($dbconfig,"select * from user")); 
//calculate total page number for the given table in the database 
$total=ceil($rows/$limit); 
if($id>1) 
{ 
    //Go to previous page to show previous 10 items. If its in page 1 then it is inactive 
    echo "<a href='?id=".($id-1)."' class='button'>PREVIOUS</a>"; 
} 
if($id!=$total) 
{ 
    ////Go to previous page to show next 10 items. 
    echo "<a href='?id=".($id+1)."' class='button'>NEXT</a>"; 
} 
?> 
<ul class='page'> 
<?php 
//show all the page link with page number. When click on these numbers go  to particular page. 
     for($i=1;$i<=$total;$i++) 
     { 
      if($i==$id) { echo "<li class='current'>".$i."</li>"; } 

      else { echo "<li><a href='?id=".$i."'>".$i."</a></li>"; } 
     } 
?> 
</ul> 
</div> 

答えて

1

おそらく、数週間の選択ボックスを探して、where句でその値を使用します。

<select name="weeks"> 
    <?php 
     for($i = 1; $i <= 52; $i++): 
      echo '<option name="week" value="'.$i.'"></option>'; 
     endfor; 
    ?> 
</select> 

クエリ:

$mysqli = dbConnect(); 
$stmt = $mysqli->prepare($sql); 

if(!empty($_POST['weeks'])): 
    $week = $_POST['week']; 

    // Validate the data 

    $week = trim($week); 
    $week = htmlspecialchars($week); 

    if(!ctype_digit($week)): 
     echo 'Week is not a valid input'; 
    else: 
     // Prepared statement 

     $sql = "SELECT * FROM user WHERE week = ? LIMIT ?, ?"; 
     $stmt->bind_param("iii", $week, $start, $limit); 

    endif; 

else: 
    $sql = "SELECT * FROM user LIMIT ?, ?"; 
    $stmt->bind_param("ii", $start, $limit); 
endif; 

$stmt->execute(); 
$stmt->bind_result(yourparamshere); 

$stmt->close(); 
$mysqli->close(); 

注:

プリペアドステートメントおよびストアドプロシージャがはるかセーバーであり、あなたより良いプログラマーになりますhttp://php.net/manual/en/pdo.prepared-statements.php

を見てみてください。

+1

あなたは準備された声明を自分で見てみませんか? –

+0

あなた自身で質問に答えるのはなぜですか?ただここで助けようとしています。 – rhazen

+0

このコードは、SQLインジェクションに対して脆弱です。私はそれが助けと呼ばれるかもしれないとは思わない。 –