通过PHP分页传递$_POST值


passing $_POST values through PHP pagination

所以我在构建分页脚本时遇到了一些问题。分页工作正常,但当我使用下一个按钮加载新页面时,我的搜索词$search_term = "%" . $_POST['searchBar'] . "%";会丢失。有什么办法可以避免这种情况吗?或者将搜索项设置为设置值?

下一页的url是这样的-http://examplewebsite.com/user/Courses/SearchResultsPage.php?pn=2

如有任何帮助,我们将不胜感激。

分页脚本的其余部分如下;

    <?php
    $mysqli = new mysqli('localhost', 'user', 'password','db');
    if ($mysqli->connect_errno) 
    {
        die('Database connection failed');
    }
//$m->set_charset('utf8');
//here are my main changes
//turn errors on to develop, back off when you go live
error_reporting(E_ALL);
ini_set('display_errors', 1);
$search_term = "%" . $_POST['searchBar'] . "%";
$search_param = $_SESSION['$search_term']=$search_term;
$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>';
    }
}
?>
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <link rel='stylesheet' href='courses.css'>
</head>
<body>
    <div class="header">
<h1>Search Results for - <?= $search_param ?></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>
</body>
</html>

每次单击下一步,页面都会刷新,因为您不使用

<?php
session_start();
....

更换这2行

$search_term = "%" . $_POST['searchBar'] . "%";
$search_param = $_SESSION['$search_term']=$search_term;

带有:

if(isset( $_POST['searchBar'])){
   $search_term = "%" . $_POST['searchBar'] . "%";
   $search_param = $_SESSION['search'] = $search_term ;
}
else {
   $search_param = $_SESSION['search'];
}

在顶部,$_SESSION['$search_term']丢失

还为您的POST 添加isset检查

编辑

我认为您的问题是$search_term只在加载时设置,然后在下一页上它是NULL,会话也设置为NULL。