1

在输入字段中,用户输入条件 - 从 mysql 获取什么数据。例如,用户想要获取月份为 10 月(或 10 月)的 mysql 行。

在这里我得到用户输入$date_month = $_POST['date_month'];

然后mysql语句和代码进行分页

try {
$sql = $db->prepare("SELECT * FROM 2_1_journal WHERE RecordMonth = ? ");
$sql->execute(array($date_month));

foreach ($sql as $i => $row) {
}

$number_of_fetched_rows = $i;
$number_of_results_per_page = 100;
$total_pages = ceil($number_of_fetched_rows / $number_of_results_per_page);

if (isset($_GET['page']) && is_numeric($_GET['page'])) {
$show_page = $_GET['page'];

if ($show_page > 0 && $show_page <= $total_pages) {
$start = ($show_page -1) * $number_of_results_per_page;
$end = $start + $number_of_results_per_page; 
}
else {

$start = 0;
$end = $number_of_results_per_page; 
}   
}
else {
$start = 0;
$end = $number_of_results_per_page; 
}

for ($page_i = 1; $page_i <= $total_pages; $page_i++) {
echo "<a href='__filter_mysql_data.php?page=$page_i'>| $page_i |</a> ";
}

}

因此,用户输入月份 (10),脚本显示月份为 10 的所有行;显示第 1 页。但是如果用户单击其他页码,脚本会显示来自 mysql 的所有数据(所有月份,而不仅仅是 10)

我所看到的 - 当点击其他页码时,页面重新加载,这意味着 php 变量的值“消失”。据了解,$date_month未设置页面重新加载值(已丢失/“消失”)?如何保值?或者可能是一些更好的分页解决方案?

更新。

行为如下:

1) 在输入字段中设置月份 10(十月);

2)点击按钮,从mysql获取显示数据,月份为10(10月);到目前为止还可以

3)点击第2页并显示来自mysql的所有数据(所有月份,不仅仅是10(十月)

尝试使用LIMIT但它没有帮助。

可能问题与此代码有关

for ($page_i = 1; $page_i <= $total_pages; $page_i++) {
echo "<a href='__filter_mysql_data.php?page=$page_i'>| $page_i |</a> ";
}

当单击$page_i无法理解(对我而言)原因时,会显示来自 mysql 的所有(未过滤)数据。如果我也使用mysqlLIMIT显示未过滤的结果......

4

2 回答 2

0

您应该像这样更改您的查询:

SELECT * FROM 2_1_journal WHERE RecordMonth = ? LIMIT = $number_of_results_per_page OFFSET ($page_number*$number_of_results_per_page);

这里你还需要计算页码,你应该使用 mysql 的限制和偏移概念。

于 2013-06-17T06:59:04.737 回答
0

在您的查询中使用LIMIT,看看下面的例子,你可以尝试类似:

SELECT 
    * 
FROM 
    2_1_journal 
WHERE 
    RecordMonth = ? 
LIMIT [start_row],[number_of_rows_per_page]

例如,假设您有 2 个页面,每页 10 行,那么LIMIT2 个查询(每页一个)将是:

1) LIMIT 0,10
2)LIMIT 10,10

于 2013-06-17T06:54:02.297 回答