Помогни ни да направим Uroci.net по - богат! Добави урок

Страниране на резултат от База Данни

PHP » PHP
cheeseus   трудност:    видян: 10164

Настоящият файл съдържа кода, с който извиквате информацията от ДБ-то и я форматирате според вкуса си. За това как да вкарате тази информация в ДБ-то, потърсете съответния урок ;)
----
Първо, трябва да направите връзка с базата данни:
<?php
// Връзка с ДБ
include 'db.php';

Във файла, който включваме - db.php - се съдържат името на хоста, името на ДБ, паролата за достъп до нея, името на потребителя на ДБ, както и кода за осъществяване на връзката. Пример:

<?php
$dbhost="localhost";
$dbusername="*************";
$dbpassword="************";
$dbname="**************";


$connect = mysql_connect($dbhost, $dbusername, $dbpassword);
mysql_select_db($dbname,$connect) or die ("Could not select database");
?>

След това, трябва да определим дали променливата $page (която съдържа номера на страницата) е зададена и ако не е, ще й зададем стойност 1.

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

След това трябва да укажем колко резултата искаме да бъдат показвани на една страница:

// Задаваме броя резултати на страница
$max_results = 10;

След като сме указали максималния брой резултати ($max_results), трябва да определим по какъв начин ще извикаме само част от резултата в MySQL заявката. Както виждате, това е една математическа операция:

// Определяме лимита на заявката на база
// на номера на настоящата страница
$from = (($page * $max_results) - $max_results);

Горният код дефинира стойността на $from като взема номера на настоящата страница ($page) и го умножава по максималния брой резултати ($max_results) и после изважда стойността на $max_results от стойността на $page * $max_results.Получената стойност се използва в израза LIMIT от MySQL заявката. Нужно е да разберем как работи този израз. Структурата му е: LIMIT FROM, OFFSET, т.е. "ОРГАНИЧИ ОТКЪДЕ, ДОКЪДЕ". В нашия случай, за първата страница искаме да сложим органичение на резулатати от 0 до 10 (LIMIT 0, 10) а за втората страница LIMIT 10, 10 и така нататък.

След това трябва да направим MySQL заявката. В нея ще използваме стойностите, определени в горните редове. В тази заявка ще зададем органичение LIMIT $from, $max_results.

// Правим заявка само за резултатите за настоящата страница
$result = mysql_query("SELECT * FROM news LIMIT $from, $max_results");

След това, ще използваме израза while, с който ще обходим резултатите от mysql_fetch_array и ще ги покажем с израза echo. Тук можем да форматираме резултатите според собствения си вкус. Ще ви дам пример с това как аз съм форматирал моите резултати:

while($myrow = mysql_fetch_array($result))
{// начало на цикъла
// Показване на резултатите
echo "<table width=550><tr><td align=left class=newstitle width=80%>";
echo $myrow['title'];
echo "</td><td align=left class=newscat>";
echo "<a xhref="filtered.php?category=$myrow[category]" class=newscat>";
echo $myrow['category'];
echo "</a></td></tr><tr><td align=left colspan=2 height=1 bgcolor=#000000></td></tr><tr><td align=left class=date>[ <i>";
echo $myrow['dtime'];
echo "</i> ]</td></tr><tr><td align=left colspan=2 class=newsbody>";
echo $myrow['description'];
echo "  <a xhref="read_more.php?newsid=$myrow[newsid]" class=more>more >></a></td></tr>";
}
// Край на цикъла

Ако затворим кода дотук, ще можем да видим само една страница с резултати. Остава ни да добавим кода, с който номерираме страниците с резултати.
Ще трябва да преброим колко реда имаме в базата данни. Използвайки израза
mysql_result и функцията COUNT в MySQL, ще можем да изпълним едно много ефикасно запитване към таблицата, за да преброим редовете в нея. Стойността на променливата $total_results ще е равна на броя редове, който се съдържа във вашата таблица.

// Изчисли общия брой резултати в ДБ-то
$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM news"),0);

Сега трябва да изчислим колко страници с резултати ще бъдат показани от кода. Ще вземем променливата общ брой резултати ($total_results) и ще я разделим на максималния брой резултати, който сме задали по-горе ($max_results) и ще получим стойност. С малко логическа мисъл обаче, ще се сетим, че ако в дазата ни с данни има 101 резултата, след умножението, ще имаме стойност 10.1. която ще обърка показването. Затова е нужно да закръглим тази стойност нагоре, като използваме функцията ceil(), която в нашия случай ще даде резултат 11.

// Изчисляваме общия брой страници. Винаги закръгляме с функцията
ceil()
$total_pages = ceil($total_results / $max_results);

Сега вече знаем колко са страниците с резултати и трябва да напишем кода, с който ще покажем номерата на страниците. Ще изпишем линк "<< предишна" , който ще е активен, ако сме на страница, различна от първата. Това става с израза if, с който определяме дали номера на настоящата страница е по-голям от 1. Също така ще направим променливата $prev, която е равна на настоящата страница минус 1, за да може да ни върне на предишната страница.

// Показване на линка Предишна Страница
if($page > 1){
$prev = ($page - 1);
echo "<a class=newscat xhref="".$_SERVER['PHP_SELF']."?page=$prev"><<Previous</a> ";
}

Сега следва частта, в която ще напишем един FOR цикъл, в който определяме броя на страниците (първо обяснението, после самия код):

Началната стойност на променливата $i е 1 ($i = 1). Ако $i е по-малко или равно на броя страници ($i <= $total_pages), тогава продължи да увеличаваш стойността ($i++) дотогава, докато $i не е по-малко или равно на $total_pages ($i <= $total_pages). Сега самия код:

for($i = 1; $i <= $total_pages; $i++){
if(($page) == $i){
echo "$i ";
} else {
echo "<a class=newscat xhref="".$_SERVER['PHP_SELF']."?page=$i">$i</a> ";
}
}


Така, сега трябва да покажем линка, който води към СЛЕДВАЩАТА страница с резултати.

// Показване на линка СЛЕДВАЩА страница
if($page < $total_pages){
$next = ($page + 1);
echo "<a class=newscat xhref="".$_SERVER['PHP_SELF']."?page=$next">Next>></a>";
}

А сега трябва да затворим PHP скрипта (и HTML таблицата, в която показвам резултата) и сме готови:

echo "</td><tr></table>";
?>

Този код разбира се няма да работи, ако нямате таблица във вашата база данни, която да се казва "news" или както там сте я кръстили. Не забравяйте да промените името й в кода по-горе! Таблицата, която аз използвам в този пример се казва "news" и има следните редове:
'title' (заглавие), 'category' (категория), 'dtime' (дата на вкарване на записа в ДБ), 'description' (кратко описание) и 'newsid' (ID на новината) и 'text', който не се вижда тук, но се показва, когато натиснете линка

read_more.php?newsid=$myrow[newsid]

който се показва след всеки от резултатите. Вътре в израза echo също така принтирам и малко HTML и CSS клас, за да оформя резултатите си естетически.
За любопитните, ето тук аз използвам гореописания код - след като го прочетох от урока от сайта PHP FREAKS и реших, че може да бъде полезен и на някой новак в PHP като мен (аз се занимавам от 5 месеца) :)

Този урок е превод на урока "Page Numbering With PHP And MySQL Results", взет от http://www.phpfreaks.com/tutorials/73/1.php .



Коментари (9)

ncuxo на 27.02 2007 в 12:57ч.
хора моля ви обеснете ми как да виждам през dreamweaver като кажете напиши тва напиши онова и то не се вижда през dreamweaver как мога да го опрая само прес нет-а се вижда кат цукна F12 :(((
ncuxo на 27.02 2007 в 13:00ч.
сущо как се прави вруска от скоро почвам да прая сайт не сум запознат сорру за тапите вапорси ;[
lyubo на 08.03 2007 в 16:51ч.
Ми, човек ти мани че въпросите ти са безбожно тъпи, но са и абсолютно неразбираеми!

Как очакваш някой да ти отговори?
bubust на 08.03 2007 в 19:51ч.
В DreamWeaver имаш 3 поленца : code, split, design. За да виждаш кода от страницата, трябва да си цъкнал на поленцето code. Линк се създава когато избереш текста (ако искаш да е текст) и в полето Propertise имаш Link. Там пишеш къде искаш да води натискането върху текста.
dobritu на 23.04 2007 в 16:35ч.
А бе то бива бива неграмтни хора, ама чак като вас не съм виждал !!! Как може да пишеш echo " more >>";
}
Я виж хуваичко какво пише?!?!? писане на урок който съм виждал.Поне си оправи грешките че да не ти се смеят хората.
Joey на 10.05 2007 в 19:14ч.
Незнам защо, но не ми показва линк за следваща страница. Пише си "1 2 Next>>" ама само като текст и немога да видя следващата страница... :(
Някой може ли да ми помогне ?
azerot на 22.08 2008 в 21:54ч.
МН хубав урок, работи 10x :)
martyyy на 12.08 2009 в 20:59ч.
тои рабори но в моята заявка се предава с и трябва да има клаъза where и тогава страницирането не работи някои ще ми помогне ли
martyyy на 16.08 2009 в 20:45ч.
никой ли не знае

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com