Hello! Recently I started working on php, I can't understand how the page variable appears in this code, how does php know which page we are on now?

$result1 = mysql_query("SELECT str FROM options", $db); $myrow1 = mysql_fetch_array($result1); $num = $myrow1["str"]; // Извлекаем из URL текущую страницу @$page = $_GET['page']; // Определяем общее число сообщений в базе данных $result2 = mysql_query("SELECT COUNT(*) FROM bonus"); $temp = mysql_fetch_array($result2); $posts = $temp[0]; // Находим общее число страниц $total = (($posts - 1) / $num) + 1; $total = intval($total); // Определяем начало сообщений для текущей страницы $page = intval($page); // Если значение $page меньше единицы или отрицательно // переходим на первую страницу // А если слишком большое, то переходим на последнюю if(empty($page) or $page < 0) $page = 1; if($page > $total) $page = $total; // Вычисляем начиная с какого номера // следует выводить сообщения $start = $page * $num - $num; // Выбираем $num сообщений начиная с номера $start $result3 = mysql_query("SELECT * FROM bonus ORDER BY id LIMIT $start, $num", $db); $myrow3 = mysql_fetch_array($result3); // Проверяем нужны ли стрелки назад if ($page != 1) $pervpage = '<a href=bonus1.php?page=1>Первая</a> | <a href=bonus1.php?page='. ($page - 1) .'>Предыдущая</a> | '; // Проверяем нужны ли стрелки вперед if ($page != $total) $nextpage = ' | <a href=bonus1.php?page='. ($page + 1) .'>Следующая</a> | <a href=bonus1.php?page=' .$total. '>Последняя</a>'; // Находим две ближайшие станицы с обоих краев, если они есть if($page - 5 > 0) $page5left = ' <a href=bonus1.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | '; if($page - 4 > 0) $page4left = ' <a href=bonus1.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | '; if($page - 3 > 0) $page3left = ' <a href=bonus1.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | '; if($page - 2 > 0) $page2left = ' <a href=bonus1.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | '; if($page - 1 > 0) $page1left = '<a href=bonus1.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | '; if($page + 5 <= $total) $page5right = ' | <a href=bonus1.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>'; if($page + 4 <= $total) $page4right = ' | <a href=bonus1.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>'; if($page + 3 <= $total) $page3right = ' | <a href=bonus1.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>'; if($page + 2 <= $total) $page2right = ' | <a href=bonus1.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>'; if($page + 1 <= $total) $page1right = ' | <a href=bonus1.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>'; // Вывод меню если страниц больше одной if ($total > 1) { Error_Reporting(E_ALL & ~E_NOTICE); echo "<div class=\"pstrnav\">"; echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage; echo "</div>"; } 

Thank.

  • one
    @Regina, To format the code, select it with the mouse and click on the button 101010 of the editor. - Ilya Pirogov

2 answers 2

What you showed is called page navigation. Quote: how does php find out on which page we are now? So here, as your links are formed:

 <a href=bonus1.php?page='. ($page - 5) .'> 

The page parameter is passed with the page number using the GET method.

    I will rewrite the code a bit. what I have changed is that I added /// before the replacement line.

     <?php $result1 = mysql_query("SELECT str FROM options", $db); $myrow1 = mysql_fetch_array($result1); $num = $myrow1["str"]; // Извлекаем из URL текущую страницу /// @$page = $_GET['page']; $page = @$_GET['page']; // @ - "глушение" вывода ошибки, только вот @ нужно ставить перед $_GET а не перед $page // Определяем общее число сообщений в базе данных $result2 = mysql_query("SELECT COUNT(*) FROM bonus"); $temp = mysql_fetch_array($result2); $posts = $temp[0]; // Находим общее число страниц /// $total = (($posts - 1) / $num) + 1; /// $total = intval($total); $total = ceil($posts / $num); // ceil - целое число с округление в большую сторону. Аналогичная функция floor - округляет в меньшую сторону /// например /// ceil(5.1); // 6 /// floor(5.9) // 5 // Определяем начало сообщений для текущей страницы $page = intval($page); // Если значение $page меньше единицы или отрицательно // переходим на первую страницу // А если слишком большое, то переходим на последнюю if(empty($page) or $page < 0) $page = 1; if($page > $total) $page = $total; // Вычисляем начиная с какого номера // следует выводить сообщения $start = $page * $num - $num; // Выбираем $num сообщений начиная с номера $start $result3 = mysql_query("SELECT * FROM bonus ORDER BY id LIMIT $start, $num", $db); $myrow3 = mysql_fetch_array($result3); /// то что ниже - это полный капец... /* // Проверяем нужны ли стрелки назад if ($page != 1) $pervpage = '<a href=bonus1.php?page=1>Первая</a> | <a href=bonus1.php?page='. ($page - 1) .'>Предыдущая</a> | '; // Проверяем нужны ли стрелки вперед if ($page != $total) $nextpage = ' | <a href=bonus1.php?page='. ($page + 1) .'>Следующая</a> | <a href=bonus1.php?page=' .$total. '>Последняя</a>'; // Находим две ближайшие станицы с обоих краев, если они есть if($page - 5 > 0) $page5left = ' <a href=bonus1.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | '; if($page - 4 > 0) $page4left = ' <a href=bonus1.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | '; if($page - 3 > 0) $page3left = ' <a href=bonus1.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | '; if($page - 2 > 0) $page2left = ' <a href=bonus1.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | '; if($page - 1 > 0) $page1left = '<a href=bonus1.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | '; if($page + 5 <= $total) $page5right = ' | <a href=bonus1.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>'; if($page + 4 <= $total) $page4right = ' | <a href=bonus1.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>'; if($page + 3 <= $total) $page3right = ' | <a href=bonus1.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>'; if($page + 2 <= $total) $page2right = ' | <a href=bonus1.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>'; if($page + 1 <= $total) $page1right = ' | <a href=bonus1.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>'; // Вывод меню если страниц больше одной if ($total > 1) { Error_Reporting(E_ALL & ~E_NOTICE); echo "<div class=\"pstrnav\">"; echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage; echo "</div>"; } */ /// немного перепишу. if ($total > 1) { $navLinks = array(); $link = $_SERVER['PHP_SELF']; if ($page != 1) { // если мы не на первой странице - добавляем ссылку "в начало" $navLinks[] = '<a href="'.$link.'">В начало</a>'; $navLinks[] = '<a href="'.$link.'?page='.($page - 1).'">Предыдущая</a>'; } for ($i = 5 ; $i > 0; $i--) { $p = $page - $i; if ($p > 0) { $navLinks[] = '<a href="'.$link.'?page='.($p).'">'.$p.'</a>'; } } $navLinks[] = $page; for ($i = 1 ; $i <= 5; $i++) { $p = $page + $i; if ($p < $total) { $navLinks[] = '<a href="'.$link.'?page='.($p).'">'.$p.'</a>'; } } if ($page != $total) { $navLinks[] = '<a href="'.$link.'?page='.($page + 1).'">Следующая</a>'; $navLinks[] = '<a href="'.$link.'?page='.$total.'">Последняя</a>'; } } echo '<div class="pstrnav">'; echo join ('&nbsp;|&nbsp;', $navLinks); echo '</div>';