2012-05-03 4 views
1

Я хочу вводить предыдущие и следующие кнопки для форума, который у меня есть, потому что после того, как форум становится длинным, он превосходит фоновое изображение и выглядит не очень хорошо! Кто-нибудь знает простой способ сделать это или что-то, на что я могу смотреть на предыдущие и следующие кнопки? Я хочу, чтобы каждая страница ограничивалась только 5 сообщениями на страницу или что-то в этом роде.Предыдущие/следующие кнопки?

Это код, если он вообще помогает. Извините, если это глупый вопрос.

<?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> 

ответ

2

Это легко. Вы сохраняете переменную страницы в запросе.

if (!isset($_GET['page']) { 
    $page = 1; 
} else { 
    $page = (int)$_GET['page']; 
} 

И в вас SQL заявление, вы бы поставить что-то вроде этого, который использует переменную страницы, чтобы настроить пределы запроса:

$query = 'SELECT * FROM someTable WHERE 1 LIMIT ' . (($page - 1) * $recordsPerPage) . ' ' . $recordsPerPage; 

Что-то вроде, что в любом случае. Теперь для предыдущей и следующей ссылки вы положили что-то вроде этого, так что вы можете увеличивать/уменьшать переменные страницы:

<? 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 ?> 
+0

У меня возникли проблемы, когда я должен поместить все это в код. Извините ... этот материал php дает мне проблемы! –

+0

@ChristineAustin Это не предназначено для вырезания и вставки сайта. Сначала вы должны попытаться понять, что происходит в коде, а затем реализовать его. Если вы не знаете, куда положить вышеуказанные элементы, это заставляет меня поверить, что вы не понимаете, что они делают, что может быть очень опасно для веб-инженера и их сервера. Проходите через каждого, и если вы не понимаете, что они делают, тогда исследуйте, пока не сделаете. – dqhendricks

+0

Вы правы, я не буду спорить с этим. Поскольку я новичок в этом, я попытаюсь сломать его. Спасибо за вашу помощь. –

0

Вы должны постраничной в 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"; 
+1

@JeffPigarelli MySQL на самом деле не понимает «TOP». Вместо этого вы должны использовать «LIMIT». – dqhendricks

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