2016-04-16 11 views
0

Ich habe ein Stück PHP-Code, das alle Ergebnisse durchlaufen soll und eine neue Seite für alle 10 Ergebnisse erstellen soll, es wird jedoch nur angezeigt die ersten 10 Ergebnisse und keine Optionen der nächsten Seite oder Seitenzahlen.Paginierung zeigt nur die ersten 10 Ergebnisse anstelle von x Anzahl der Seiten mit jeweils 10 Ergebnissen

Gibt es einen Grund dafür oder habe ich etwas in dem Code verpasst, den ich geschrieben habe?

Vielen Dank im Voraus.

Mein Code ist unten;

$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); 

und das HTML-Element;

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel='stylesheet' href='courses.css'> 
</head> 
<body> 
    <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']; ?> </p> 
</div> 
    <div id="pagination_controls"><?php echo $pagination_controls; ?></div> 

</body> 
</html> 

Antwort

1

Dies ist ein guter Versuch, Ihre eigene Seitennummerierung zu erstellen. Es hat meistens funktioniert. Das Problem war in der ersten Abfrage hier:

$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]; 

Hier ist ein aktualisiertes Skript prepared statements, die Sie wirklich benötigen. Es sei denn, du liebst es, gehackt zu werden.

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

Und schließlich der HTML-Abschnitt, mit nur einer Änderung:

<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

Diese hilfreich gewesen ist, ist es ein fataler Fehler - 'Fatal error: Call auf eine Elementfunktion bind_param() auf null in SearchResultsPage.php in Zeile 12', die durch 'Undefinierte Variable: stmt in SearchResultsPage.php in Zeile 12' verursacht wird, würde ich' stmt' definieren? – bdg

+0

Ah, ich habe etwas in der Kopie verpasst - überprüfe meine aktualisierte Antwort. – larsAnders

+0

Danke Das war eine große Hilfe! habe verschiedene Dinge ausprobiert, um es den ganzen Tag zur Arbeit zu bringen! Danke nochmal – bdg

Verwandte Themen