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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Постраничный вывод
 
 автор: SS   (21.04.2005 в 23:19)   письмо автору
3.5 Кб
 
 

Понимаю, что тема простая, обсуждалась не раз, но ничего не получается, пробился уже два дня, нервы сдают. Помогите!
Нужно вывести << 1|2|3| >> и т.д., активное - жирным и возможность выбора, сколько строк выводить на страницу.
Прикладываю мой файл, а то может мешают навигации уже имеющиеся запросы.

   
 
 автор: cheops   (21.04.2005 в 23:38)   письмо автору
 
   для: SS   (21.04.2005 в 23:19)
 

Тема действительно обсуждалась много раз, достаточно взглянуть на внушительный список ссылок в теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3044. Но когда над скриптом сидишь долго, никакие ссылки уже не помогают... не могли бы вы приложить кусочек таблицы, для того чтобы было проще отлаживать скрипт - кодирование в слепую может привести к ошибкам.

   
 
 автор: SS   (22.04.2005 в 01:09)   письмо автору
 
   для: cheops   (21.04.2005 в 23:38)
 

Все поля таблицы перечислены в запросе в приложенном файле, или Вы имели ввиду что-то другое под "кусочком таблицы"? Все что угодно!!! :)

  $query = "SELECT id, url, img0, img, nominal, material, grade, weight, diameter, axis, obverse, reverse, ruler, note_ruler, date_start, date_end, link, mint, date1_stamp, date2_stamp, RIC, BMC, Cohen, RSC, RCTV, reference, link, notes
                FROM coins

   
 
 автор: cheops   (22.04.2005 в 12:49)   письмо автору
 
   для: SS   (22.04.2005 в 01:09)
 

Просто на восстановление базы данных у любого кто будет отлаживать постраничную навигацию уйдёт много времени у вас же она уже готова и если бы вы приложили файл с дампом таблицы coins (структура таблицы CREATE TABLE и несколько записей INSERT) было бы просто замечательно. Получить дамп можно при помощи Web-интерфейса phpMyAdmin (меню Экспорт), а так же при помощи консольной утилиты mysqldump
mysqldump base>base.txt

base - имя базы данных, base.txt - файл в который он будет сохранён.

   
 
 автор: SS   (22.04.2005 в 19:14)   письмо автору
 
   для: cheops   (22.04.2005 в 12:49)
 

Я понял, прикладываю.

   
 
 автор: cheops   (23.04.2005 в 00:11)   письмо автору
 
   для: SS   (22.04.2005 в 19:14)
 

Посмотрите скрипт в аттаче.

   
 
 автор: SS   (23.04.2005 в 01:25)   письмо автору
 
   для: cheops   (23.04.2005 в 00:11)
 

Cheops! огромное, пребольшое, человеческое спасибо! :)
Ма-а-ленький глюк: при нажатии на ссылку [31-40] она превращается в активном виде в [1-40].
Вместо

echo "[".(($i - 1)*$count + 1)."-".$i*$pnumber."]";

пишем

echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]";

Еще раз спасибо!

   
 
 автор: cheops   (23.04.2005 в 11:44)   письмо автору
 
   для: SS   (23.04.2005 в 01:25)
 

Ага есть такое дело.

   
 
 автор: SS   (01.05.2005 в 03:15)   письмо автору
 
   для: cheops   (23.04.2005 в 11:44)
 


$query = "SELECT *
FROM coins
WHERE
nominal = '".$nominal."'
LIMIT $begin, $pnumber";
// Выполняем запрос 
$tb = mysql_query($query); 
// Проверяем правильность выполнения запроса 
if(!$tb) exit(mysql_error()); 

  $i = $begin; 
  $idd=coins.id;
  // получаем количество строк 
$amount = @mysql_result(mysql_query("SELECT count(id) as goods_total FROM coins"),0); 
print "Всего найдено: $amount";


1. Выводит все найденные записи в таблице и навигация тоже получается полной. Как $amount сделать равной только числу найденных записей?
2. Чтобы показывало навигацию не все найденные страницы, а только на 10:
Вместо
[1-9][10-19][20-29][30-39][40-49][50-59][60-69][70-79][80-89][90-99][100-109][110-119]
[120-129][130-139][140-149][150-159][160-169][170-179]
было
[1-9][10-19][20-29][30-39][40-49][50-59][60-69][70-79][80-89][90-99] [следующие 10]
или, если на середине:
[предыдущие] [80-89][90-99][100-109][110-119][120-129][130-139][140-149][150-159][160-169][170-179] [следующие]

   
 
 автор: cheops   (01.05.2005 в 12:47)   письмо автору
 
   для: SS   (01.05.2005 в 03:15)
 

1. Для этого следует либо восстановить весь запрос, т.е.
<?php
$query 
"SELECT count(id) as goods_total FROM coins WHERE nominal = '".$nominal."'";
$amount = @mysql_result(mysql_query($query),0);
?>

либо после блока
<?php
$query 
"SELECT * 
FROM coins 
WHERE 
nominal = '"
.$nominal."' 
LIMIT 
$begin$pnumber"
// Выполняем запрос 
$tb mysql_query($query); 
// Проверяем правильность выполнения запроса 
if(!$tb) exit(mysql_error());
?>

дописать
<?php
  $amount 
mysql_num_rows($tb);
?>

тогда второй запрос не понадобится.

   
 
 автор: cheops   (01.05.2005 в 12:49)   письмо автору
 
   для: SS   (01.05.2005 в 03:15)
 

2. А не подойдёт ли вам движок постраничной навигации, реализованный у нас на форуме (внизу после списка тем)?

   
 
 автор: SS   (06.05.2005 в 19:40)   письмо автору
 
   для: cheops   (01.05.2005 в 12:49)
 

Извиняюсь - был в цейтноте. Да, думаю, подойдет.

   
 
 автор: SS   (08.05.2005 в 03:11)   письмо автору
 
   для: cheops   (01.05.2005 в 12:49)
 

Мне подойдет этот движок!

   
 
 автор: cheops   (08.05.2005 в 18:37)   письмо автору
 
   для: SS   (08.05.2005 в 03:11)
 

Хм... как-то пропустил ваше первое сообщение от 6, посмотрите скрипт в аттаче

   
 
 автор: SS   (09.05.2005 в 12:14)   письмо автору
 
   для: cheops   (08.05.2005 в 18:37)
 

Да, спасибо, скрипт работает хорошо на обычной странице.
Но для поиска не работает. Если дописываю

<?php 
  $amount 
mysql_num_rows($tb); 
?> 

то выводит только то количество, которое указано в $pnumber, или вообще ссылки на все страницы, если без этого кода и они при этом не работают.
Что нужно, чтобы для поиска выводил то количество ссылок для навигации, которое нашел? Т.е., если нашел 55 строк, а $pnumber=10, то ссылок навигации, соответственно, 6: [1-10] [11-20] [21-30] [31-40] [41-50] [50-55]

   
 
 автор: SS   (24.05.2005 в 20:04)   письмо автору
 
   для: cheops   (08.05.2005 в 18:37)
 

С поиском управился, спасибо. Хочу теперь вернуться к навигации. Напоминаю про последний вопрос в этой теме, оставшийся без ответа.

   
 
 автор: cheops   (24.05.2005 в 23:36)   письмо автору
 
   для: SS   (24.05.2005 в 20:04)
 

Да, как-то пропустил это сообщение. Пользоваться конструкцией
<?php 
  $amount 
mysql_num_rows($tb); 
?>

совместно с ключевым словом LIMIT уже не получится - нужно делать повторный запрос к базе данных без LIMIT, но условие WHERE в котором в котором полностью совпадает с поисковым запросом,
<?php
  $query 
"SELECT COUNT(*) AS total FROM ... WHERE ...";
  
$tot mysql_query($query);
  if(!
$tot) exit("Ошибка в SQL-запросе");
  
$amount mysql_result($tot,0);
?>

   
 
 автор: SS   (25.05.2005 в 02:17)   письмо автору
 
   для: cheops   (24.05.2005 в 23:36)
 

Да, так показывает правильно. Но при попытке перейти по навигации на следующую страницу выдает ошибку, как если бы отправлены из формы пустые данные:

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 'ORDER BY date_start, RIC, RIC_n, RIC_add LIMIT 10' at line 4

Посмотрите что где не так. Файл прикладываю.

   
 
 автор: cheops   (26.05.2005 в 13:42)   письмо автору
 
   для: SS   (25.05.2005 в 02:17)
 

У нас при переходе по ссылке теряются данные переданные из формы (POST-данные), наверное их нужно будет помещать в сессию.

   
 
 автор: SS   (07.06.2005 в 00:18)   письмо автору
 
   для: cheops   (26.05.2005 в 13:42)
 

Извиняюсь за молчание, был в отпуске, возвращаюсь к теме.

Если честно, не очень понял про сессию.
Возможно ли обойтись без нее? У нас ведь двадцать полей.

   
 
 автор: cheops   (07.06.2005 в 01:09)   письмо автору
 
   для: SS   (07.06.2005 в 00:18)
 

Ну вот как раз поэтому удобнее их в сессию запихать, ведь через строку запроса (в URL) передавать их все от странице к странице не очень удобно, да и адрес примет угрожающий вид.

   
 
 автор: SS   (07.06.2005 в 20:34)   письмо автору
 
   для: cheops   (07.06.2005 в 01:09)
 

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

   
 
 автор: SS   (09.06.2005 в 13:49)   письмо автору
 
   для: cheops   (07.06.2005 в 01:09)
 

Мое сообщение, видимо, осталось незамеченным. Хочу сказать, что сам я с сессией в таком сложном случае не справлюсь.

   
 
 автор: cheops   (09.06.2005 в 22:37)   письмо автору
 
   для: SS   (09.06.2005 в 13:49)
 

Да... как то вас пропустил... если вам не сложно не могли бы вы выложить текущую HTML-форму и её обрботчик, дело в том, что потребуется изменить код в нескольких местах, я бы их мог пометить комментарием
// SESSION

Если не хотите выкладывать здесь можете прислать мне их на почту simdyanov@softtime.ru.

   
 
 автор: SS   (26.06.2005 в 02:01)   письмо автору
 
   для: cheops   (09.06.2005 в 22:37)
 

Спасибо, сама сессия работает. Только теперь другая проблема - не происходит фактической смены страницы. Т.е. переход есть, но данные на всех страницах остаются с первой страницы.

   
 
 автор: cheops   (26.06.2005 в 02:12)   письмо автору
 
   для: SS   (26.06.2005 в 02:01)
 

А да... В запросе
<?php
  $query 
"SELECT * 
FROM coins 
WHERE 
$tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 $tmp7 $tmp8 $tmp9 $tmp10 $tmp11 $tmp12 $tmp13 $tmp14 $tmp15 $tmp16 $tmp17 $tmp18 $tmp19 $tmp20
ORDER BY date_start, RIC, RIC_n, RIC_add
LIMIT 
$pnumber";
?>

следует исправить конструкцию LIMIT
<?php
$query 
"SELECT * 
FROM coins 
WHERE 
$tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 $tmp7 $tmp8 $tmp9 $tmp10 $tmp11 $tmp12 $tmp13 $tmp14 $tmp15 $tmp16 $tmp17 $tmp18 $tmp19 $tmp20
ORDER BY date_start, RIC, RIC_n, RIC_add
LIMIT 
$begin$pnumber";
?>

   
 
 автор: SS   (26.06.2005 в 03:20)   письмо автору
 
   для: cheops   (26.06.2005 в 02:12)
 

ВСЁ, РАБОТАЕТ! СПАСИБО!

   
Rambler's Top100
вверх

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