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