За последние 24 часа нас посетили 21882 программиста и 1002 робота. Сейчас ищут 653 программиста ...

Обновление данных без перезагрузки

Тема в разделе "Сделайте за меня", создана пользователем flautr, 15 авг 2016.

  1. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    Здравствуйте. Не могу понять как обновлять данные на странице без перезагрузки? Примеры в Интернете видел, но что-то не понимаю. Суть такая, на странице есть такой код:
    PHP:
    1. $dbconn = pg_connect("host=localhost port=5432 dbname=677 user=postgres password=666777");
    2. $result = pg_query($dbconn, "SELECT change, price, name FROM usd_eur ORDER BY exchange_name DESC");
    3.  
    4. if (!$result) {
    5.   echo "Произошла ошибка.\n";
    6.   exit;
    7. }
    8.  
    9. while ($row = pg_fetch_row($result)) {
    10.           echo "$row[2]&nbsp;<b>$row[1]</b>&nbsp;$row[0]%&nbsp;&nbsp;";
    11. }
    данные в базе меняются, по этому я хочу чтобы раз в 10 секунд на странице они обновлялись, помогите плз это сделать
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Такая технология, как Ajax, вам знакома? Если нет, то начните знакомиться. Сложного там ничего нет, т.к. по сути - это те же самые запросы, только выполняются в фоновом режиме.

    P.S. Если используете в проекте jQuery, то там так же предусмотрены ajax-методы. И примеров в инете полно
     
  3. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    я знаю что Ajax, но как не пойму. Я же написал, что испробовал кучу примеров, но все не работает. Ну например, это
    Код (Javascript):
    1. setInterval(function(){
    2. $("#block").load("index.php #block");
    3. }, 30000);
    Дело в том что нет у меня никакого index.php, данные из базы, а значит скрипт должен быть другой.
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @flautr скрипт должен отдавать только нужный текст. в примере index.php #block будет попытка загрузить index.php и там найти тег с id block
     
    flautr нравится это.
  5. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    ну или вот
    Код (Javascript):
    1. // Отправляем номер страницы в обработчик
    2. $.ajax({
    3.   type: "POST",
    4.   url: "/load_images.php", // Обработчик
    5.   data: "page="+page, // Переменная с номером страницы
    6.   dataType: "html",
    7.   cache: false,
    8.   beforeSend: function(){
    9.     $('#content-load').html('Загружаю...'); // Изменяем надпись кнопки на "Загружаю..."
    10.   },
    что за обработчик? Что в нем должно быть, раз это отдельный файл... Короче не понимаю(
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    обработчик это запрос на webserver
     
    flautr нравится это.
  7. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    пробовал и файл создавать. Где-то пишут что туда тоже содержимое ставить, так через 10 секунд я вместо обновления таблицы оказываюсь в этом самом index.php ну и зачем?
    --- Добавлено ---
    все что я хочу, чтобы раз в 10 секунд увидеть новые данные из базы оставаясь там же где был. А вместо этого, меня перебрасывают в обработчик, например сюда. index.php Все примеры что видел такие.
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    у тебя как называется скрипт и как его нужно вызвать чтобы получить те данные из базы и только их один раз?
     
    flautr нравится это.
  9. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    никакого скрипта у меня нет. На странице thml стоит такой код
    PHP:
    1. $dbconn = pg_connect("host=localhost port=5432 dbname=677 user=postgres password=666777");
    2. $result = pg_query($dbconn, "SELECT change, price, name FROM usd_eur ORDER BY exchange_name DESC");
    3. if (!$result) {
    4.   echo "Произошла ошибка.\n";
    5.   exit;
    6. }
    7. while ($row = pg_fetch_row($result)) {
    8.           echo "$row[2]&nbsp;<b>$row[1]</b>&nbsp;$row[0]%&nbsp;&nbsp;";
    9. }
    соединяемся с базой, показываем колонку change, price... Все. Ничего больше нет. Все работает, да только чтобы увидеть новые данные в этих колонках нужно постоянно F5 нажимать, утомительно это(
     
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Надеюсь этот пример поможет:

    PHP:
    1. <?php
    2. if (isset($_POST['test'])) {
    3.     exit(date("H:i:s"));
    4. }
    5. ?>
    6. <!DOCTYPE html>
    7. <html>
    8. <head>
    9.     <title></title>
    10.     <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.js"></script>
    11. </head>
    12. <body>
    13. <div id="result"></div>
    14. <script type="text/javascript">
    15. $(function() {
    16.     (function worker() {
    17.       $.ajax({
    18.         url: 'ajax.php',
    19.         method: 'POST',
    20.         data: {'test':'yes'},
    21.         success: function(data) {
    22.           $('#result').html(data);
    23.         },
    24.         complete: function() {
    25.           setTimeout(worker, 1000);
    26.         }
    27.       });
    28.     })();
    29. });
    30. </script>
    31. </body>
    32. </html>
    --- Добавлено ---
    создай файл ajax.php и запусти его
    --- Добавлено ---
    1000 это одна секунда
     
    flautr нравится это.
  11. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    скажите, а что в файле ajax.php должно быть?
    --- Добавлено ---
    вроде понял
     
  12. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Можно только phpиз кода что я дал или вообще весь код в ajax.php вставить.
     
    flautr нравится это.
  13. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    Спасибо, получилось)
     
  14. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @flautr не стесняйтесь, лайкайте все мои сообщения :rolleyes:
     
    flautr нравится это.
  15. exstyles

    exstyles Новичок

    С нами с:
    20 мар 2020
    Сообщения:
    13
    Симпатии:
    1
    Вещь отличная, только есть одно но, как сделать, чтобы содержимое страницы не дублировалось? Получается все, что есть на странице дублируется еще раз чуть ниже. И уже там все работает.
     
  16. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Обратите внимание на третью строку кода у @denis01 и то, что код ответа расположен в самом начале страницы.
     
  17. exstyles

    exstyles Новичок

    С нами с:
    20 мар 2020
    Сообщения:
    13
    Симпатии:
    1
    да я уже понял, только вот еще можете подсказать один момент.

    time.php

    PHP:
    1. <?php
    2. require "db.php";
    3. $now = time();
    4. $id = $_SESSION['logged_user']->id;
    5. $books = R::load('users', $id);
    6. $v_time = $books->v_time;
    7. $left_time=$v_time-$now;
    8. $left_min=floor($left_time/60);
    9. $left_sec=$left_time-$left_min*60;
    10. echo"Next : <b>$left_min</b> min. <b>$left_sec</b> sec.";
    11. ?>
    является ли это безопасным решением? в таком варианте все работает как надо=)
     
  18. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    О какой опасности идёт речь (CSRF, XSS, SQL-injection и т.д.)? Многое зависит от того, что у вас находится в файле "db.php". Если предположить, что там всё сделано по уму и учитывая, что запрос скорее всего на получение данных, а не на запись или обновление, то особо криминального как бы и нет. Но это субъективная оценка, не дающая никаких гарантий.
     
    exstyles нравится это.