Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как повторить функцию?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
CryFiX
Отправлено: 21 Января, 2012 - 22:25:25
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Извините за название темы, забыл поменять!


Всем привет, образовалась проблема. Есть функция news, которая выводит новость из БД.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include('config/config.php');
  3. //Сделаем навигацию для сайта
  4. function nav_page($sql='',$ipp=10){
  5.  $out = '';
  6.  if ($sql!=''){//проверка на не пустой запрос
  7.   $query  = mysql_query($sql);
  8.   $kol = mysql_num_rows($query);//кол-во выбранных записей
  9.   if (($query)AND($kol)){
  10.         $out = '<table width="100%" align="CENTER"><tr><td align="CENTER">[<a href=?p=1>1</a>] ';
  11.         //формируем ссылки на страницы
  12.         for ($i=1; $i<($kol/$ipp); $i++){
  13.                 $pp = $i+1;
  14.                 $out .= '[<a href=?p='.$pp.'>'.$pp.'</a>] ';
  15.         }
  16.         $out .= '</td></tr></table>';
  17.   }
  18.  }
  19.  return $out;
  20. }
  21.  
  22.  
  23. //________ВЫВОД НОВОСТЕЙ НА САЙТ
  24. function news(){
  25.         $out = '';
  26.        
  27.         if (isset($_GET['id'])){
  28.                 $sql = 'SELECT * FROM news WHERE id = '.$_GET['id'].'';
  29.                 $qur = mysql_query($sql); $kol = mysql_num_rows($qur);
  30.                 if ($qur && $kol){
  31.                         $out .= '<table cellpadding="0" cellspacing="0" border="0" width="80%" align="center">';
  32.                         $rez = mysql_fetch_assoc($qur);
  33.                         $out .= '<tr><td><b>'.date('H:i d.m.Y',$rez['data_c']).'</b> '.stripslashes($rez['title']).'</td></tr>';
  34.                         //Так как textarea переводы строк хранит как \n необходимо заменить их на                       $out .= '<tr><td>'.stripslashes(nl2br($rez['text_f'])).'</td></tr>';
  35.                         $out .= '<tr><td align="right"><a href="?news">все новости</a></td></tr>';
  36.                         $out .= '</table>';            
  37.                 }
  38.         }else{
  39.                 $k_p = 10; if (isset($_GET['p'])) $s_p = (int)$_GET['p']-1; else $s_p = 0;
  40.                 $nav = nav_page('SELECT * FROM news',$k_p);
  41.                 $sql = 'SELECT * FROM news ORDER BY data_c DESC LIMIT '.($s_p*$k_p).', '.$k_p.'';
  42.                 $qur = mysql_query($sql); $kol = mysql_num_rows($qur);
  43.                 if ($qur && $kol){
  44.                         $out .= '<table cellpadding="0" cellspacing="0" border="0" width="80%" align="center">';
  45.                         while($rez = mysql_fetch_assoc($qur)){
  46.                                 $out .= '<tr><td><b>'.date('H:i d.m.Y',$rez['data_c']).'</b> <a href="?news&id='.$rez['id'].'">'.stripslashes($rez['title']).'</a></td></tr>';
  47.                         }
  48.                         $out .= '<tr><td align="center">'.$nav.'</td></tr>';
  49.                         $out .= '</table>';
  50.                 }
  51.         }
  52.         return $out;
  53. }
  54.  
  55. //сформируем таблицу для примерного дизайна
  56. //все готово проверим что мы получили
  57. echo '<table width="100%" border="0">';
  58. echo '<tr><td valign="top" width="20%">';
  59. echo news();
  60. echo '</td><td valign="top" width="80%">';
  61. echo '</td></tr>';
  62. echo '</table>';
  63. ?>

Мне нужна на странице таблица 3х3, с навигацией не с номером страницы, а с "След страница" "Пред.страница", не могу разобраться. А здесь каждый элемент БД с новой строки, и навигация [1] [2] [3] и т.д. Кто поможет разобраться, в какую сторону копать? Всю голову уже сломал. Недовольство, огорчение

(Отредактировано автором: 21 Января, 2012 - 22:29:57)

 
 Top
broshurkaplus
Отправлено: 26 Января, 2012 - 19:47:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




если я правильно понял
например так есть 100 статей в бд 100строк
на странице выводим например по 5 постов

PHP:
скопировать код в буфер обмена
  1. $item_per_page=5;
  2. if(!$_GET['p']){$p_num=1;
  3.                 $start_number=1;
  4.     }
  5.     else{$p_num=$_GET['p'];
  6.          $start_number=$_GET['p'];
  7.     }
  8. if($start_number>0){$start_number=$p_num*$item_per_page-$item_per_page;}



дальше проводим выборку

PHP:
скопировать код в буфер обмена
  1. $r_p=mysql_query("SELECT * FROM page ORDER BY id_page LIMIT $start_number, $item_per_page");


и в цикле выводим посты на страницу
считаем посты выводим ссылки страниц

PHP:
скопировать код в буфер обмена
  1. $r_sum_page=mysql_num_rows(mysql_query("SELECT * FROM page"));
  2. $vsego_page=$r_sum_page/$item_per_page;
  3. if($vsego_page-intval($vsego_page)>0){$vsego_page=intval($vsego_page)+1;}
  4. $page=1;
  5. while ($page<=$vsego_page){  
  6. echo "<a href='?p=".$page."'>".$page."</a>";
  7. $page++;
  8. }


intval- если остаток положительный то +1 тк не может быть страница с №25,47.
примерно так ,ссылки выводим в кнопки или спаны, все равно, и дизайним им css и активной - текущей добавляем класс (или в скрипте эхом выводим с классом)
получаем 20 кнопок при 100 страницах

если нажимаем на 5 кнопку, то выведет с 25 по 30 строки и все 20 ссылок со страницами,
если нужно что то типа ... 12 13 14 15 16 ... то поставь ограничения в скрипте: выводить 2 до нажатой и 2 после, и тд.
если надо пред текущая след - то по 1
если тока пред и след то по 1 кроме нажатой...

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

да ссылки выводить именно в цикле, а то может быть такое что ссылка осталась р=12, связанная с ид 12, а пост уже давно удален с сайта

(Отредактировано автором: 26 Января, 2012 - 19:50:56)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB