imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 30.08.2005, 16:02     # 1
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
Thumbs down Разбиение каталога ссылок постранично.

Ребята, надо мне помочь Незная PHP тяжело на нем программировать. Я уже это понял. А изучать с самого начала много времени нужно. Ну в общем есть у меня скрипт каталога ссылок и выдается этот каталог весь на одной странице. Это очень весело, но если в каталог наберется пару сотен ссылок, то такая страница будет час открываться. Вобщем мне нужно этот каталог разбить постранично. Может объясните на пальцах и в примерах ? Или я вам скрипт этот вышлю для корректировки. Заранее благодарен.
mihas вне форума  
Старый 30.08.2005, 20:29     # 2
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
А эти ссылки где хранятся? В БД (MySQL), или в отдельном файле, или еще как?
Trotil вне форума  
Старый 30.08.2005, 20:58     # 3
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
Ссылки хранятся в базе MySQL.
mihas вне форума  
Старый 30.08.2005, 21:56     # 4
aoxyz_30330
Junior Member
 
Аватар для aoxyz_30330
 
Регистрация: 22.05.2004
Сообщения: 112

aoxyz_30330 Мелкий засранец
тада все просто ... определяеш количество саписей в таблице, делаеш сапрос и укасиваеш w нем интервал с откуда по куда ...
вот пример:
SELECT * FROM table LIMIT 10 , 20

патом пишеш на странице линки на все страници ...
пример линка:
<a href=index.php?page=10>10</a>

и собсна все ...
aoxyz_30330 вне форума  
Старый 30.08.2005, 22:49     # 5
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
Гораздо проще будет так сделать.

Допустим 5 страниц, в каждой по 20 линков.

Внизу странички где-нить цикл, выводящий список страниц.

PHP код:
$i=1;
while (
$i<=5)
{
echo 
"<a href=link.php?id=".$i.">Страница ".$i."</a>";
if (
$i!=5)
{
echo 
" | ";
}
$i++;

В начале страницы проверка на валидность id:

PHP код:
if(!isset($id))
{
   
$id=1;
}
else
{
   if(!
is_int($id))
   {
      
$id=1;
   }
   else
   {
      if (
$id<or $id>5)
      {
         
$id=1;
      }
   }

Ну и сам вывод организуй.

В качестве скрипта используй то, что есть там, только сам запрос слегка модифицируй:

PHP код:
$start=($i-1)*20+1;

$sql="SELECT * FROM table LIMIT 20, ".$start
Т.е. в конец запроса добавь LIMIT.... (либо если есть какой-то, то замени)

Вот, вроде так. Если что, не серчайте

Последний раз редактировалось SergoZD; 30.08.2005 в 22:53.
SergoZD вне форума  
Старый 30.08.2005, 23:02     # 6
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
Ребята, спасибо огромное, я попробовал разобраться, но не выходит ничего. Может быть я код кину а вы посмотрите. Вот он
PHP код:
<?php
include "config.inc";

if (!@
mysql_connect($db_host,$db_user,$db_pass)) {
  print 
"Ошибка соединения с mysql: ".mysql_error()."<br>";
 }
 else {
  if (!@
mysql_select_db($db_name)) {
   print 
"Ошибка удаленного сервера, такой базы не существует: ".mysql_error()."<br>";
  }
  else {
   
$db_query = @mysql_query("SELECT * FROM $tb_linex");
   
$db_result = array(); $ibx 0;
   if (!
$db_query) {
    print 
"Ошибка чтения из таблицы: ".mysql_error()."<br>";
   }
   else {
    while (
$row = @mysql_fetch_row($db_query)) $db_result[$ibx++] = $row;
   }
  }
 }

///Выводим линки в базу данных...
 
for ($xi=0;$xi<count($db_result);$xi++)
{

$linex_array $db_result[$xi];

print
" <a href=\"$linex_array[1]\">$linex_array[3]</a> : ID - $linex_array[0] <br>";
}
@
mysql_close();

?>
Тут linex_array[1] это адрес сайта, $linex_array[3] это описание сайта и $linex_array[0] номер сайта.
mihas вне форума  
Старый 30.08.2005, 23:10     # 7
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
mihas
Ну а в чем трабла, мой пост присобачь к своему и все ок будет.
В первом коде link.php - адрес страницы каталога. Его замени.
Добавь его после
@mysql_close();

Во втором коде ничего менять не надо, пихни его после
include "config.inc";

ну а третий код, вот для твоего случая:

$db_query = @mysql_query("SELECT * FROM $tb_linex");
замени на
$db_query = @mysql_query("SELECT * FROM $tb_linex LIMIT 20, ".$start);
SergoZD вне форума  
Старый 30.08.2005, 23:25     # 8
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
SergoZD
Спасибо за помощь. Трабла в моем практически полном незнании PHP
Сделал все как ты сказал, появились внизу страницы, но ссылки пропали. Дает ошибку
Цитата:
Ошибка чтения из таблицы: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Ошибка исчезает при возврате строки
Цитата:
$db_query = @mysql_query("SELECT * FROM $tb_linex");
mihas вне форума  
Старый 30.08.2005, 23:30     # 9
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
Исправь так попробуй:

$start=($i-1)*20;

и

$sql_query="SELECT * FROM ".$tb_linex." LIMIT ".$start.", 20";
$db_query = @mysql_query($sql_query);
SergoZD вне форума  
Старый 30.08.2005, 23:37     # 10
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
Вот гад, не хочет. Та же ошибка, но на конце
Цитата:
near '-20, 20' at line 1
mihas вне форума  
Старый 30.08.2005, 23:40     # 11
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
а у тебя там в таблице есть хотя бы 20 линков?
Можешь дать ссылку на страницу эту, если она в нете?

Я с mysql пока ещё оч. мало успел поработать, поэтому не совсем разобрался в тонкостях синтаксиса, пока не соображу в чем трабла.
SergoZD вне форума  
Старый 30.08.2005, 23:44     # 12
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Хм... Замени
$start=($i-1)*20; на
$start=($id-1)*20;

Цитата:
Сообщение от SergoZD
пока не соображу в чем трабла.
ну ты наверно понял, в чем трабла...
Trotil вне форума  
Старый 30.08.2005, 23:54     # 13
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
О. Вот это уже по моему оно. Спасибо ребята. Очень благодарен, правда. Только последний вопрос, заключительный. Вот эта ссылка
Цитата:
echo "<a href=link.php?id=".$i.">Страница ".$i."</a>";
Дело в том, что моя страница с ссылками уже имеет вид типа
Цитата:
http://страница..ру/base.php?ssilka=link
Как сформировать адреса страниц в этом случае?
mihas вне форума  
Старый 30.08.2005, 23:56     # 14
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
echo "<a href=http://страница..ру/base.php?ssilka=link&id=".$i.">Страница ".$i."</a>";

Важно проследить, чтобы этот переменная id не использовалась в других скриптах на странице, если где-то ещё встречается, то замени на другую.
SergoZD вне форума  
Старый 31.08.2005, 00:11     # 15
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
Ага, почти нормально. Переменная id нигде не используется, уже просмотрел. Только я что то не пойму. В данном случае количество ссылок на страницу 20? Ведь так понял? Если да, то у меня что то не выходит. Я меняю 20, например на 2, на первой странице 2 ссылки и на втрой эти же 2 и т.д.

Т.е. на всех страницах одно и то же.
mihas вне форума  
Старый 31.08.2005, 00:18     # 16
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Если смотреть на код, то такого в принципе не должно быть. Mihas, нужны уточнения:
1) Ссылки на сгенеренной странице имеют вид:
Цитата:
Страница 1
Страница 2
Страница 3
...
???
Trotil вне форума  
Старый 31.08.2005, 00:21     # 17
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
Так точно. Только в одну строчку а не друг под другом, что не принципиально. И ссылки формируются правильно, т.е. в конце ссылки Страницы 1 id=1, страницы 2 id=2 и т.д.
Но при нажатии страница с ссылками не меняется, на всех страницах одно и тоже.

Даже если все оставить как есть, т.е. с 20, все страницы одинаковы.
mihas вне форума  
Старый 31.08.2005, 00:23     # 18
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
mihas
Фишка в проверке валидности id

Замени

PHP код:
if(!isset($id)) 

   
$id=1

else 

   if(!
is_int($id)) 
   { 
      
$id=1
   } 
   else 
   { 
      if (
$id<or $id>5
      { 
         
$id=1
      } 
   } 

на
PHP код:
if(!isset($id)) 

   
$id=1

else 


   
$id=intval($id);

      if (
$id<or $id>5
      { 
         
$id=1;
      } 

SergoZD вне форума  
Старый 31.08.2005, 00:26     # 19
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
А! Доперло! Вот здесь исправляй:
Вместо:
PHP код:
if(!isset($id)) 

   
$id=1

else 

   if(!
is_int($id)) 
   { 
      
$id=1
   } 
   else 
   { 
      if (
$id<or $id>5
      { 
         
$id=1
      } 
   } 

на
PHP код:
if(!isset($_GET['id'])) 

   
$id=1

else 

   if(!
is_int($_GET['id'])) 
   { 
      
$id=1
   } 
   else 
   { 
      if (
$_GET['id']<or $_GET['id']>5
      { 
         
$id=1
      }  else  
$id$_GET['id'];

   } 

Trotil вне форума  
Старый 31.08.2005, 00:29     # 20
mihas
Junior Member
 
Регистрация: 22.10.2004
Сообщения: 50

mihas Нуль без палочки
к сожалению ничего не изменилось.

Вот черт, ни так, ни так не работает.
mihas вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 07:55.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.