1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Построчный вывод данных в PHP

Тема в разделе "Web Coding", создана пользователем асс, 3 окт 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Мож кто поможет
    Ато я чето туплю
    Задача брать из файла адреса доменов
    проверять на клейку
    и выводить на странице
    у меня
    примерно так
    @$html = file_get_contents("http://www.сайт/search?hl=ru&q=g:".$valid);
    preg_match('|<span >(.*)</span>|mi', $html, $result);

    нижу условные операторы
    которые срабатывают от условия

    как сделать чтоб скрипт мог проверять быстро базу
    выводить список провереного на странице
    так же интересует возможность исключеничя бана
    проверять буду чегез гугл

    может ставить слипы
    или проксю
    у кого какие идеи будут.
     
  2. FreeTest

    FreeTest Постоялец

    Регистр.:
    26 апр 2007
    Сообщения:
    51
    Симпатии:
    8
    Код на php постраничный вывод

    Универсальный постраничный вывод
    Наверное, каждый разработчик сталкивался с необходимостью постраничного вывода какой-либо информации на экран. Практически в каждом проекте всегда есть "что-то", что не помещается на одну страницу и его нужно вывести по частям, классическим примером этому может служить, вывод информации в yandex или google. Все видели панель навигации, в низу страницы, между страницами, как сделать подобную панель навигации, и посвящена эта статья.
    Статей, как сделать постраничный вывод много, но если информации будет очень много, на пример поиск в yandex с запросом, типа "php", то все эти скрипты, описанные в статьях, окажутся не пригодными к использованию, скрипт 1 реализует такой простейший постраничный вывод. Представьте, что по этому запросу yandex нашел 100 тЫс. сайтов и на каждой странице находится по 10 сайтов, т.е. 10 тис. страниц, и все эти ссылки вывести на экран :). Когда посетитель увидит этот ужас на вашем сайте, он сразу же "убежит" и никогда не вернется, а если это будет выглядеть, как показано в примере 1 - то это совсем другое дело.
    |< ... 122 123 124 125 126 127 128 129 130 131 132 ... >|
    Пример 1.
    Так будет выглядеть панель навигации, которая описана в этой статье. Итак, приступим. Все комментарии я буду выдавать по ходу работы.
    Но сейчас немного теории и принципа работы данного скрипта
    Принцип работы скрипта прост, мы просто пробегаем всю окрестность текущей страницы. Ищем в окрестности текущей страницы действительные ссылки и выводим их. Весь остальной код - это просто для наглядности, в частности первый цикл (в скрипте № 2), он предназначен для того, чтобы количество ссылок было постоянным. Приведу пример опять же с yandex, когда по запросу найдено много сайтов, то внизу страницы вы увидите панель навигации приблизительно такого вида, как показано в примере 2.
    1 2 3 4 5 6 7 8 ...
    Пример 2.
    Приблизительно так выглядит панель навигации в yandex, когда вы находитесь на первой странице.
    Когда вы перейдете на 8 страницу, то панель навигации будет уже выглядеть так, как показано в примере 3.
    1 2 3 4 5 6 7 8 10 11 12 13 14 15 ...
    Пример 3
    Приблизительно так выглядит панель навигации в yandex, когда вы находитесь на 8 странице.
    Как видно в примере 3, количество ссылок изменилось. Немного лучше выглядит панель навигации, в которой количество ссылок постоянно, но в таком скрипте больше кода.
    Ссылки типа "следующая" отсутствуют, вместо них присутствуют ссылки на первую и последнюю страницу. Сделано сие намеренно - ни разу в жизни не нажимал на "следующая", если можно было нажать на номер страницы, а вот ссылки на первую и последнюю страницу не помешают.
    Ниже приведен скрипт простейшего постраничного вывода, а также скрипты обеих навигационных панелей, т.е. с постоянным количеством ссылок и с отсеченными по "краям".
    Скрипт 1
    Простейший постраничный вывод
    <?php
    function link_bar($page, $pages_count)
    {
    for ($j = 1; $j <= $pages_count; $j++)
    {
    // Вывод ссылки
    if ($j == $page) {
    echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> ';
    } else {
    echo ' <a style="color: #808000;" href='.$_server['php_self'].'?page='.$j.'>'.$j.'</a> ';
    }
    // Выводим разделитель после ссылки, кроме последней
    // например, вставить "|" между ссылками
    if ($j != $pages_count) echo ' ';
    }
    return true;
    } // Конец функции
    // Подключение к базе данных
    mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');
    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД
    if (empty($_get['page']) || ($_get['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_get['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
    $pages_count = ceil($count / $perpage); // Количество страниц
    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    // Вызов функции, для вывода ссылок на экран
    link_bar($page, $pages_count);
    // Вывод информации из базы данных
    echo '<p><b>Постраничный вывод информации</b></p>';
    $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!');
    while ($row = mysql_fetch_array($result)) {
    echo '<p>'.$row['some_field'].'</p>';
    }
    ?>
    Скрипт 2
    С постоянным количеством ссылок
    <?php
    function universal_link_bar($page, $count, $pages_count, $show_link)
    {
    // $show_link - это количество отображаемых ссылок;
    // нагляднее будет, когда это число будет парное
    // Если страница всего одна, то вообще ничего не выводим
    if ($pages_count == 1) return false;
    $sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
    // Для придания ссылкам стиля
    $style = 'style="color: #808000; text-decoration: none;"';
    $begin = $page - intval($show_link / 2);
    unset($show_dots); // На всякий случай :)
    // Сам постраничный вывод
    // Если количество отображ. ссылок больше кол. страниц
    if ($pages_count <= $show_link + 1) $show_dots = 'no';
    // Вывод ссылки на первую страницу
    if (($begin > 2) && !isset($show_dots) && ($pages_count - $show_link > 2)) {
    echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
    }
    for ($j = 0; $j < $page; $j++) {
    // Если страница рядом с концом, то выводить ссылки перед идущих для того,
    // чтобы количество ссылок было постоянным
    if (($begin + $show_link - $j > $pages_count) && ($pages_count-$show_link + $j > 0)) {
    $page_link = $pages_count - $show_link + $j; // Номер страницы
    // Если три точки не выводились, то вывести
    if (!isset($show_dots) && ($pages_count-$show_link > 1)) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($page_link - 1).'><b>...</b></a> ';
    // Задаем любое значение для того, чтобы больше не выводить в начале "..." (три точки)
    $show_dots = "no";
    }
    // Вывод ссылки
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$page_link.'>'.$page_link.'</a> '.$sperator;
    } else continue;
    }
    for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
    {
    $i = $begin + $j; // Номер ссылки
    // Если страница рядом с началом, то увеличить цикл для того,
    // чтобы количество ссылок было постоянным
    if ($i < 1) {
    $show_link++;
    continue;
    }
    // Подобное находится в верхнем цикле
    if (!isset($show_dots) && $begin > 1) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
    $show_dots = "no";
    }
    // Номер ссылки перевалил за возможное количество страниц
    if ($i > $pages_count) break;
    if ($i == $page) {
    echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
    } else {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
    }
    // Если номер ссылки не равен кол. страниц и это не последняя ссылка
    if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    // Вывод "..." в конце
    if (($j == $show_link) && ($i < $pages_count)) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
    }
    }
    // Вывод ссылки на последнюю страницу
    if ($begin + $show_link + 1 < $pages_count) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
    }
    return true;
    } // Конец функции
    // Подключение к базе данных
    mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');
    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД
    if (empty($_get['page']) || ($_get['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_get['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
    $pages_count = ceil($count / $perpage); // Количество страниц
    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    // Вызов функции, для вывода ссылок на экран
    universal_link_bar($page, $count, $pages_count, 10);
    // Вывод информации из базы данных
    echo '<p><b>Постраничный вывод информации</b></p>';
    $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!');
    while ($row = mysql_fetch_array($result)) {
    echo '<p>'.$row['some_field'].'</p>';
    }
    ?>
    Скрипт 3
    С отсеченными по "краям" ссылками
    <?php
    function yandex_link_bar($page, $count, $pages_count, $show_link)
    {
    // $show_link - это количество отображаемых ссылок;
    // нагляднее будет, когда это число будет парное
    // Если страница всего одна, то вообще ничего не выводим
    if ($pages_count == 1) return false;
    $sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
    // Для придания ссылкам стиля
    $style = 'style="color: #808000; text-decoration: none;"';
    $begin = $page - intval($show_link / 2);
    unset($show_dots); // На всякий случай :)
    // Сам постраничный вывод
    // Если количество отображ. ссылок больше кол. страниц
    if ($pages_count <= $show_link + 1) $show_dots = 'no';
    // Вывод ссылки на первую страницу
    if (($begin > 2) && ($pages_count - $show_link > 2)) {
    echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
    }
    for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
    {
    $i = $begin + $j; // Номер ссылки
    // Если страница рядом с началом, то увеличить цикл для того,
    // чтобы количество ссылок было постоянным
    if ($i < 1) continue;
    // Подобное находится в верхнем цикле
    if (!isset($show_dots) && $begin > 1) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
    $show_dots = "no";
    }
    // Номер ссылки перевалил за возможное количество страниц
    if ($i > $pages_count) break;
    if ($i == $page) {
    echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
    } else {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
    }
    // Если номер ссылки не равен кол. страниц и это не последняя ссылка
    if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    // Вывод "..." в конце
    if (($j == $show_link) && ($i < $pages_count)) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
    }
    }
    // Вывод ссылки на последнюю страницу
    if ($begin + $show_link + 1 < $pages_count) {
    echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
    }
    return true;
    } // Конец функции
    // Подключение к базе данных
    mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
    mysql_select_db('data_base') or die('error! Нет соединения с базой данных!');
    // Подготовка к постраничному выводу
    $perpage = 10; // Количество отображаемых данных из БД
    if (empty($_get['page']) || ($_get['page'] <= 0)) {
    $page = 1;
    } else {
    $page = (int) $_get['page']; // Считывание текущей страницы
    }
    // Общее количество информации
    $count = mysql_numrows(mysql_query('select * from table')) or die('error! Записей не найдено!');
    $pages_count = ceil($count / $perpage); // Количество страниц
    // Если номер страницы оказался больше количества страниц
    if ($page > $pages_count) $page = $pages_count;
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
    // Вызов функции, для вывода ссылок на экран
    yandex_link_bar($page, $count, $pages_count, 10);
    // Вывод информации из базы данных
    echo '<p><b>Постраничный вывод информации</b></p>';
    $result = mysql_query('select * from table limit '.$start_pos.', '.$perpage) or die('error!');
    while ($row = mysql_fetch_array($result)) {
    echo '<p>'.$row['some_field'].'</p>';
    }
    ?>
    Переменные, которые требуют подробного описания:
    $page - Текущая страница, передается от скрипта к скрипту методом get.
    $perpage - Количество отображаемых данных из базы данных, на примере yandex - это количество ссылок на сайты, отображаемых на одной странице.
    $count - Общее количество информации, на примере yandex - это количество найденных сайтов по запросу.
    $pages_count - Количество страниц, без комментариев.
    $start_pos - Начальная позиция, используется только в запросе к базе данных.
    Вот и все! Универсальный постраничный вывод готов ;).

    P.S. есть ещё варианты с "работой декад" если будет интересно напишу...

    Источник: из разных мест :)
     
  3. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Вы может не так поняли Или я не так написал


    но мне щас надо немного другое Построчный вывод данных в PHP
    берем файл базу и выводим по строкам на екран


    вот рабочий пример
    этот код идет на сайт в каталог и проверяет есть ли домен в каталоге дмоза
    если есть выводит на страничку
    если нет не вывводит
    мне надо чтоб
    скрипт выводил 3 условия
    но при обращению к гуглу

    например скрипт лезет в гугл и смотрит информацию по домену. если доме который запросили
    выдан в ответе такой точно
    значит клейки нет
    если выдно извините нет инфы
    значит в кеше нет домена
    если выдал другой домен в ответе
    значит клейка.

    $file = 'dmoz.txt';
    $f = fopen ($file, "rt");
    $lines = explode ("\n", fread ($f, filesize ($file)));
    $i = '0';
    While ($i < count ($lines))
    {
    $parse = parse_url ($lines[$i]);
    $pc = strtr ($lines[$i], array(
    "www." => "",
    "/" => "",
    ));
    $fc = file_get_contents ("http://www.google.com/advanced_search?q=info:i-own-this.com&hl=ru&lr=&client=opera&rls=ru".$pc);
    $ch = strpos ($fc, "Open Directory Categories");
    if ($ch > '1')
    {
    echo $pc.'<br>';
    }
    $i ++;
    }
     
  4. smith17

    smith17 Прохожие

    Может помочь вызов flush() после каждого echo - эта функция выбрасывает в аутпут все, что скопилось в аутпут буффере.
     
  5. anarki

    anarki Прохожие

    Но может не работать в нескольких случаях, когда браузер рендерит страницу по своему. Может на сервере быть включено кеширование или сжатие и т.д.

    У меня такой вариант работает
    PHP:
    <?php
    for($i=0;$i<10;$i++) {
        echo 
    "$i";
        
    ob_flush();
        
    // little bug
        
    echo "<br />\n";
        
    flush();
        
    ob_flush();
        
    usleep(1000000);
    }
    ?>
    Opera 9, IE 6, Firefox 2
     
Статус темы:
Закрыта.