Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: постраничный вывод данных из текстовой базы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

SakurA



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Необходимо большой массив данных разбить на страницы с возможностью перехода от одной страницы к другой.
 
 
Есть данные:
====data1.txt===
ID1-data1||message1-data1||time1-data1
ID2-data1||message2-data1||time2-data1
ID3-data1||message3-data1||time3-data1
.
.
ID(n)-data1||message(n)-data1||time(n)-data1
====end data1.txt=====
 
 
====data2.txt===
ID1-data2||message1-data2||time1-data2
ID2-data2||message2-data2||time2-data2
ID3-data2||message3-data2||time3-data2
.
.
ID(n)-data2||message(n)-data2||time(n)-data2
====end data2.txt=====
 
 
====data(m).txt===
ID1-data(m)||message1-data(m)||time1-data(m)
ID2-data(m)||message2-data(m)||time2-data(m)
ID3-data(m)||message3-data(m)||time3-data(m)
.
.
ID(n)-data(m)||message(n)-data(m)||time(n)-data(m)
====end data(m).txt=====
 
 
 
===“index.php”===
<?php
 
НЕОБХОДИМ КОД
 
?>
==============
 
Чтобы при “index.php?data=data1” браузер показывал следующие:
++++++ index.php?data=data1 ++++
    message1-data1
    message2-data1
    message3-data1
 
                               _ .. 2 .. 3 .. 4  
+++++++++++++++++++++++++
или
+++index.php?data=data2&page=2+++
      message4-data2
      message5-data2
      message6-data2
 
                                1 .. _ .. 3 .. 4  
+++++++++++++++++++++++++
 
 
Вопрос как это сделать? Примеры с решением данной задачи с использованием «mySQL» есть, в том числе и на этом форуме, а вот без «mySQL» я не нашел. Возможно кто-то подскажет как реализовать это при помощи РНР.





Уточнил. — Svarga.

Всего записей: 8 | Зарегистр. 22-11-2003 | Отправлено: 00:37 23-11-2003 | Исправлено: Svarga, 01:55 23-11-2003
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SakurA

Код:
<?
// разбиваем файл в массив
$ourfile = file ('data1.txt');
 
// допустим будет по 3 на страницу
$onpage = 3;
 
// смотрим какую страницу просили
$page = intval($_GET['page']);
 
// делаем переменную с номером стартовой строки  
$startline = $page * $onpage - $onpage;
 
// если на выбранной странице ничего не будет, покажем первую
if ( $startline >= count ($ourfile) ) {
   
$startline = 0;
}
 
// и еще одну с номером строк которые уже показали
$alllines = 0;
 
// показываем $onpage строк
while ($alllines < $onpage){
   print
$ourfile[$startline+$alllines];
   
$alllines++;
}
// всем спасибо, все свободны
?>

 
поидее должно работать...


----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 00:51 23-11-2003 | Исправлено: xntx, 00:55 23-11-2003
SakurA



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
<?
$dat = array('data1', 'data2');
 
if(!empty($_GET['data'])){
 
if (in_array ($_GET['data'], $dat)){
$dat = $_GET['data'];
}else{$dat = "data1";}  
 
}else{$dat = "data1";}  
 
 
$out = "{$dat}.txt";
$file = file($out);
$total = count($file);
 
 
$perPage = 5;
 
if(empty($_GET['number'])){
$number = $perPage;
}
 
for($i = 0; $i < $total; $i++){
if ($i >= ($number-$perPage) && $i < $number){
$split = explode("||",$file[$i]);
 
echo $split[0]."-".$split[1]."-".$split[2]."<br>";
}
}
 
######
$y=1;
$c=1;
$num=$perPage;
while($total > ($num-($perPage))){
 
if($perPage < $total){
if(($number-($perPage-1)) == $y && $number == $num){
echo "$c .. ";
} else { echo "<a href=\"index1.php?data=$dat&number=$num\">$c</a> .. \n";
}
}
$num+=$perPage;
$y+=$perPage;
$c++;
}
######
?>  
 

 
Короче сам разобрался...
Держите.. Может кому и пригодиться.

Всего записей: 8 | Зарегистр. 22-11-2003 | Отправлено: 04:02 23-11-2003
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SakurA
вот я тебе "оптимизировал" код. вторую часть я почти не менял, потом что почти ничего не понял.

Код:
<?php
 
if ( empty ( $_GET['data'] ) ) die ( 'must specify data' );  
 
$dat = ( $_GET['data'] == 'data1' ) ? 'data1' : 'data2';
 
$file = file ( $dat.'.txt' );  
$total = count ( $file );  
 
$perPage = 5;
 
$number = empty ( $_GET['number'] ) ? $perPage : $_GET['number'];
 
for (
$i = 0; $i < $total; $i++ ) {  
   if (
$i >= ( $number - $perPage ) AND $i < $number ){
      print
implode( '-', explode ( "||", $file[$i] ) ) . '
'
;  
   }  
}  
 
######
if ( $perPage < $total ) {  
   
$y = 1;
   
$c = 1;  
   
$num = $perPage;  
   while (
$total > ( $num - ( $perPage ) ) ) {  
      if ( (
$number - ( $perPage - 1 ) ) == $y AND $number == $num){  
         print
"$c .. ";  
      } else {
         print
"<a href=\"index1.php?data={$dat}&number=$num\">$c</a> .. \n";  
      }  
     
$num += $perPage;  
     
$y += $perPage;  
     
$c++;  
   }
}
######  
?>

 
Добавлено
и вобще, что там во второй части делается? насколько я понимаю - номер страницы. но не легче ли тогда показать ceil ( $total / $perPage );?

----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 04:23 23-11-2003
Vezlivii_Ham2



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот такая задача: есть txt файл, он по совместительству исполняет роль «базы данных» куда записывается информация из формы. Таким образом, получаем файл в котором ну например 20 записей. Как их вывести их на странице по 5 штук. При чем, на не выведенные записи должны генерироваться ссылки «страницы: 1,2,3»

----------
женский журнал, приколы и демотиваторы

Всего записей: 365 | Зарегистр. 31-01-2004 | Отправлено: 02:39 18-03-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vezlivii_Ham2
чем не устраивает то, что выше? или лень читать?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:42 18-03-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vezlivii_Ham2
А чем не устраивает скрипт во втором посте данного топика ?

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 02:44 18-03-2005
Vezlivii_Ham2



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery, Advanced_Guest
Читать мне конечно не лень.. и эту тему и "полезные решения", и все что нашел фильтрами. Только мне нужно, чтобы скрипт выводил эти записи не из нескольких  
"баз", а из одной..

----------
женский журнал, приколы и демотиваторы

Всего записей: 365 | Зарегистр. 31-01-2004 | Отправлено: 10:34 18-03-2005 | Исправлено: Vezlivii_Ham2, 10:35 18-03-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vezlivii_Ham2
Ок, из 1 файла.
 
Но это не меняет вопрос. чем не подходит скрипт из второго поста данной темы ?
 
http://forum.ru-board.com/topic.cgi?forum=31&topic=4243#2

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 13:33 18-03-2005
Vezlivii_Ham2



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Advanced_Guest
 
ну вот вроде поставил. работает... Только смотри, у меня в текстовый фал записываются строки вида:
имя\\фамилия\\возраст
 
Как сделать, чтобы каждая из трех строк (в приме по три строки на страницу) выводилась по шаблону
 
<b>mess[0]</b> <i>mess[1]</i> <u>mess[3]</u>
 
?

----------
женский журнал, приколы и демотиваторы

Всего записей: 365 | Зарегистр. 31-01-2004 | Отправлено: 17:12 21-03-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vezlivii_Ham2
   print $ourfile[$startline+$alllines];
Вместо этой строки напиши примерно следующее:
 
$part= explode('\\',$ourfile[$startline+$alllines]);
echo "<b>{$part[0]}</b> <i>{$part[1]}</i> <u>{$part[2]}</u>
 
 
PS: если не будет работать с такой строкой, попробуй  
$part= explode('\\\\',$ourfile[$startline+$alllines]);


----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 00:49 22-03-2005
Vezlivii_Ham2



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Advanced_Guest
большое спасибо за помощь )

----------
женский журнал, приколы и демотиваторы

Всего записей: 365 | Зарегистр. 31-01-2004 | Отправлено: 16:16 23-03-2005
iogun



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использую движок e107
Тема: e107v4a
В модуле theme.php есть функция, которая отвечает за вывод информации в контенте сайта "table_style"  
Где параметры  
$caption - заголовок окошка
$text - содержание
 
содержание слишком большое что бы отобразить его в одном окне, поэтому я решил сделать постраничный вывод. В этой функции из переменной $text я формирую массив страниц $pages, с помощью сепаратора $sep, далее строку со ссылками $HRefPages и далее все это отображаю. Но ссылки не работают постоянно отображается одно и то же содержание. Не могу понять как мне в эту функцию передать значение переменно которая отвечает за номер текущей страницы. Совсем запутался. Помогите пожалуйста, я новичок в этом.  
 

Цитата:
 
 
function tablestyle_arr($caption, $text){
        global $style;
 
$sep="{page}";
$pages  = explode($sep, $text);
$count_pages = count($pages);
$HrefPage='';
for ($i = 0; $i <=$count_pages; $i++)
{
    $PageStart=($i);
    $HrefPage=$HrefPage."<a href=".getenv('PHP_SELF')."?start=".$i." target=_parent> |".$i."| </a>";
}
        echo "
<div class='spacer'>
<table cellpadding='0' cellspacing='0'>
<tr>
<td class='captiontopleft'><img src='".THEME_ABS."images/blank.gif' width='24' height='3' alt='' style='display: block;' /></td>
<td class='captiontopmiddle'><img src='".THEME_ABS."images/blank.gif' width='1' height='3' alt='' style='display: block;' /></td>
<td class='captiontopright'><img src='".THEME_ABS."images/blank.gif' width='11' height='3' alt='' style='display: block;' /></td>
</tr>
</table>
<table cellpadding='0' cellspacing='0'>
<tr>
<td class='captionleft'><img src='".THEME_ABS."images/blank.gif' width='24' height='18' alt='' style='display: block;' /></td>
<td class='captionbar' style='white-space:nowrap'>".$caption."</td>
<td class='captionend'><img src='".THEME_ABS."images/blank.gif' width='12' height='18' alt='' style='display: block;' /></td>
<td class='captionmain'><img src='".THEME_ABS."images/blank.gif' width='1' height='18' alt='' style='display: block;' /></td>
<td class='captionright'><img src='".THEME_ABS."images/blank.gif' width='11' height='18' alt='' style='display: block;' /></td>
</tr>
</table>
 
<table cellpadding='0' cellspacing='0'>
<tr>
<td class='bodyleft'><img src='".THEME_ABS."images/blank.gif' width='3' height='1' alt='' style='display: block;' /></td>
<td class='bodymain'>".$pages[]."</td>
<td class='bodyright'><img src='".THEME_ABS."images/blank.gif' width='3' height='1' alt='' style='display: block;' /></td>
</tr>
</table>
 
<table cellpadding='0' cellspacing='0'>
  <tr>
    <td class='bodyleft'><img src='".THEME_ABS."images/blank.gif' width='3' height='1' alt='' style='display: block;' /></td>
    <td class='bodymain'>".$HrefPage."</td>
    <td class='bodyright'><img src='".THEME_ABS."images/blank.gif' width='3' height='1' alt='' style='display: block;' /></td>
  </tr>
</table>
 
 

 
 
Разобрался сам.

Всего записей: 477 | Зарегистр. 31-08-2004 | Отправлено: 19:45 11-11-2006 | Исправлено: iogun, 09:59 12-11-2006
sk0t



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые господа!
PHP начал изучать недавно, поэтому хотелось бы узнать: Где и какие ошибки и недочеты допустил?
 
Описание:
Постоянно показывается не более 8 ссылок на  соседние страницы, и первая и последняя страницы.
Текущаая выделяется спаном.  
$total - всего сообщений, $page - текущая страница, $onpage - сообщений на странице.

Код:
 
function getPages($total, $page, $onpage)
   {
   $p_max = 10;  //Кол-во ссылок на каждой странице
   $p_lr = floor(($p_max - 2) / 2);  //Кол-во ссылок слева и справа от текущей при разрывах
   $pages = ceil($total / $onpage);
   $pages = (int) $pages;
   if ($pages <= $p_max)  //Если всего страниц не более чем ссылок на странице
      {
      $p_from = 2;  //Следующая после первой
      $p_to = $pages;  //Последняя
      }
   else  //Если всего страниц больше чем ссылок на странице
      {
      $p_from = $page<$p_max ? 2 : $page - $p_lr;
      $p_to = $page<$p_max ? $p_max + 1 : $page + $p_lr + 1;
      if ($p_to > $pages) { $p_to = $pages; }
      if (($p_from + $p_max) > $pages) { $p_from = $pages - $p_max + 1; }
      }
   $out = "";
   if($pages < 2) { $out .= ""; }  //Если страниц меньше 2, ничего не выводим
   else
      {
      if ($page == 1) { $out .= "<span>1</span>"; }  //Выводим первую: если текущая то спаном
      else { $out = "<a href=\"index.php?page=1\">1</a>"; }  // если нет то ссылкой
      if ($p_from > 2) { $out .= "..."; }  //Если после первой не вторая, выводим точки
         for($i=$p_from;$i<$p_to;$i++)  //Проходим циклом, выводим ссылки на страницы
            {
            if ($i == $page) { $out .= "<span>$i</span>"; }  //если текущая то спаном
            else { $out .= "<a href=\"index.php?page=$i\">$i</a>"; }  //иначе ссылкой
            }
      if ($p_to < $pages) { $out .= "..."; }  //Если перед последней не предпоследняя, выводим точки
      if ($page == $pages) { $out .= "<span>$pages</span>"; }  //Выводим последнюю: если текущая то спаном
      else { $out .= "<a href=\"index.php?page=$pages\">$pages</a>"; }  // если нет то ссылкой
      }
   return $out;
   }
 

Всего записей: 35 | Зарегистр. 02-06-2005 | Отправлено: 21:21 14-10-2010 | Исправлено: sk0t, 00:11 16-10-2010
Bridun

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем помогите сделать постраничнй вывод  
Это сам вывод с гостевой как его разбить постранично потому что много собирается  
у тех примерах я шотоникак немогу разобраться
<?php
 
  $message_file = file("engine/quest.csv");
  foreach($message_file as $line)
  {
 
    $elem = explode(";",$line);
 
    echo("<tr>
        <td align=center valign=top colspan=2><b>Имя :</b> $elem[1] ( <b>$elem[2]</b> )</td>
 
    </tr>
    <tr>
 
        <td align=center valign=top width=50%><b>E-mail :</b> <a href=mailto:$elem[3] target=_blank>$elem[3]</a></td>
        <td align=center valign=top width=50%><b>Сайт :</b> <a href=$elem[4] target=_blank>$elem[4]</a></td>
    </tr>
    <tr>
        <td valign=top colspan=2><div style=margin-left:20px; ><b>Вопрос </b>№ ($elem[0]) $elem[5]</div></td>
 
    </tr>
    <tr>
        <td align=right valign=top colspan=2><small>Написано : $elem[6]</small></td>
 
    </tr>
    <tr>
        <td bgcolor=#E0F1F7 valign=top colspan=2 ><div style=margin-left:20px;><b><font color=red>$elem[7]</font></b></div></td>
            </tr>
                <tr>
        <td valign=top colspan=2 >&nbsp;</td>
            </tr>");
 
    }
   echo("</table>");
 
?>

Всего записей: 4 | Зарегистр. 31-01-2011 | Отправлено: 20:37 31-01-2011
Bridun

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста осталась одна проблема почему не переключается  
 
PHP код:  
<?  
// подключаем ф-ю  
function navigator( $title, $title_links, $id, $quantity_show, $total, $get )  
{  
if( $id=='' )  
{  
$id='1';  
}  
if( $quantity_show < '1' )  
{  
$quantity_show = '1';  
}  
$line = $title;  
$pages = ceil( $total / $quantity_show );  
for( $i = 1; $i <= $pages; $i++ )  
{  
if( $pages > $pages - $id and $id <= $pages )  
{  
$e = ( $i * $quantity_show ) - $quantity_show;  
$e = $e / $quantity_show;  
if( $i == '0' )  
{  
$e++;  
}  
if( $quantity_show == '1' and $i != '1' )  
{  
$e++;  
}  
if( $id == $i )  
{  
$second = $quantity_show * $id;  
$first = $second - $quantity_show;  
if($second > $total)  
{  
$second = $total;  
}  
if($second < '0')  
{  
$second = '0';  
}  
$e = $e + 1;  
$line.= ' <a href="?'.$get.'='.$i.'" title="'.$title_links.' '.$i.'">'.$e.'</a> |';  
}  
if( $id < $i and $id < $i and $id != $i)  
{  
$e = $e + 1;  
$line .= ' <a href="?'.$get.'='.$i.'" title="'.$title_links.' '.$i.'">'.$e.'</a> |';  
}  
if( $id > $i and $id > $i and $id != $i)  
{  
$e = $e + 1;  
$line .= ' <a href="?'.$get.'='.$i.'" title="'.$title_links.' '.$i.'">'.$e.'</a> |';  
}  
}  
}  
if( strlen( $line ) > '11' )  
{  
return array( $line, $first, $second );  
}  
return FALSE;  
}  
# если есть данные в командной строке, то выводим их  
if ( isset( $_GET ) )  
{  
foreach ( $_GET as $key => $value )  
{  
$$key=$value;  
}  
}  
# считываем базу в массив строк, в нашем случае база называется 'txt/csv' и данные в ней должны иметь разделение \n  
$file = file('engine/guest.csv');  
# считаем сколько всего строк в базе  
$total = count($file);  
$count = count($file);  
# применим функцию (по три записи на вывод)  
$line_arr = navigator('Страниц :','', $page, 3, $total, 'page');  
# в итоге получается $line - линия навигации  
$line = $line_arr[0];  
# какой первый $file выводить, именно на этой страничке  
$first = $line_arr[1];  
# какой последний $file выводить, именно на этой страничке  
$second = $line_arr[2];  
# еще раз печатаем линию навигации, но уже вверху  
for ( $i = $total - $first - 1; $i >= $total - $second; $i--)  
{  
$elem = explode (';', $file[$i]);  
echo(" <table border=1 bordercolor=#E5E5E5 align=center cellpadding=0 cellspacing=0 width=100% ><tr>  
<td align=center valign=top colspan=2><b>Имя :</b> $elem[1] ( <b>$elem[2]</b> )</td>  
</tr>  
<tr>  
<td align=center valign=top width=50%><b>E-mail :</b> <a href=mailto:$elem[3] target=_blank>$elem[3]</a></td>  
<td align=center valign=top width=50%><b>Сайт :</b> <a href=$elem[4] target=_blank>$elem[4]</a></td>  
</tr>  
<tr>  
<td valign=top colspan=2><div style=margin-left:20px; ><b>Вопрос :</b> $elem[5]</div></td>  
</tr>  
<tr>  
<td align=right valign=top colspan=2><small>Сообщение № $elem[0] написано $elem[6]</small></td>  
</tr>  
<tr>  
<td bgcolor=#E0F1F7 valign=top colspan=2 ><div style=margin-left:20px;><b>$elem[7]</b><font color=red>$elem[8]</font></div></td>  
</tr>  
<tr>  
<td valign=top colspan=2 >&nbsp;</td>  
</tr></table>");  
}  
if($line != '')  
{  
echo "$line";  
}  
echo "<br>Всего ссообщений : $count<br>";  
?>
 
Добавлено:
в смысле работает отлично в админке а на сайте нет всмысле в браузере переключается  ?page=1или2 а на самом деле нет помогите пожалуйста

Всего записей: 4 | Зарегистр. 31-01-2011 | Отправлено: 00:02 14-02-2011
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: постраничный вывод данных из текстовой базы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru