2016-04-16 12 views
0

すべての結果をループして10個の結果ごとに新しいページを作成するはずのPHPコードがあります最初の10の結果と次のページまたはページ番号のオプションはありません。ページ番号はxの代わりに最初の10個の結果を表示します。各ページの結果は10個です

これには理由がありますか、または私が書いたコードで何かを逃したことがありますか?

ありがとうございます。

マイコードは以下のとおりです。

$search_course = " 
    SELECT title, summary, id 
    FROM course 
    WHERE title LIKE '%".$_POST['searchBar']."%'"; 
    $result = $mysqli->query($search_course) or die($mysqli->error); 
    $search_result = $result->fetch_assoc(); 
    $row = mysqli_fetch_row($result); 
    //total rows for search 
    $rows = $row[0]; 
    //number of results per page 
    $rows_per_page = 10; 
    //shows last page 
    $last_page = ceil($rows/$rows_per_page); 
    if($last_page < 1){ 
     $last_page = 1; 
    } 
    $page_number = 1; 
    if(isset($_GET['pn'])){ 
     $page_number = preg_replace('#[^0-9]#', '', $_GET['pn']); 
    } 
    //makes sure page number is between limits of $page_number 
    if($page_number < 1){ 
     $page_number = 1; 
    } else if($page_number > $last_page){ 
     $page_number = $last_page; 
    } 

    // sets the value of items to view 
    $limit = 'LIMIT ' .($page_number -1) * $rows_per_page .',' .$rows_per_page; 

    // query again only grabbing the set number of rows depending on page number 
    $search_course = " 
    SELECT title, summary, id 
    FROM course 
    WHERE title LIKE '%".$_POST['searchBar']."%' 
    ORDER BY title DESC $limit"; 
    $result = $mysqli->query($search_course) or die($mysqli->error); 
    $search_result = $result->fetch_assoc(); 
    //displays to the user the total number of results and the page numbers 
    $total_number_of_results = "Search Results (<b>$rows</b>)"; 
    $page_user_is_on = "Page <b>$page_number</b> of <b>$last_page</b>"; 
    //set up pagination 
    $pagination_controls = ''; 
    if($last_page != 1){ 
     if($page_number > 1){ 
      $previous = $page_number - 1; 
      $pagination_controls .='<a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'">previous</a> &nbsp; &nbsp; '; 
      for($i = $page_number - 4; $i < $page_number; $i++) 
      { 
       if($i > 0){ 
        $pagination_controls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; '; 
       } 
      } 
     } 
     $pagination_controls.=''.$page_number.' &nbsm; '; 
     //clickable links to the left 
     for($i = $page_number+1; $i <= $last_page; $i++) 
      { 
       $pagination_controls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; '; 
       if($i >= $page_number+4){ 
        break; 
       } 
      } 
      if($page_number != $last){ 
       $next = $page_number + 1; 
       $pagination_controls.='&nbsp; &nbsp; <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Next</a>'; 
      } 
    } 
    $list = ''; 
    while($row = mysqli_fetch_array($result)){ 
     $title = $row['title']; 
     $id = $row['id']; 
     $list.='<p><a href="Selectedcourse.php">'.$title.' </p>'; 
    } 
    mysqli_close($mysqli); 

とhtml要素。

答えて

1

これは、独自のページ設定をロールバックするのに適しています。それは主に働いていた。問題はここにあなたの最初のクエリにあった:

$search_result = $result->fetch_assoc(); 
//This fetches only the first row of results 
$row = mysqli_fetch_row($result); 
//So this is not the total rows for search 
$rows = $row[0]; 

ここにあなたが本当に使用する必要がprepared statementsを使用して、更新されたスクリプトです。あなたがハッキングされるのが大好きでない限り。

一つだけの変更で
//turn errors on to develop, back off when you go live 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

//here are my main changes 
$search_param = "%" . $_POST['searchBar'] . "%"; 
$stmt = $mysqli->prepare("SELECT title, summary, id FROM course WHERE title LIKE ?"); 
$stmt->bind_param("s", $search_param); //learn this 
$stmt->execute(); 
$result = $stmt->get_result(); 

//This gets the number of rows in a query result 
$rows = $result->num_rows; 

//number of results per page 
$rows_per_page = 10; 

//shows last page 
$last_page = ceil($rows/$rows_per_page); 
if($last_page < 1){ 
    $last_page = 1; 
} 

if(isset($_GET['pn'])){ 
    $page_number = preg_replace('#[^0-9]#', '', $_GET['pn']); 
} else { 
    $page_number = 1; 
} 

//makes sure page number is between limits of $page_number 
if($page_number < 1){ 
    $page_number = 1; 
} else if($page_number > $last_page){ 
    $page_number = $last_page; 
} 

// sets the value of items to view 
$limit = 'LIMIT ' .($page_number -1) * $rows_per_page .',' .$rows_per_page; 

//displays to the user the total number of results and the page numbers 
$total_number_of_results = "Search Results (<b>$rows</b>)"; 
$page_user_is_on = "Page <b>$page_number</b> of <b>$last_page</b>"; 

//query again only grabbing the set number of rows depending on page number 
$stmt = $mysqli->prepare("SELECT title, summary, id FROM course WHERE title LIKE ? ".$limit); 
$stmt->bind_param("s", $search_param); 
$stmt->execute(); 
$result = $stmt->get_result(); 


$list = ''; 
while($row = $result->fetch_assoc()){ 
    $title = $row['title']; 
    $id = $row['id']; 
    //I'm assuming you want each link to be different here... 
    $list.='<p><a href="Selectedcourse.php?id='.$id.'">' . $title . '</a></p>'; 
} 
mysqli_close($mysqli); 

//set up pagination 
$pagination_controls = ''; 
if($last_page != 1){ 
    if($page_number > 1){ 
     $previous = $page_number - 1; 
     $pagination_controls .='<a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'">previous</a> &nbsp; &nbsp; '; 
     for($i = $page_number - 4; $i < $page_number; $i++) 
     { 
      if($i > 0){ 
       $pagination_controls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; '; 
      } 
     } 
    } 
    $pagination_controls.=''.$page_number.' &nbsp; '; 

    //clickable links to the left 
    for($i = $page_number+1; $i <= $last_page; $i++) 
     { 
      $pagination_controls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; '; 
      if($i >= $page_number+4){ 
       break; 
      } 
     } 
     if($page_number != $last_page){ 
      $next = $page_number + 1; 
      $pagination_controls.='&nbsp; &nbsp; <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Next</a>'; 
     } 
} 

そして最後にHTMLのセクション、:

<div class="header"> 
    <h1>Search Results for - <?= $_POST['searchBar'] ?></h1> 
</div> 
<div> 
<h3> <?php echo $page_user_is_on ?> </h3> 
<p><?php echo $list; ?></p> 
<p><?php /* echo $search_result['summary']; //Where was this coming from? */?> </p> 
</div> 
<div id="pagination_controls"><?php echo $pagination_controls; ?></div> 
+0

これは致命的なエラーが発生した、参考にされている - '致命的なエラーは:メンバ関数bind_paramへの呼び出し()はnullにで'12行目のSearchResultsPage.php'は'未定義変数:12行目のSearchResultsPage.phpの中のstmt'によって引き起こされます '' stmt'をどのように定義しますか? – bdg

+0

ああ、私はコピーに少し欠けていました - 私の更新された答えを確認してください。 – larsAnders

+0

ありがとうございました。それは一日中働くために別のものを試していた!もう一度ありがとう – bdg