2012-09-12 54 views
-2

我有一個頁面,我已經在專輯中添加了分頁,工作相當好,但我發現一個問題。爲了檢查目的,我在頁面中輸入了一些值,例如?page = a或?page = 0.1(整數如?page = 1,?page = 2等沒有任何錯誤)並顯示此錯誤:php分頁得到一個mysql錯誤

「您的SQL語法錯誤;檢查對應於您的MySQL服務器版本在第7行到附近使用‘-15,15’正確的語法手冊」

因此,如果用戶試圖把這樣的價值觀,這不會是一個安全問題?如何申請一些檢查並防止這種情況發生?

這裏是我的代碼

$per_page = 15; 
$pages_query = mysql_query("SELECT COUNT(`album_id`) FROM `albums` ", $connection); 
$pages = ceil(mysql_result($pages_query, 0)/$per_page); 

$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1; 

$start = ($page - 1) * $per_page; 
$query_get_imgs = "SELECT `albums`.`album_id`, 
           `albums`.`album_name`, 
           COUNT(`images`.`image_id`) AS `image_count` 
           FROM `albums` LEFT JOIN `images` 
           ON `albums`.`album_id`= `images`.`album_id` 
           GROUP BY `albums`.`album_id` ORDER BY `albums`.`album_id` DESC LIMIT {$start} , {$per_page} "; 
$get_imgs = mysql_query($query_get_imgs, $connection) or die(mysql_error()); 
$row_get_imgs = mysql_fetch_assoc($get_imgs); 
$totalRows_get_imgs = mysql_num_rows($get_imgs); 
+0

使用'is_numeric'驗證'頁面'值 –

回答

1

爲了避免這種情況問題,你需要檢查$start是大於還是等於0.

+0

好吧,所以我必須確保$ start是> 0?我實際上可以在這個$ start =($ page - 1)* $ per_page; – Lykos

+0

'$ start =($ page - 1)* $ per_page; $ start = $ start> 0? $ start:0;'或'$ start = $ page> 0? ($ page - 1)* $ per_page:0;' – vibaiher

0

什麼if($page<1)? (但不是,這不是安全風險)。

0

時從0

$start = ($page - 1) * $per_page; 

$start = -15 and that is wrong because the index start from 0 

你需要給0特例頁開始

+0

好吧,所以我必須確保$ start是> 0?我實際上可以在這個$ start =($ page - 1)* $ per_page; – Lykos

3

試試這個

$page = (isset($_GET['page']) && is_numeric($_GET['page'])) ? (int)$_GET['page'] : 1; 
0

而且同一主題的另一個變化;-)

$start = (max(1, $page)-1) * $per_page;