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 :: Подгрузка данных БД AJAX'ом

 PHP.SU

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


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

> Без описания
maragon
Отправлено: 03 Августа, 2012 - 16:50:52
Post Id



Посетитель


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


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




Суть такова: Есть некое количество сообщений в БД, штук 50. Хочется все это дело красиво разбить!

На данный момент получилось сделать сие чудо:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. <script type="text/javascript">
  3. $(document).ready(function(){
  4. var shown = 0;
  5.  $('#showme').click(function(){
  6.         //post отправка на сервер
  7.     $.post('show_more.php',
  8.               { //Что передаем
  9.                           'shown':shown
  10.                           },
  11.                function(data) { $('#bigblock').append(data); }
  12.     );
  13.     shown = shown + 5;
  14.  })
  15. });
  16. </script>


CODE (html):
скопировать код в буфер обмена
  1. <div id="showme">Показать еще 5 записей</div>
  2. <div id="bigblock"></div>

2 див, 1 - кликабельный, 2 - вывод контента.

Далее сам php обработчик:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if ($_POST['shown']!="") {
  4.  $shown = $_POST['shown'];
  5. //Устанавливаем кодировку для соединения базы данных
  6.  $query = "SELECT * FROM `mail` LIMIT $shown, 5";
  7.  $raw = mysql_query($query);
  8.  if ($raw) {
  9.    $out = "";
  10.    while ($row = mysql_fetch_assoc($raw)) {
  11.    $msg = $row['msg'];
  12.    $msg = iconv( 'windows-1251', 'utf-8', $msg) ;
  13.    $outrow = "<div class='row_one'><span class='date'>".$msg."</span></div>";
  14.     $out .= $outrow;
  15.    }
  16.    echo $out;
  17.  }
  18. }
  19. ?>
  20.  


Есть ожно НО, кнопка (Показать еще 5 записей) висит всегда! Это плохо!
Хотелось бы.. при заходе на страницу пользователя, (может $get методом) автоматом узнавать количество записей в бд (по mail, COUNT(id)), а после этого Давать добро на показ 1го ДИВА (Показать еще 5).
Примечание: на каждой странице пользователя есть свой id, ($_GET['id']), отсюда толкаться?
Т.е, если сообщений меньше 5, див не показываем, > 5 даем добро.. и так далее.
Хм


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
EuGen Администратор
Отправлено: 03 Августа, 2012 - 17:08:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




maragon пишет:
Хотелось бы.. при заходе на страницу пользователя, (может $get методом) автоматом узнавать количество записей в бд

Сделать COUNT в sql, результат которого "присвоить" оператором echo в js-переменную?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
maragon
Отправлено: 03 Августа, 2012 - 17:12:08
Post Id



Посетитель


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


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




EuGen пишет:
maragon пишет:
Хотелось бы.. при заходе на страницу пользователя, (может $get методом) автоматом узнавать количество записей в бд

Сделать COUNT в sql, результат которого "присвоить" оператором echo в js-переменную?

Насчет логики так и думал.. в js не силен, каким методом отправлять клиену? json? куда копать? Хм


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
KingStar
Отправлено: 03 Августа, 2012 - 17:17:14
Post Id



Участник


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


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




Oops!

(Отредактировано автором: 03 Августа, 2012 - 17:50:50)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
LIME
Отправлено: 03 Августа, 2012 - 17:26:50
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




KingStar это что было?
зачем лишний запрос?
а если даже оставить 1ый запрос почему не COUNT(*) ?
 
 Top
EuGen Администратор
Отправлено: 03 Августа, 2012 - 17:28:24
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




maragon пишет:
Насчет логики так и думал.. в js не силен, каким методом отправлять клиену?

Ну так добавьте параметр offset (смещение) в Ваш ajax-запрос. И проверяйте при очередном запросе, не достигли ли Вы уже конца записей (для этого COUNT из sql Вам нужно записать в переменную, как я писал выше). Если достигли - то убаляйте из DOM элемент, содержащий Вашу ссылку на загрузку записей. Ну и offset увеличивайте в js при запросе.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
KingStar
Отправлено: 03 Августа, 2012 - 17:38:42
Post Id



Участник


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


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




хотя глупость написал... к вечеру голова не варит

как у тебя вообще выборка первых записей проходит??? или при заходе пустая страница, и только после клика появляются записи???

(Отредактировано автором: 03 Августа, 2012 - 17:51:26)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
maragon
Отправлено: 03 Августа, 2012 - 17:54:17
Post Id



Посетитель


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


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




KingStar пишет:
хотя глупость написал... к вечеру голова не варит

как у тебя вообще выборка первых записей проходит??? или при заходе пустая страница, и только после клика появляются записи???

Было так, что заходишь - пусто.. жмешь - вылезает.
Переделал чуток - выдераю по $_GET['id'] на странице юзера. (У каждого свой ид, вот и дергаю)
Не могу разобраться с отправкой COUNT в js, курю книжки..

(Отредактировано автором: 03 Августа, 2012 - 18:04:54)



-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
KingStar
Отправлено: 03 Августа, 2012 - 17:56:45
Post Id



Участник


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


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




как-то так

CODE (javascript):
скопировать код в буфер обмена
  1. var count = <?php echo $count; ?>


-----
То что программа работает, не означает что она написана правильно!
 
 Top
maragon
Отправлено: 03 Августа, 2012 - 18:05:08
Post Id



Посетитель


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


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




echo json_encode() посылка в js?
А принять как? прочитать?


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
LIME
Отправлено: 03 Августа, 2012 - 18:07:18
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




 
 Top
maragon
Отправлено: 03 Августа, 2012 - 23:01:27
Post Id



Посетитель


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


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




CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. $("#showme").hide(); //Прячем кнопку (показать еще 5)
  4. $.get( "/teego/show_more.php",{ id: <? echo intval($_GET['id']); ?>,},onAjaxSuccess
  5. );
  6. function onAjaxSuccess(data)
  7. {
  8. var count_all = data[1]; // COUNT(id) из БД = 7
  9.   if(count_all > 0) {
  10.   $('#bigblock').append(data);  //Выводим на экран данные из бд
  11.   }
  12.   if(count_all >= 5) {
  13.   $("#showme").show();  //Показываем кнопку (показать еще 5)
  14.   var showmore = count_all + 5;
  15.   alert(showmore);// Почему-то 75 пишет..
  16.   //... по логике дальше пока не понимаю
  17. }
  18. }
  19. });
  20. </script>
  21. <div id="showme">Показать еще 5 записей</div>
  22. <div id="bigblock"></div>

Ткните.. может не туда копал? Огорчение
(Добавление)
А Вариант ли сделать так:
Сначало узнаем количество сообщений скажем в файле allcount.php
После передаем ajaxу количество
Если > 0
Дергаем второй файл msgs.php с контентом
- но вопрос стает боком, про вывод по 5 смс.. Хм
(Или все манипуляции возможно делать в 1м файле?)

(Отредактировано автором: 03 Августа, 2012 - 23:27:18)



-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
KingStar
Отправлено: 03 Августа, 2012 - 23:39:27
Post Id



Участник


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


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




что выдает???

(Отредактировано автором: 03 Августа, 2012 - 23:39:42)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
maragon
Отправлено: 04 Августа, 2012 - 00:00:19
Post Id



Посетитель


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


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




KingStar пишет: что выдает???
Выдает кол-во всех сообщ. (На экран через alert() светит цифру 7) т.е. в бд 7 строк.


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
KingStar
Отправлено: 04 Августа, 2012 - 00:04:28
Post Id



Участник


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


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




CODE (javascript):
скопировать код в буфер обмена
  1. var showmore = count_all + 5;


здесь у тебя не сумма, а конкатенация, т.е. я так понимаю count_all - строка
(Добавление)
CODE (javascript):
скопировать код в буфер обмена
  1. count_all = parseInt(data[1]);

(Добавление)
либо

CODE (javascript):
скопировать код в буфер обмена
  1. count_all = 1*data[1];

(Добавление)
и еще я бы сделал так

CODE (javascript):
скопировать код в буфер обмена
  1. if(count_all < 5)
  2. {
  3. ............................
  4. }
  5. else
  6. {
  7. ...........................

(Отредактировано автором: 04 Августа, 2012 - 00:12:49)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB