2016-03-22 4 views
1

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

$sorting = $_GET["sorting"]; 

$per_page = 10; 
$pages = $count_total->num_rows; 
$total_pages = ceil($pages/$per_page); 

if($sorting == "likes") { 
     $count_total = $db2->query("SELECT * FROM likes WHERE user='$user'"); 
    } 

if($sorting == "tag") { 
    $tag_name = $_GET["tag_name"]; 
    $count_total = $db2->query("SELECT * FROM movie_tags WHERE tag_id='$tag_name'"); 
    } 

$pages = $count_total->num_rows; 
    $total_pages = ceil($pages/$per_page); 

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



for($number=1;$number<=$total_pages;$number++) { 
      if($page == $number) { 
      echo '<div class="complete_page">'.$number.'</div>'; 
      } else { 
      $sorting = $_GET["sorting"]; 
      echo '<a href="?page='.$number.'&sorting='.$sorting.'"> <div class="number_page">'.$number.'</div></a>'; 

      } 
     } 
     } 

Это пример того, как я использую пагинацию:

$movie = $db2->query("SELECT * FROM movies ORDER BY likes DESC LIMIT $start, $per_page"); 

Примечания: Когда эхо $pages, обе системы сортировки генерирует значение. Фактически, тег имеет значение 11. Почему это значение не создает систему разбиения на страницы. Я знаю, что это не проблема с системой разбиения на страницы, потому что она работает для сортировки системы .

+0

[Просто подумал, что вы должны знать, что посещение '/? Page = somesqlinjectionhere' может быть очень неудачным.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in -php) – Marty

+0

Правда. Я думал, что я собираюсь сделать SQL Injection и другую безопасность в самом конце командой разработчиков. Я просто сольный разработчик в этом проекте прямо сейчас ... –

+0

Я не рекомендую оставлять очевидные и серьезные проблемы с безопасностью до конца. – Marty

ответ

1

попробуйте изменить запрос, чтобы вы:

$movie = $db2->query("SELECT * 
         FROM movies 
         ORDER BY likes DESC 
         LIMIT $per_page 
         OFFSET $start"); 

Это должно установить количество строк $ per_page Начиная с $ начать.

+0

Не работает. Пожалуйста, проигнорируйте мой пример разбивки на страницы. Это просто пример и не имеет прямого отношения к моей проблеме. –

+0

$ start = (($ page - 1) * $ per_page); Предполагается, что это $ pages, а не $ page. Я мог бы быть слепым, но я не могу найти, где инициализируется $ page. –

+0

Это должно быть так. Вы правы, что я пропустил $ page. $ page просто GET часть страницы URL: movies.php? page = 1 –

1

Вы должны попытаться удалить две одинарные кавычки вокруг $ tag_name в вашем SQL-запросе. Я имею в виду:

$count_total = $db2->query("SELECT * FROM movie_tags WHERE tag_id=".$tag_name); 

Поскольку ваше значение тега 11, я считаю, что ваш столбец базы данных с именем tag_id является целым числом. И с этими двумя одинарными кавычками вы сравниваете его со строкой/varchar '11'.

Смежные вопросы