Потребител Парола | Регистрация | Забравена парола
Меню
· Начало
· Файлове
· Форум
· Връзки
· Категории на уроците
· За контакти
· Фото галерия
· Търсене
Кажи на приятел

Вашия email:
email на приятел:
Копие за вас?
Реклама

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

PHP & MySQLНастоящият файл съдържа кода, с който извиквате информацията от ДБ-то и я форматирате според вкуса си. За това как да вкарате тази информация в ДБ-то, потърсете съответния урок Wink
----
Първо, трябва да направите връзка с базата данни:
<?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 месеца) Smile

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



· ko6rata на January 19 2011 10:36:50 · 0 Коментари · 1268 Прочитания · Отпечатай
Коментари
Няма добавени коментари.
Напиши коментар
Моля влезте, за да коментирате.
Оценка
Рейтингите са достъпни само за регистрирани.

Моля влезте или се регистрирайте за да гласувате.

Няма оценки.
Вход
Потребител

Парола



Не сте регистрирани?
Натиснете тук за регистрация.

Забравена парола?
Натиснете тук за нова.
Анкета
С каква операционна система работите











Трябва да влезете за да гласувате.
ЧАТ
Трябва да влезате за да пуснете съобщение.

Няма съобщения.
Статистика