За последние 24 часа нас посетили 33534 программиста и 1819 роботов. Сейчас ищут 1554 программиста ...

Автоматический запрос в бд.

Тема в разделе "PHP для новичков", создана пользователем Dron-Boy, 6 авг 2016.

  1. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Добрый вечер коллеги. Ну вобщем нужно написать скрипт на ajax который каждые 10 секунд будет делать запрос в бд потом сравнивать его с количеством строчек в бд с предидущим запросом и в зависимости от ответа выводить новую инфу или нет. Это нужно для чата. Если я иду в правильном направлениее то подкинте примеры кода. Если нет поправьте меня.
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  3. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ок посмотрю
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    не сказал бы.
    --- Добавлено ---
    @Dron-Boy ajax не общается с базой данных напрямую, тебе нужно почитать как работает ajax.
    Смысл аякса в том чтобы передать данные, на какой то обработчик на php, и вернуть результат выполнения скрипта динамично без перезагрузки страницы.

    Грубо говоря смотри картинку, вот весь твой алгоритм действий.
    --- Добавлено ---
    ajaxOrphpOrMysql.png
     
    #5 askanim, 8 авг 2016
    Последнее редактирование: 8 авг 2016
  6. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Как он работает я знаю. Как мне реализовать так что бы Аякс функция обращались к файлу обработчик и вытягивала от туда данные автоматически? Там например через каждые 10 секунд.
     
  7. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Для этого нужно использовать интервал setInterval.
    Код (Javascript):
    1. function post() {
    2.     $.post('url', {
    3.         key: 'value'
    4.     },function(data) {
    5.         console.log(data);
    6.     });
    7. }
    8. setInterval(post, 10000);
    Но для более правильного решения, нужно юзать протокол ws - для работы с постоянным соединением.
     
    askanim нравится это.
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Dron-Boy гугл в помощь
    --- Добавлено ---
    @Dron-Boy или вот на сразу на хабре про время на js с помощью jquery https://habrahabr.ru/post/42809/
    --- Добавлено ---
    @Dron-Boy в поддержку @rodent90 https://learn.javascript.ru/settimeout-setinterval
    --- Добавлено ---
    Это смотря какие объёмы информации обновляются, и из каких объёмов если у него чат без полного сохранения истории.
    Ну я бы сделал чат, что 100 сообщений например видно в истории, а после она складывается в другую таблицу бд, для отдельного конкретного пользователя чата, только с его ником, ну расфасовку по пользователям тупо в тексте.
    то есть таблица имела бы вид

    id message
    1 nick:ewfwegfwg;nick:ewfwegwgg;nick:wgwegwgwg;nick:efefgwegwegweg;
    2 nick:ewfwegfwg;nick:ewfwegwgg;nick:wgwegwgwg;nick:efefgwegwegweg;
    3 nick:ewfwegfwg;nick:ewfwegwgg;nick:wgwegwgwg;nick:efefgwegwegweg;
    4 nick:ewfwegfwg;nick:ewfwegwgg;nick:wgwegwgwg;nick:efefgwegwegweg;

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

    И было бы норм, и никаких сокетов, а аякс 100 сообщений как миленький грузить будет.
     
    #8 askanim, 8 авг 2016
    Последнее редактирование: 8 авг 2016
  9. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    @askanim Обьясни немного. Вот я делаю ajax запрос на файл обработчик он дастает записи из бд. И потом что он может мне вернуть целый большой блок с выводом всех сообщений или только можно вернуть переменные с их значениями?
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ты программист, и сам решаешь, что вернуть. Можно большой блок с выводом сообщений, можно JSON-чик с сообщениями, можно выводить только новые сообщения. Зависит от того, что ты потом на стороне клиента со всем этим делать будешь.
     
  11. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    мне нужно выводить новые сообщения только. Тогда я делаю так делаю запрос в бд выбераю оттуда данные с условиями потом подставляю их в html код и с помощью echo вывожу. А в файле где ajax запрос я $("#information").text(html); и оно будет выводить?
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Если оно содержит html-код, то не .text, а .html, но да, будет.
     
  13. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
  14. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    здесь вопрос скорее в другом - чат будет крутиться на vps или на хостинге.
    если на хостинге - взять довольно популярный AjaxChat - на хостинге регру с средним тарифным планом - при сидящих в чате 15 человеках - хостинг начинает засыпать письмами с уведомлением о превышении лимита нагрузки на Cpu - хотя в базе хранится, примерно, 50 последних сообщений.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну на шареде вы и веб-сокеты не запустите, скорее всего... Только long pulling остаётся
     
  16. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    интересно, кстати, а если шаред с ssh доступом? получается, вроде, можно выполнить запуск сокета...

    хотя да, long pulling достаточно будет
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Проблема же в том, чтоб запускалось и перезапускалось автоматом, и всегда висело
     
  18. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    да в принципе - vps сейчас стоит столько же сколько и шаред с ssh, так что это я так - в порядке бреда.
     
  19. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Dron-Boy Чувак берёшь в бд вешаешь поле и с дата cyrent timestamp и по нему order by asc и выводишь 100 постоянно. можешь хоть html код обратно возвращать не страшно.
     
  20. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    @Dron-Boy, если не хочешь или нет возможности поднять сокеты - то как вариант, без сильной нагрузки, можно убивать интервал - если пользователь завис на странице, а когда начнет к примеру двигать мышкой - запускать интервал через 3 сек., в течении 10 сек. если дергает мышкой.
    setTImeout делать на событии мышки для срабатывания 1 раз, а setInterval на обновление содержимого в чате.
    Как-то давно делал наверно в 2010, когда еще не было js-ws протокола, приходилось морочиться с такой вот ерундой, ради смеха, так-как лучше было ставить nod'у и не париться, но эта хрень умудрялась работать, жаль найти не могу, кинул бы прям целиком :D все равно хлам.
    Сейчас востребованы веб-сокеты, по этому перебрался на них - задачи решаемы и радует, что наконец стандартизировано.