【发布时间】:2017-07-06 22:28:20
【问题描述】:
我正在创建非盈利项目,并且存在分页问题。第一个想法是“加载更多”
MySQLi connection:
$mysqli = new mysqli('localhost','root','','tablename');
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
/* Change character set to utf8 */
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit();
}
Paggination:
$items_per_page = 5;
$login = $_SESSION['login'];
$per_page = $items_per_page;
if (isset($_GET['page'])) {
$page = $_GET['page'];
}else {
$page = 1;
}
$start_from = ($page-1) * $per_page;
//Selecting the data from db
$date = $mysqli->query("SELECT post_id FROM posts WHERE posts_author = '.$login.' ORDER BY `date` DESC LIMIT $start_from, $per_page");
while($row = $date->fetch_array()){
echo $row["post_id"];
}
//
//Select all from DB
$query = $mysqli->query("SELECT post_id FROM posts WHERE posts_author='$login' ORDER BY date DESC");
$result = mysqli_query($mysqli, $query);
$total_records = mysqli_num_rows($result);
$total_pages = ceil($total_records / $per_page);
//Going to first page
echo '<a href="' .ABSOLUTE_URL. '/post/1">first page</a> ';
for ($i=1; $i<=$total_pages; $i++){
echo '<a href="' .ABSOLUTE_URL. '/post/'.$i.'">'.$i.'</a> ';
};
// Going to last page
echo '<a href="' .ABSOLUTE_URL. '/post/'.$total_pages.'">last page</a> ';
【问题讨论】:
-
“这也可以通过使用 SQL 注入来利用?”——当然可以。为什么你甚至要问这个——你没有读过 SQL 注入的问题到底是什么吗?如果您费心去理解这一点,您就会知道所示代码是易受攻击的。 “如何修复此代码?” – 肯定不是,只需将其转储到此处,以便我们首先找出问题所在。请去阅读How to Ask,然后给我们一个正确的问题描述。
-
我看不出投反对票的原因,他在那边寻求一点帮助,我猜你们所有人投反对票只是为了寻找徽章..
-
在选择所有记录后,不要执行
mysqli_num_rows($result);,而是执行SELECT COUNT(1) FROM posts WHERE posts_author=?并获得结果。这也是开始使用参数化查询和准备好的语句的好地方。因为您的代码很容易迁移到使用它,您不必担心 SQL 注入。
标签: php mysqli pagination