<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Форум сайта MyRusakov.ru

Постраничная навигация
03.06.2012 16:23:40 Постраничная навигация Сообщение #1
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Ребят. У меня есть цикл FOR, который делает выборку из БД.
Т.к. записей в таблице очень много, то страница очень долго грузится. Не подскажете, как сделать постраничную навигацию для этого цикла? Т.е. чтобы цикл через каждые 20 записей переходил на другую страничку (?page=2 например) и там продолжал выборку, и т.д.

Цикл:
<?php
$projects = getRentProjects();
for ($i = 0; $i < count($projects); $i++) {
echo '<tr>';
echo '<td>'.$projects[$i]['id'].'</td>';
echo '<td><a href = "show_project.php?project='.$projects[$i]['id'].'"><img src = "projects/images/'.$projects[$i]['photo'].'" alt = "" title = "Подробнее" /></a></td>';
if ($projects[$i]['comission'] == 1) echo '<td><b>'.$projects[$i]['deal'].'</b><br />'.$projects[$i]['realty'].'<br /><img src = "images/comission.png" alt = "" style = "width: 100px;" /></td>';
else echo '<td><b>'.$projects[$i]['deal'].'</b><br />'.$projects[$i]['realty'].'</td>';;
echo '<td>'.$projects[$i]['location'].'<br /><i>'.$projects[$i]['move'].'</i></td>';
if ($projects[$i]['sto'] == 0) echo '<td>'.$projects[$i]['sfrom'].' кв. м.</td>';
else echo '<td>'.$projects[$i]['sfrom'].' - '.$projects[$i]['sto'].' кв. м.</td>';
if ($projects[$i]['vto'] == 0) echo '<td>'.$projects[$i]['vfrom'].'<br />'.$projects[$i]['curresy'].'</td>';
else echo '<td>'.$projects[$i]['vfrom'].' - '.$projects[$i]['vto'].'<br />'.$projects[$i]['curresy'].'</td>';
echo '<td>'.$projects[$i]['names'].'<br /><a href = "mailto:'.$projects[$i]['email'].'">'.$projects[$i]['email'].'</a><br /><span style = "font-size: 14px;">'.$projects[$i]['number'].'<br />+7 (495) 797-10-27</span></td>';
echo '</tr>';
}
?>
Профиль
03.06.2012 16:30:23 Постраничная навигация Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

http://myrusakov.ru/php-page-navigation.html
Профиль
04.06.2012 19:48:14 Постраничная навигация Сообщение #3
KotOFF

KotOFF

Освоившийся

Освоившийся

Дата регистрации:
25.05.2012 10:21:29

Сообщений: 33

<?php
error_reporting(NULL);
$dbhost = "localhost";
$dbuser = "user"; // Юзер в БД
$dbpass = "pass"; // Пароль Юзера
$dbname = "bd"; // Имя БД

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database";
mysql_select_db($dbname);


$tableName="users"; //Название Таблица в БД ( с которой будет вывод )
$targetpage = "all_users.php"; //На какой странице будет вывод ( пишете свою )
$limit = 10; // Скока строк вытаскивать с таблицы ( по 10 строк на страницу )

$query = "SELECT COUNT(*) as num FROM $tableName";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];

$stages = 3;
$page = mysql_escape_string($_GET['page']);
if($page){
$start = ($page - 1) * $limit;
}else{
$start = 0;
}


$query1 = "SELECT * FROM $tableName LIMIT $start, $limit";
$result = mysql_query($query1);


if ($page == 0){$page = 1;}
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total_pages/$limit);
$LastPagem1 = $lastpage - 1;


$paginate = '';
if($lastpage > 1)
{




$paginate .= "<div class='paginate'>";

if ($page > 1){
$paginate.= "<a href='$targetpage?page=$prev'>Предыдущая</a>";
}else{
$paginate.= "<span class='disabled'>Предыдущая</span>"; }




if ($lastpage < 7 + ($stages * 2))
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
}
elseif($lastpage > 5 + ($stages * 2))
{

if($page < 1 + ($stages * 2))
{
for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
$paginate.= "...";
$paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
$paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
}

elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
{
$paginate.= "<a href='$targetpage?page=1'>1</a>";
$paginate.= "<a href='$targetpage?page=2'>2</a>";
$paginate.= "...";
for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
$paginate.= "...";
$paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
$paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";
}

else
{
$paginate.= "<a href='$targetpage?page=1'>1</a>";
$paginate.= "<a href='$targetpage?page=2'>2</a>";
$paginate.= "...";
for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{
$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}
}
}
}


if ($page < $counter - 1){
$paginate.= "<a href='$targetpage?page=$next'>Следущая</a>";
}else{
$paginate.= "<span class='disabled'>Следущая</span>";
}

$paginate.= "</div>";


}

// Навигация
echo $paginate;




while($row = mysql_fetch_array($result))
{

//Вывод уже сами переделаете под себя!
echo "<div class='all_users'>
<div class='all_users_avatar'><img alt='аватар' src=".$row['avatar']."></div>
<div class='all_users_login'><a href='users.php?id=".$row['id']."'>".$row['login']."</a><br>
<p>E-mail: ".$row['email']."</p><br>
Дата Регистации: ".$row['date']."</div></div><br>";

}

?>

Вот Стили:

<style>

/*Навигация */

.paginate {
font-family: Gabria;
padding: 3px;
margin: 3px;
}

.paginate a {
padding:2px 5px 2px 5px;
margin:2px;
text-decoration:none;
color: #666;
}
.paginate a:hover, .paginate a:active {
color: #FFF;
}
.paginate span.current {
margin: 2px;
padding: 2px 5px 2px 5px;
font-weight: bold;
color: #FFF;
}
.paginate span.disabled {
padding:2px 5px 2px 5px;
margin:2px;
color:#DDD;
}

</style>
Профиль
09.06.2012 15:13:47 Постраничная навигация Сообщение #4
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Михаил, я прочитал вашу статью и подогнал всё под свой движок. Теперь возник ещё один вопрос. Как узнать номер последней страницы?
Профиль
09.06.2012 16:38:45 Постраничная навигация Сообщение #5
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Узнать количество записей и поделить его на число записей на странице. Число, возможно, будет нецелым, поэтому его надо округлить в большую сторону.
Профиль
09.06.2012 16:40:39 Постраничная навигация Сообщение #6
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Почему то 0.05 получается, хотя страниц на самом деле 7.
Профиль
09.06.2012 16:51:03 Постраничная навигация Сообщение #7
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Посмотрите значения переменных, отвечающих за общее количество записей и за количество записей на одной странице.
Профиль
09.06.2012 16:54:53 Постраничная навигация Сообщение #8
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

$all = $mysqli->query("SELECT COUNT(*) FROM projects WHERE `deal` = 'Аренда'";
Вот так я выбирал все записи, а потом делил на количество записей на каждой странице.
$pages = $all / $count;
Получилось 0.05. Причём всегда получается 0.05.
Профиль
09.06.2012 17:18:48 Постраничная навигация Сообщение #9
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Вы не поняли, что я писал в предыдущем сообщении. Вот статья: http://myrusakov.ru/php-finderror.html
Профиль
09.06.2012 18:43:47 Постраничная навигация Сообщение #10
RussianPro

RussianPro

Эксперт

Эксперт

Дата регистрации:
14.07.2011 01:32:38

Сообщений: 114

Делал
print_r($all);
Пишет mysqli_result Object ( )
Профиль