Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

постраничный вывод информации из Mysql на PHP

22K
10 февраля 2007 года
MoLe-X
6 / / 09.02.2007
Вот код:
Код:
<?php
include "config.php";
function page()
{
    if(empty($_GET["page"]))
    {
        $page = 0;
    }
    else
    {
        if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!");
        $page = $_GET["page"];
    }
    return $page;
}
function sql_query($onpage, $page, $table)
{
    $begin = $page*$onpage; // откуда начинать
    $sql = "SELECT * FROM $table LIMIT ".$begin.", ".$onpage;
    $result = mysql_query($sql) or die(mysql_error());
    return $result;
}
function navigation($onpage, $page, $table)
{
    $return = null;
    $count = mysql_query("SELECT COUNT(*) FROM kupc_news_base") or die(mysql_error());
    $count = mysql_fetch_array($count);
    $count = $count[0];
    $pages = $count/$onpage;
    if($page!==0)
    {
        $prev = "<A HREF=\"?page=".($page-1)."\">&lt;</A>";
    }
    else
    {
        $prev = "<";
    }
    if($page<round($pages-1))
    {
        $next = "<A HREF=\"?page=".($page+1)."\">&gt;</A>";
    }
    else
    {
        $next = ">";
    }
    for($i=0; $i<$pages; $i++)
    {
        if($i==$page)
        {
            $return.="[".($i+1)."]";
        }
        else
        {
            $return.="<A HREF=\"?page=".$i."\">[".($i+1)."]</A>";
        }
    }
    return $prev.$return.$next;
}
 
$onpage = 2; // записей на страницу
$table = "kupc_news_base"; // из какой таблицы
mysql_connect("$localhost", "$user", "$pass") or die(mysql_error()); // коннект к БД
mysql_select_db("$bd_name"); // выбор БД
$page = page(); // определяем страницу
$result = sql_query($onpage, $page, $table); // sql - запрос
while($data = mysql_fetch_array($result)) // цикл вывода
{
    // шаблон вывода нужно изменить
    // $data["название_поля"] - содержание поля
    echo $data["id"]." <B>".$data["author"]."</B><BR>";
    echo $data["text_polno"]."<P>";
}
$navigation = navigation($onpage, $page, $table); // определим навигацию
echo $navigation; // выведем ее
mysql_close(); // отключение от БД
?>

Он ввыводит постранично информацию из базы данных, как сделать что бы он вначале ввыводил последнию новость, затем предпоследнию и т.д.??? Буду благодарен за любые советы. За ОЧЕНЬ ценную помощь могу отблагодарит (подгоню базу e-mail адресов в 10000, актуальность - 87%)
337
10 февраля 2007 года
shine
719 / / 09.06.2006
Читай в MySQL про ORDER BY.
244
10 февраля 2007 года
UAS
2.0K / / 19.07.2006
Не по теме: Хоть бы код оформил что ли...
22K
10 февраля 2007 года
MoLe-X
6 / / 09.02.2007
Цитата: UAS
Не по теме: Хоть бы код оформил что ли...


А зачем??? Кстати спасибо Shine за совет... Хотя ща возникла другая проблема, даю код если кто захочет помочь - то ему он пригодиться...

Код:
INDEX.PHP
<?php
include "config.php";
function page()
{
    if(empty($_GET["page"]))
    {
        $page = 0;
    }
    else
    {
        if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!");
        $page = $_GET["page"];
    }
    return $page;
}
function sql_query($onpage, $page, $table)
{
    $begin = $page*$onpage; // откуда начинать
    $sql = "SELECT * FROM $table ORDER BY $onpage DESC";
    $result = mysql_query($sql) or die(mysql_error());
    return $result;
}
function navigation($onpage, $page, $table)
{
    $return = null;
    $count = mysql_query("SELECT COUNT(*) FROM .... ") or die(mysql_error());
    $count = mysql_fetch_array($count);
    $count = $count[0];
    $pages = $count/$onpage;
    if($page!==0)
    {
        $prev = "<A HREF=\"?page=".($page-1)."\">&lt;</A>";
    }
    else
    {
        $prev = "<";
    }
    if($page<round($pages-1))
    {
        $next = "<A HREF=\"?page=".($page+1)."\">&gt;</A>";
    }
    else
    {
        $next = ">";
    }
    for($i=0; $i<$pages; $i++)
    {
        if($i==$page)
        {
            $return.="[".($i+1)."]";
        }
        else
        {
            $return.="<A HREF=\"?page=".$i."\">[".($i+1)."]</A>";
        }
    }
    return $prev.$return.$next;
}
 
$onpage = 2; // записей на страницу
$table = "kupc_news_base"; // из какой таблицы
mysql_connect("$localhost", "$user", "$pass") or die(mysql_error()); // коннект к БД
mysql_select_db("$bd_name"); // выбор БД
$page = page(); // определяем страницу
$result = sql_query($onpage, $page, $table); // sql - запрос
while($data = mysql_fetch_array($result)) // цикл вывода
{
    // шаблон вывода нужно изменить
    // $data["название_поля"] - содержание поля
    echo $data["id"]." <B>".$data["author"]."</B><BR>";
    echo $data["text_polno"]."<P>";
}
$navigation = navigation($onpage, $page, $table); // определим навигацию
echo $navigation; // выведем ее
mysql_close(); // отключение от БД
?>

CONFIG.PHP
<?php
$localhost = "localhost"; //адрес скула
$user = "user";    //пользователь
$pass = "pass";    //пароль
$bd_name = ""; //название базы
$tbl_name = ""; // название таблицы
?>

Структура таблицы базы

CREATE TABLE имя
(
    `id` int(11) NOT NULL auto_increment,
    `author` text NOT NULL,
    `text_kpatko` text NOT NULL,
    `text_polno` text NOT NULL,
    `views` int(11) NOT NULL default '1',
    `datew` text NOT NULL,
    `ip` text NOT NULL,
UNIQUE KEY id (id)
) TYPE=MyISAM;
#
# Дамп данных таблицы
#
INSERT INTO kupc_news_base VALUES (1, 'MoLe-X', 'Первая фигня, краткая', 'Первая фигня, полная', '2', '10.02.2007', '127.0.0.1');
INSERT INTO kupc_news_base VALUES (2, 'MoLe-X', 'Вторая фигня, краткая', 'Вторая фигня, полная', '3', '10.02.2007', '127.0.0.1');
INSERT INTO kupc_news_base VALUES (3, 'MoLe-X', 'Третья фигня, краткая', 'Третья фигня, полная', '4', '10.02.2007', '127.0.0.1');
INSERT INTO kupc_news_base VALUES (4, 'MoLe-X', 'Четвер фигня, краткая', 'Четвер фигня, полная', '5', '10.02.2007', '127.0.0.1');
INSERT INTO kupc_news_base VALUES (5, 'MoLe-X', 'Пятаяя фигня, краткая', 'Пятаяя фигня, полная', '6', '10.02.2007', '127.0.0.1');
INSERT INTO kupc_news_base VALUES (6, 'MoLe-X', 'Шестая фигня, краткая', 'Шестая фигня, полная', '7', '10.02.2007', '127.0.0.1');
1.9K
10 февраля 2007 года
InterWen
331 / / 16.09.2006
Цитата:
А зачем???



А ЗАТЕМ, что в таком виде за "спасибо" читать мало кто станет.


Цитата:
Хотя ща возникла другая проблема, даю код если кто захочет помочь - то ему он пригодиться...



В смысле "ему он пригодиться"? Вряд ли тут собрались люди, которые не напишут подобного в более приглядном виде - это раз, целесообразнее - это два. Если это было сказано в форме отдолжения - "так и быть, кто хочет поработать телепатом, предоставляю код...", то что ж, спасибо, будем развивать сверх-естественные способности.

Суть описана так и не была, КАКАЯ, если не секрет "другая проблема"?

253
10 февраля 2007 года
Proger_XP
1.5K / / 07.08.2004
загнать можно было
8
10 февраля 2007 года
mfender
3.5K / / 15.06.2005
[COLOR=darkred]=========================[/COLOR]
[COLOR=darkred]2MoLe-X: На первый раз тебе большой выговор с занесением в репутацию за хамство. Второй раз, когда я буду оформлять твой код - пойдёшь в баню. Ознакомься с правилами, прежде чем писать "а зачем?" на предложение оформить код.[/COLOR]
[COLOR=darkred]=========================[/COLOR]


На этом форуме уже раза три ложил функцию, которую написал ещё года четыре назад и до сих пор её пользуюсь (в различных модификациях):

Код:
function GetNavArray($startItem, $itemsCount, $unitsPerPage, $unitsInNavbar, $URLString=null)
{
    $num_units_all=ceil($itemsCount/$unitsPerPage);
    $actual_block=floor(($startItem/$unitsPerPage)/$unitsInNavbar);
    $end_block=$num_units_all/$unitsInNavbar;
    $start_unit=floor(($actual_block*$unitsInNavbar)+1);
    $end_unit=$start_unit+$unitsInNavbar;
    for($n=$start_unit; $n<$end_unit; ++$n){
        $val = (int)(($n*$unitsPerPage)-$unitsPerPage);
        if($val<=$startItem) $ret['actual_unit'] = $n;
        $ret['pages'][$n] = is_null($URLString) ? $val : sprintf($URLString, $val);
    }
    $start_unit!=1 ? $ret['prev_arrow'] = $actual_block * (($unitsPerPage * $unitsInNavbar) - $unitsPerPage) : $ret['prev_arrow'] = 0;
    $actual_block < floor($num_units_all/$unitsInNavbar) ? $ret['next_arrow'] = $end_unit * $unitsPerPage - $unitsPerPage : $ret['next_arrow'] = 0;
    if(!is_null($URLString)){
        $ret['prev_arrow'] = $ret['prev_arrow'] ? sprintf($URLString, $ret['prev_arrow']) : 0;
        $ret['next_arrow'] = $ret['next_arrow'] ? sprintf($URLString, $ret['next_arrow']) : 0;
    }
    return $ret;
}


Вобщем, на входе такие данные:

$startItem - порядковый номер записи
$itemsCount - всего записей из БД, которые могут быть
$unitsPerPage - записей показываемых на одной странице
$unitsInNavbar - сколько ссылок будет в "листалке"
$URLString - опционально, если хочется получить уже готовые ссылки, типа article8.htm - в этом случае параметр $URLString будет выглядеть как article%d.htm

Т.е., например GetNavArray(200, 30000, 20, 5, "article%d.htm") вернёт вот такой массив:

Код:
Array
(
    [actual_unit] => 11
    [pages] => Array
        (
            [11] => article200.htm
            [12] => article220.htm
            [13] => article240.htm
            [14] => article260.htm
            [15] => article280.htm
        )
    [prev_arrow] => article160.htm
    [next_arrow] => article300.htm
)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог