2013-11-17 4 views
-1

Я пытаюсь создать приложение для разбивки на страницы, но мой код продолжает терпеть неудачу, и я не знаю почему. Он работает, когда я заменяю переменные LIMIT цифрами, но не переменными в запросе.PHP MySQLi Pagination

$pageNum = $_GET['page']; 
    $id = $_GET['id']; 
if ($pageNum == NULL) { 
$pageNum = 1; 
} 
include("config.php"); 
include("header.php"); 

$numPosts = $connect->query("SELECT * FROM forum_posts WHERE category='" . $id . "'   ORDER BY latestReply ASC"); 
$numPosts = $numPost->num_rows; 
$resultsPerPage = 10; 
$lastPage = ceil($numPosts/$resultsPerPage); 

if (!(isset($pagenum))){ 
$pageNum = 1; 
} 

if ($pagenum < 1) { 
$pageNum = 1; 
} elseif ($pageNum > $lastPage) { 
$pageNum = $lastPage; 
} 

$limit1 = $pageNum * $resultsPerPage - $resultsPerPage; 
$limit2 = $limit1 + $resultsPerPage; 
$post = $connect->query("SELECT * FROM forum_posts LIMIT $limt1, $limit2 WHERE category='" . $id . "' ORDER BY latestReply ASC"); 

Я продолжаю однако получаю эту ошибку:

[17-Nov-2013 17:12:22 Europe/London] PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/robbiewi/public_html/forum/category.php on line 59 

На этой линии:

while ($posts = mysqli_fetch_array($post)) { 

Вся помощь очень ценится!

+0

Ваш скрипт уязвим для SQL-инъекции. Почему бы вам [использовать подготовленные заявления] (http://stackoverflow.com/q/60174/53114)? – Gumbo

ответ

1

WHERE условие должно быть помещен перед LIMIT

должен быть

SELECT * FROM forum_posts WHERE category='" . $id . "' ORDER BY latestReply ASC LIMIT $limt1, $limit2

вместо,

SELECT * FROM forum_posts LIMIT $limt1, $limit2 WHERE category='" . $id . "' ORDER BY latestReply ASC

Выберите синтаксис: http://dev.mysql.com/doc/refman/5.0/en/select.html

SELECT 
[ALL | DISTINCT | DISTINCTROW ] 
    [HIGH_PRIORITY] 
    [STRAIGHT_JOIN] 
    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] 
    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] 
select_expr [, select_expr ...] 
[FROM table_references 
[WHERE where_condition] 
[GROUP BY {col_name | expr | position} 
    [ASC | DESC], ... [WITH ROLLUP]] 
[HAVING where_condition] 
[ORDER BY {col_name | expr | position} 
    [ASC | DESC], ...] 
[LIMIT {[offset,] row_count | row_count OFFSET offset}] 
[PROCEDURE procedure_name(argument_list)] 
[INTO OUTFILE 'file_name' export_options 
    | INTO DUMPFILE 'file_name' 
    | INTO var_name [, var_name]] 
[FOR UPDATE | LOCK IN SHARE MODE]] 
+0

Спасибо, что я никогда не видел, что выберите синтаксис раньше! – Robbo5899

0
  1. Вы писали $ limt1 в своем SQL-заявлении, но, я думаю, вы просто ошиблись в нем прямо сейчас.
  2. Вы уверены, что $ limit1 и $ limit2 являются числами? Возможно, вы могли бы исправить это, когда используете $limit1 = $limit1 * 1, чтобы убедиться, что это номер, иногда работал на меня.
+0

Да, я исправил опечатку сразу после того, как я разместил здесь. Спасибо – Robbo5899