Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Постраничный вывод из базы данных

Сообщения:  [1-10]   [11-13] 

 
 автор: lifead   (03.09.2007 в 20:06)   письмо автору
 
   для: mjc66   (03.09.2007 в 16:30)
 

Ну это замечательно, в принципе даже и помощь не понадобилась. :)

   
 
 автор: mjc66   (03.09.2007 в 16:30)   письмо автору
 
   для: mjc66   (03.09.2007 в 07:26)
 

Все таму можно закрывать , проблема была в этой строке:

$page = (isset($_GET['page']));
заменил ее на эту:

$page = isset($_GET['page']) ? $_GET['page'] : 1; 
и все заработало как надо

   
 
 автор: mjc66   (03.09.2007 в 07:26)   письмо автору
 
   для: lifead   (03.09.2007 в 07:20)
 

Самая первая с наименьшим id

   
 
 автор: lifead   (03.09.2007 в 07:20)   письмо автору
 
   для: mjc66   (01.09.2007 в 17:25)
 

так всетаки, первой строкой будет выводитя последняя запись или самая первая запись - самая древняя?

   
 
 автор: mjc66   (03.09.2007 в 05:02)   письмо автору
 
   для: lifead   (03.09.2007 в 04:19)
 

Да, я крайне заинтересован в Вашей помощи! А что же касается вывода данных то они должны выводится в хронологическом порядке.

   
 
 автор: lifead   (03.09.2007 в 04:19)   письмо автору
 
   для: mjc66   (02.09.2007 в 16:04)
 

Написано все хорошо, с несколькими но:
1) php плохо работает с функцией деления "/", что может являтся причиной многих недаразумений, может изза этого у Вас и не работал скрип.
2) у меня вызывают вопросы в правильности написания подойбной строки, там кавычки неправильно расставлены, но это не суть важно

<?php // Проверяем нужны ли стрелки вперед   
if ($page != $total$nextpage ' <a href= ./page?page='. ($page 1) .'>></a>   
                                   <a href= ./page?page='
>>></a>';  ?>

3)> Меня терзают смутные сомнения относительно необходимости наличия:
Вы правы, нет надобности создавать такое большое число страниц/
Но если честно легче написать новый скрипт который будет ормировать запросы и выводить их на страницу.
Если желаете могу поэтапно объяснить, что зачем следует в написании скрипта.
Для начала необходимо уточнить в каком порядке Вам необходим вывод данных в хронологическом порядке (на первой странице должны отображаться записа с 1й по 50ю или с последней - n по (n-50)).
Предлагаю попробовать использовать мою функция со следующими параметрами

<?php
$st
=270;//это сколько всего поззиций;
$kolmax=50//сколько позиций на одной странице
/*переменная $ad отвечающая за адрес на которую будет перенаправлена страниза после нажатия ссылки*/
/* переменная $var берется из массива $_GET[''] 
 например в строке http://www.имя_сайта.ru?var=1  $ad='http://www.имя_сайта.ru'; а   $var=$_GET['var']  */ 
listing(1,$ad,$st,$var,$kolmax)
?>

   
 
 автор: mjc66   (02.09.2007 в 16:04)   письмо автору
 
   для: lifead   (02.09.2007 в 08:33)
 

Хочу внести некоторую ясность в то как у меня в настоящий момент обстоит дело. Вот код файла conclusion_sss.php который осуществляет вывод из БД:

<?php  
// Устанавливаем соединение с базой данных  
include "config_mysql.php";
//переменная
$group_production = (isset($_GET['group_production']))?$_GET['group_production']:'ГСО(Государственные Стандартные Образцы)';
?>
<style>  
    .cell_1{background:99FFCC}   
    .cell_2{background:FFFFCC}   
</style> 

<table border='1' cellspacing='1' cellpadding='1' class='3'> 
    <tr> 
        <td class='3' align='center'> 
            <b>Наименование товара</b> 
        </td> 
    </tr>
<?php  
// Переменная хранит число товарных позиций выводимых на странице  
$num 50;  
// Извлекаем из URL текущую страницу  
$page = (isset($_GET['page']));  
// Определяем общее число товарных позиций в базе данных  
$result mysql_query("SELECT COUNT(*) FROM tovary");  
$result mysql_fetch_row($result);  
// Находим общее число страниц  
$total intval(($result[0] - 1) / $num) + 1;  
// Определяем начало товарных позиций для текущей страницы  
$page intval($page);  
// Если значение $page меньше единицы или отрицательно  
// переходим на первую страницу  
// А если слишком большое, то переходим на последнюю  
if(empty($page) or $page 0$page 1;  
  if(
$page $total$page $total;  
// Вычисляем начиная к какого номера  
// следует выводить товарные позиции  
$start $page $num $num;  
// Выбираем $num сообщений начиная с номера $start  
$result mysql_query("SELECT * FROM tovary WHERE group_production = 'ГСО(Государственные Стандартные Образцы)' LIMIT $start,$num");  
// В цикле переносим результаты запроса в массив
    
$i 0;  
while (
$arResult mysql_fetch_array($result)): 
    
$i++; 
?> 
    <tr class='cell_<?=($i%2)+1;?>'> 
        <td> 
            <?=$arResult['name'];?> 
        </td>
    </tr> 
<?endwhile;?>
</table>
<?php  
// Проверяем нужны ли стрелки назад  
if ($page != 1$pervpage '<a href= ./page?page=><<</a>  
                               <a href= ./page?page='
. ($page 1) .'><</a> ';  
// Проверяем нужны ли стрелки вперед  
if ($page != $total$nextpage ' <a href= ./page?page='. ($page 1) .'>></a>  
                                   <a href= ./page?page='
>>></a>';  

// Находим две ближайшие станицы с обоих краев, если они есть  
if($page - 2 > 0) $page2left = ' 
<a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';  
if($page - 1 > 0) $page1left = '
<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';  
if($page + 2 <= $total) $page2right = ' 
| <a href= ./page?page='. ($page + 2) .'>'. ($page + 2) .'</a>';  
if($page + 1 <= $total) $page1right = ' 
| <a href= ./page?page='. ($page + 1) .'>'. ($page + 1) .'</a>'; 

// Вывод меню  
echo $pervpage.$page2left.$page1left.'
<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;  

?> 

Как видно запрос ведется к одному столбцу 'group_production' . Т.е. при наличие свыше 250 строк в этом столбце (но менее 300) и при условии по 50 строк на страницу должно получиться 6 страниц. Эти страницы у меня имеются:
/State_Standard_Samples.php
/State_Standard_Samples2.php
/State_Standard_Samples3.php
/State_Standard_Samples4.php
/State_Standard_Samples5.php
/State_Standard_Samples6.php
Так вот при подключении conclusion_sss.php на каждую из них я имею результат-везде первые 50 строк столбца 'group_production' и плюс к этому одинаковую панель навигации 1|2|3|> >>, где активна только 1страница.
Меня терзают смутные сомнения относительно необходимости наличия:
/State_Standard_Samples2.php
/State_Standard_Samples3.php
/State_Standard_Samples4.php
/State_Standard_Samples5.php
/State_Standard_Samples6.php
Но в таком случае надо что-то изменить в блоке
<?php  
// Проверяем нужны ли стрелки назад  
if ($page != 1$pervpage '<a href= ./page?page=><<</a>  
                               <a href= ./page?page='
. ($page 1) .'><</a> ';  
// Проверяем нужны ли стрелки вперед  
if ($page != $total$nextpage ' <a href= ./page?page='. ($page 1) .'>></a>  
                                   <a href= ./page?page='
>>></a>';  

// Находим две ближайшие станицы с обоих краев, если они есть  
if($page - 2 > 0) $page2left = ' 
<a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';  
if($page - 1 > 0) $page1left = '
<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';  
if($page + 2 <= $total) $page2right = ' 
| <a href= ./page?page='. ($page + 2) .'>'. ($page + 2) .'</a>';  
if($page + 1 <= $total) $page1right = ' 
| <a href= ./page?page='. ($page + 1) .'>'. ($page + 1) .'</a>'; 

// Вывод меню  
echo $pervpage.$page2left.$page1left.'
<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;  

?> 

Но что? Я слабо понимаю в php.

   
 
 автор: lifead   (02.09.2007 в 08:33)   письмо автору
 
   для: mjc66   (02.09.2007 в 00:24)
 

Выбираете столбец по которому будет происходить сортировка и вывод данных, у меня было 2 столбца, 'idnum' и 'id'. вот функция выборки данных из БД:

<?php
function outquery($query1$query2$kolmax$st)
//$query1 и $query2 -запросы в БД
//$kolmax - число комментариев на странице
//$st - номер страницы (для 1й страницы необходимо указать 0)
 
{
    
// отправтяем запрос в БД
    
$index_poemmysql_query($query1);
    
$num mysql_num_rows ($index_poem) ;
  if (
$num>0)
  {
   
//выведение номеров комментариев в массив
  
for ($i=0$i<$num$i++)
   {
    
$row mysql_fetch_array($index_poem);
    
//записываем все номера комметарие соответствующих заданному id
    
$id_number[]=$row['idnum'];
   }
    
//Определение длины массива в переменную $k1
    
$k1=count($id_number);
    
//$i=0; do{ if (isset($id_number[$i])==true){ $k1=$i;}$i++;}while ($i<1000);
    //обратная сортировка массива
    
rsort($id_number);

    
//============= формируем вывод данных================

    ///отправляем запрос в БД для поиска необходимых комметариев
    ////определяем диапазон выводимых комментариев
            //определяем первый комментарий в диапазоне
            
$kol1=(int)$kolmax*$st;
              
//составляем запрос в БД
            
$str=" idnum=".$id_number[$kol1];
            for (
$i=(1+$kol1);($i<($kolmax+$kol1))and($i<($k1)); )
            {
$str=$str." or "."idnum=".$id_number[$i];$i++;}
            
$query2=$query2.$str;
    
//отправляем сформированный запрос в БД
    
$index_poemmysql_query($query2);
    
//определяем колличество строк выданных запросом
    
$num mysql_num_rows ($index_poem) ;
    
//формируем двоичный массив для вывода
    //(это необходимо чтобы отображались комментарии сверху вниз)
        
for ($i=0$i<=$num;)
        {
         
$row mysql_fetch_array($index_poem);

         
$m['name_kom'][$i]=$row['name_kom'];
         
$m['name_kom'][$i]=StripSlashes($m['name_kom'][$i]);
         
$m['komment'][$i]=$row['komment'];
         
$m['komment'][$i]=StripSlashes($m['komment'][$i]);
         
$m['email_kom'][$i]=$row['email_kom'];
         
$m['email_kom'][$i]=StripSlashes($m['email_kom'][$i]);
         
$m['date_kom'][$i]=$row['date_kom'];
         
$i++;
        }
    
//формируем таблицу для комментарием
    
?>
    <table border=0 width=100%>
    <?php
    
//формируем запрос к вышеобразованному массиву
        
for ($i=$num$i>=0;$i--)
        {    
//Выводим данные на экран в виде таблицы
         
?> <tr>
               <td width=15%><?php echo $m['name_kom'][$i]; ?></td>
               <td colspan=2><?php echo $m['komment'][$i];?></td>
            </tr>

            <tr>
               <td> </td>
               <td> <h6> <?php echo $m['email_kom'][$i]; ?> </h6></td>
               <td> <h6><?php echo $m['date_kom'][$i];?> </h6></td>
                 <tr><td colspan=3 width=70%>  <HR SIZE=1 WIDTH=100%> </td></tr>
            </tr>
         <?php
           
}
  
?> </table><?php
   
}
   }
?>

сами запросы к БД у меня выглядят:

<?php
        $query1
="SELECT `id_poem`,`idnum` FROM `имя_таблицы` WHERE id_poem=".$_GET['id'];
        
$query2="SELECT * FROM `имя_таблицы` WHERE";

?>

Будут вопросы по скриптам пишите

   
 
 автор: mjc66   (02.09.2007 в 00:24)   письмо автору
 
   для: lifead   (01.09.2007 в 20:35)
 

Пиши завтра, я надеюсь, что проблема решится!!!

   
 
 автор: lifead   (01.09.2007 в 20:35)   письмо автору
 
   для: mjc66   (01.09.2007 в 20:01)
 

Не знаю, заметили ли Вы или нет, но при "листании" страниц появляется одна небольшая проблемка: как правильнго оформить запрос к БД, чтоб из базы доставались именно те данные, которые соответствуют следующей странице в хронологическом порядке. В связи с этим, одной функции, которую я привел, мало - необходимо написать корректно функцию вывода данных, которая будет синхронизированна с приведенной выше функцией.

> Я правильно понял, что из....
да, только не это не блок, а функция, которую можно вынестри вообще в отдельный файл. Если надо, могу подробно объяснить что и как работает, но только завтра.

   

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования