我有一个变量,它从URL获取值。
if (isset($_GET['page'])) {
$getPage = $_GET['page'];
} else {
$getPage = "";
}
if ($getPage == "" || $getPage == "1") {
$page = 0;
} else {
$page = ($getPage * 6) - 6;
}
获得此值后,它会向数据库发送查询,以询问信息。如何确保输入数字并且不超过可用数量?
以下是查询:
$query = "SELECT * FROM dbname LIMIT $page,6 ";
$select_all_list_items = mysqli_query($connection, $query);
现在,如果我手动更改网址并输入超过网页数量的数字,则不显示任何内容,或者如果我在其中输入字母则显示错误。在这两种情况下,我都希望将用户重定向回第一页。
答案 0 :(得分:1)
首先,您需要从数据库中检索总页数:
$countQuery = 'SELECT COUNT(*) FROM dbname';
$countResult = mysqli_query($connection, $countQuery);
$countResultRow = mysqli_fetch_row($countResult);
$numPages = intval($countResultRow[0]);
然后,您需要对get变量实施一些检查:
if ($numPages < 0) {
throw new Exception('No pages to show!');
}
if (!is_numeric($getPage)) {
$getPage = 1;
}
if ($getPage > $numPages) {
$getPage = 1;
}
if ($getPage < 1) {
$getPage = 1;
}
小心地将GET值直接传递到SQL查询中,这是一个安全风险,因为它可能导致通过URL操作数据库。有关“转义”数据预查询的详细信息,请阅读有关SQL注入的信息。
答案 1 :(得分:1)
要检查数字输入和无效页码,
$pageCount = $totalRecords / $recordsPerPage;
/* where $totalRecords is count of total records from db and $recordsPerPage is total rows per page */
if(!is_numeric($_GET['page']) || $_GET['page']>$pageCount){
$getPage = "1";
}
答案 2 :(得分:0)
像这样的东西
$page = 1; //default page 1
if(isset($_GET['page']) && preg_match('/[a-z]/i', $_GET['page'])){
// if set and alpha
header('Location: url of first page');
exit;
}else{
//not sure of this part but ( that's what the OP has so i'll go with it )
$page = ( $_GET['page'] * 6 ) - 6; ///could be 0 on page 1 6*1-6, just saying
}
就个人而言,我首先运行一个查询来计算总行数,将每行的行数除以总页数,然后在if语句中使用...等等。