Я хочу вводить предыдущие и следующие кнопки для форума, который у меня есть, потому что после того, как форум становится длинным, он превосходит фоновое изображение и выглядит не очень хорошо! Кто-нибудь знает простой способ сделать это или что-то, на что я могу смотреть на предыдущие и следующие кнопки? Я хочу, чтобы каждая страница ограничивалась только 5 сообщениями на страницу или что-то в этом роде.
Heres код, если он вообще помогает. Извините, если это глупый вопрос.
<?php $dbc=mysql_connect('host','user','password','database') or die(mysql_error()); mysql_select_db('database',$dbc) or die(mysql_error()); ?> View Posts <br> <form method="get" action="view_forum.php"> <label>Select Weather to Filter </label><br /> <select name="weather"> <option value="all">all</option> <option value="cloudy">Cloudy</option> <option value="sunny">Sunny</option> <option value="windy">Windy</option> <option value="snowy">Snowy</option> <option value="mixy">Wintery Mix</option> <option value="rainy">Rainy</option> </select> <input type="submit" value="view" /> </form> <div id="view"> <center><img src="images/forum.png" width="589" height="97"></center> </div> <div id="white"> <div id="blue"> <div id="grey"> <div id="container"> <?php $weather = mysql_real_escape_string( $_GET["weather"] ); // keep your input clean if ( $weather == "all" ) { $sql = "SELECT * FROM stories ORDER BY id DESC"; } else { $sql = "SELECT * FROM stories WHERE weather = '$weather' ORDER BY id DESC"; } $result = mysql_query( $sql ) or die( mysql_error() ); while ( $row = mysql_fetch_assoc( $result ) ) { echo "<div class=\"names\"> {$row['name']}<br /></div>"; echo "<div class=\"weathers\">{$row['weather']}<br /></div>"; echo "<div class=\"stories\">{$row['story']}<br /></div>"; echo "<img src=\"images/line.png\" width='800' height='3'>"; echo "<br />"; } ?> </div> </div> </div> </div>
Это просто. Вы сохраняете переменную страницы в запросе.
if (!isset($_GET['page']) { $page = 1; } else { $page = (int)$_GET['page']; }
И в вашем SQL-выражении вы бы поставили что-то вроде этого, которое использует переменную страницы для настройки пределов запроса:
$query = 'SELECT * FROM someTable WHERE 1 LIMIT ' . (($page - 1) * $recordsPerPage) . ' ' . $recordsPerPage;
Так или иначе. Теперь для ваших ссылок Previous и Next вы помещаете что-то вроде этого, чтобы вы могли увеличивать / уменьшать переменную страницы:
<? if ($page > 1) : ?> <a href="self.php?page=<?= $page - 1 ?>">Prev</a> <? endif ?> <? if ($page != $maxPages) : ?> <a href="self.php?page=<?= $page + 1 ?>">Next</a> <? endif ?>
Вам нужно разбивать страницы, в MySQL вы можете использовать TOP:
-- Fist 10 results: SELECT * FROM stories ORDER BY id DESC TOP 10 -- 10 results from the number 11 (0 is the first) SELECT * FROM stories ORDER BY id DESC TOP 10,10 -- 10 results from the number 50 SELECT * FROM stories ORDER BY id DESC TOP 50,10
Для получения полного результата вы можете использовать SQL_CALC_FOUND_ROWS:
SELECT SQL_CALC_FOUND_ROWS as total, stories.* FROM stories ORDER BY id DESC TOP 10
Из PHP вы можете рассчитать разбиение на страницы:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1; if ($page < 1) $page = 1; $sql = "SELECT SQL_CALC_FOUND_ROWS as total, stories.* FROM stories ORDER BY id DESC TOP " . ($page-1) . ",10";