Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
1

AJAX PHP MySQL

15.03.2016, 20:30. Показов 1684. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть страница lot.php

Страница принимает GET параметр , и под значению этого параметра вытаскивает определенную запись с бд.


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(isset($_GET['lot_id'])){
        
        include_once"connect_bd.php";
        $lot_id = mysqli_real_escape_string($link,$_GET['lot_id']);//Выбранный лот
 
        
        
        
        //----Лог Ставок -------//
        $query_log = mysqli_query($link,"SELECT s.user_id, s.date_lot, s.ticket_number, u.name
                                                                    FROM start_lot s
                                                                    LEFT JOIN users u
                                                                    ON s.user_id = u.user_id WHERE lot_id='$lot_id' ORDER BY s.date_lot DESC
                                                                    ")or die(mysqli_error($link));
 
    //Лог
        foreach ($query_log as $keys => $values) {
            $span_lot .= '<span class="imoon imoon-history"></span> <span id="log-sistem-message">'.$values['date_lot'].' 
                          <a href="profile.php?id='.$values['user_id'].'"> '.$values['name'].'  </a>'.
                          'By a ticket under the number #'.$values['ticket_number'].'</span><br>';              
        }
В Цикле мы формируем уже готовую форму и заносим ее в переменную.
А в Html разметке уже вставляем $span_lot .

Не могу сообразить как повесить все это дело на аякс.
нужно подгружать логи каждые допустим 10 секунд.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function mode()
  {
      $.ajax({
          url: 'lot.php',
          type: "GET",
          dataType: "html",
          data: "lot_id=2",
          success: function(data)
        {
              $('#content').html(data);
          }
      });
  }
 
  var timeInterval = 1000;
  setInterval(mode, timeInterval);
(Это пример) пробовал вешать на сет интервал и отправлял на эту страницу гет запрос и возвращал html

Но появлялся эффект обновления страницы. Она просто обновлялась.

И это не вся проблема.
Дело в том что на странице несколько запросов. Подобного типа.
В основном все зависит от того что приходит в GET в самом верху страницы.
И как теперь повесить каждый запрос на аякс не понимаю.Толи весь php переделывать толи я в тупике, надеюсь на помощь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2016, 20:30
Ответы с готовыми решениями:

Вывод запроса с БД PHP MySQL AJAX
Суть такова, задача по сути проста. Есть форма, при вводе значения и нажатия кнопки, он это...

PHP + AJAX + MySQL и выпадающие списки
base.php &lt;script&gt; function selectPrib(){ var id_prib = $('select').val(); ...

PHP,AJAX,jq,Mysql работают через раз
Привет! Не могу разобраться, в чем ошибка. Вроде все работало, а сейчас перестало, и если...

Создание чата (PHP,Ajax,JSON,MySql)
Привет,народ ! Уже день мучаюсь над этим (кстати,я-чайник в этой сфере). Хочу создать чат...

40
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 21:19 2
попробуйте чуток иначе
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
    function mode()  
    {  
        $.ajax({  
          url: "lot.php?lot_id=2",
            success: function(html){
                $("#content").html(html);
            }  
        });  
    }  
    $(document).ready(function(){  
        mode();  
        setInterval('mode()',1000);  
    });
Добавлено через 2 минуты
И я бы порекомендовал Вам хорошенько подумать о временном интервале.
1 секунда - это маловато. А представьте, что у вас на странице одновременно работают 20 человек? Да еще и из одной локалки (с одного IP)? А?
Это некие признаки DDOS, как бы это не смешно звучало..
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 21:23  [ТС] 3
Laroux, ошибки выдает в консоли
0
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 21:26 4
да ну... а что там за ошибки?
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
15.03.2016, 21:27 5
Цитата Сообщение от maruo Посмотреть сообщение
И как теперь повесить каждый запрос на аякс не понимаю.Толи весь php переделывать толи я в тупике, надеюсь на помощь
Ну я бы точно переделал. Перемешивать работу с бд и html это жуть. С mvc вы похоже совсем не знакомы.

Цитата Сообщение от maruo Посмотреть сообщение
Но появлялся эффект обновления страницы. Она просто обновлялась.
А что должно быть? вы же сами формируете html и подставляете его в #content.

Кроме кривой архитектуры, я не пониманию в чем у вас проблема.
Цитата Сообщение от Laroux Посмотреть сообщение
1 секунда - это маловато. А представьте, что у вас на странице одновременно работают 20 человек? Да еще и из одной локалки (с одного IP)? А?
Это некие признаки DDOS, как бы это не смешно звучало..
Я так понимаю у человека там что то типа аукциона. Его вообще надо на других технологиях делать, скажем на websocket. Если людей мало можно и без этого обойтись, мы через ajax + nginx раз в 1 сек дергаем обычный текстовый файл с json кешом аукциона. В принципе достаточно шустро.
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 21:29  [ТС] 6
Laroux, Тут в чем проблема. в файле несколько таких запросов 3-4(от условия зависит)
И каждый раз они отрабатывают при обновлении.
Я бы кинул целый файл но только если вы сами захотите.

Каждый блок на странице формируется при помощи цикла.

Добавлено через 1 минуту
tarasalk, Да проблема именно в архитектуре, об этом и я думал.
Цитата Сообщение от tarasalk Посмотреть сообщение
Ну я бы точно переделал. Перемешивать работу с бд и html это жуть
об этом можно поподробней не понял
0
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 21:29 7
Цитата Сообщение от tarasalk Посмотреть сообщение
мы через ajax + nginx раз в 1 сек дергаем обычный текстовый файл с json кешом аукциона
а я себе так сделал для своей CRM-ки, и когда стало больше 10 человек - мой хостер начал "подвисать".. блокировал частые запросы. CRM-ка вся начала тупить
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 21:30  [ТС] 8
tarasalk, Проект далек от аукциона. Что то типо него. Но ограничения во времени нет, как на скандинавских аукционах
0
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 21:40 9
Я бы как минимум сделал как: во-первых, возвращал бы данные из скрипта lot.php не в виде html, а в виде JSON. А потом раскладывал бы по "мешочкам".
Давайте я Вас покажу примерчик своего одного скрипта (профессионалов прошу не ругаться, ибо я в AJAX и JS не силен, делал так, как мог)
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    <script>  
        function show_NeedCert()  
        {  
            $.ajax({
                //указываю, что получу от скрипта JSON
                dataType: 'json',
                //передаю скрипту параметры из PHP (да да.. так делаю.. хоть и не очень красиво)
                url: "admin_control.php?from=<?=$from?>&to=<?=$to?><?php if (isset($_GET['partner'])) echo "&partner=".$_GET['partner']; ?>", 
                //отключаю кэширование
                cache: false,
                //а дальше раскладываю ответ по контейнерам
                success: function(jsondata){
                    $(".mfc_count").html(jsondata.mfc_count);
                    $(".clients_count").html(jsondata.clients_count);
                    $(".bills_count").html(jsondata.bills_count);
                    $(".all_summ").html(jsondata.all_summ);
                    $(".bills_payed").html(jsondata.bills_payed);
                    $(".bills_payed_summ").html(jsondata.bills_payed_summ);
                    $(".requests").html(jsondata.requests);
                    $(".certificates").html(jsondata.certificates);
                    $("#datamfc").html('');
                    //тут опять смесь РHP и JS. Ну простите
                    <?php if (isset($_GET['partner'])){ ?>
                        var a3=jsondata.table_data;
                        //здесь я перебираю один из элементов JSON (он у меня многомерный)
                        $.each(a3, function(i3, b3) {
                            $("#title").html('Статистика по ' + b3.name);
                            $("title").html('Статистика по ' + b3.name);
                    });
                    <?php } ?>
                    // а тут прямо формирую html-код
                    var a = jsondata.table_data;
                    $("#datamfc").append('<thead><tr><th>Наименование МФЦ</th><th class="text-center">Клиентов<br>заведено</th><th class="text-center">Счетов<br>выставлено</th><th class="text-center">на сумму</th><th class="text-center">Счетов<br>оплачено</th><th class="text-center">на сумму</th><th class="text-center">Запросов<br>создано</th><th class="text-center">Сертификатов<br>выпущено</th><th></th></tr></thead>');
                    //ну и снова перебор
                    $.each(a, function(i, b) {
                                $("#datamfc").append('<tr><td>'+b.name+'</td><td class="text-center">'+b.clients_count+'</td><td class="text-center">'+b.bills_count+'</td><td class="text-center">'+b.all_summ+'</td><td class="text-center">'+b.bills_payed+'</td><td class="text-center">'+b.bills_payed_summ+'</td><td class="text-center">'+b.requests+'</td><td class="text-center">'+b.certificates+'</td><td><?php if (!isset($_GET['partner'])) { ?><a href=?partner=' + i + '><i class="fa fa-info-circle fa-2x"></i></a><?php } ?></td></tr>');
                    });
 
                    $("#cert_types").html('');
                    var a1=jsondata.cert_types;
                    $.each(a1, function(i1, b1) {
                                $("#cert_types").append(
                                    '<li class="list-group-item"><span class="badge">' + b1.col_vo + ' шт.</span>Сертификатов "<b><i>' + b1.name + '</i></b>"</li> '
                                );
                    });
 
                    $("#nomenklature").html('');
                    var a2=jsondata.nomenklature;
                    $.each(a2, function(i2, b2) {
                                $("#nomenklature").append(
                                    '<li class="list-group-item">' + b2.name + ' - ' + b2.col_vo + ' шт. <span class="badge">Итого: ' + b2.summa + ' руб.</span></li> '
                                );
                    });
                    }  
            });  
        }  
        $(document).ready(function(){
            show_NeedCert();
            setInterval('show_NeedCert()',11000);
            
        });
    </script>
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
15.03.2016, 21:40 10
Цитата Сообщение от maruo Посмотреть сообщение
об этом можно поподробней не понял
Есть много статей про архитектуру, чистоту кода итп, гугл в помощь...приведу пару примеров.
Придет к вам в команду верстальщик, увидит кучу малу из php, sql, html и...свалит. Никому не захочется вникать в дебри php кода(а верстальщик этого может и вообще не уметь), когда надо банально немного верстку поправить. Другой пример, понадобиться такой же html код, но уже в другом месте с другим sql запросом, будете дублировать код?
Правильно в этом случае будет разделить все это на функции/классы. php на мой взгляд ничего не должен знать об html, он только вызывает нужный шаблон и передает туда нужные данные. Генерирование html в js я также стараюсь избегать.

Для досуга:
mvc
фреймворк
Отцы используют это, а не пишут велосипеды.
1
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 21:47  [ТС] 11
tarasalk, насчет верстальщика.
А разве трудно в этом разобраться верстальщику??
Вот весь HTML и из php там 1 строка.

HTML5
1
2
3
4
5
6
7
8
9
  <!-- Privacy Settings Panel -->
            <div class="panel panel-primary panel-border top ">
                <div class="panel-body bg-light p10">
                  <div class="list-group list-group-links list-group-spacing-xs mbn">
                      <div class="list-group-header"><span class="imoon imoon-info"></span> <span>Full Info On Item</span> </div>
                      <?php echo $info_item; ?>
                  </div>
                </div>
            </div>
А это кусок php который формирует данную форму

PHP
1
2
3
4
5
6
7
8
9
10
11
12
foreach ($data as $key => $value) {
                                
            $info_item_img = '<div class="avatar-container p-'.$n3.'"><img class="avatar" src="'.$DIR_IMG.$value['img'].'" ></div>';
            $info_item .= 
                        '<a class="list-group-item"> Item: <b class="text-warning pull-right">'.$value['name_item'].'</b> </a>'
                        .'<a class="list-group-item"> Rare: <b class="text-warning pull-right">'.$value['rare_item'].'</b> </a>'
                        .'<a class="list-group-item"> Price In Steam: <b class="text-warning pull-right">'.$value['price_item'].'₽</b> </a>'
                        .'<a class="list-group-item"> Count Ticket: <b class="text-warning pull-right">'.$lost_ticket.'/'.$count_tick.'</b> </a>'
                        .'<a class="list-group-item"> Price Ticket: <b class="text-warning pull-right">'.$value['price_ticket'].'₽</b> </a>'
                        .'<a class="list-group-item"> Status Lot: <b class="text-success pull-right">'.$status_lottery.'</b></a>'
                        ;
        }
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
15.03.2016, 21:48 12
maruo, ну это то нормально. А вот такое уже нет.
PHP
1
2
3
4
5
foreach ($query_log as $keys => $values) {
            $span_lot .= '<span class="imoon imoon-history"></span> <span id="log-sistem-message">'.$values['date_lot'].' 
                          <a href="profile.php?id='.$values['user_id'].'"> '.$values['name'].'  </a>'.
                          'By a ticket under the number #'.$values['ticket_number'].'</span><br>';              
        }
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 21:50  [ТС] 13
Laroux, вы формируете форму яваскриптом?
Но мне это наврятли понравится. Я привык форму формировать через php. И быстрее воспринимаю и ищу проблему в ошибке, когда форма сформирована через php. И вообще все что связано JS я очень долго ищу проблему.
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 21:53  [ТС] 14
tarasalk, ну я другого выхода не нашел.Вот что у меня выходит когда я это формирую.

AJAX PHP MySQL


Ну это я смогу исправить думаю, если посидеть. Но у меня основная проблема это на аякс и как все на динамику посадить
0
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 21:55 15
да не.. формы там нет. Я привел это пример, чтобы показать, что не стоит вытягивать весь необходимый html, а можно сформировать его в скрипте. И обновляться на странице у Вас будет гораздо меньше данных (возможно не будет эффекта перезагрузки страницы; у меня не видно)
Цитата Сообщение от maruo Посмотреть сообщение
быстрее воспринимаю и ищу проблему в ошибке, когда форма сформирована через php
ну это понятно но тут уж сами выбираете - где-то убывает, где-то - прибывает. Формы, кстати,у меня в скрипте-то и нет
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 22:01  [ТС] 16
Laroux, Ну вот если вы возвращаете json'ом то вы же не сможете передать чисто переменную php? в которой уже форма сформирована?
Могу говорить глупости, я аякс более менее стал понимать прошлой ночью
0
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 22:12 17
Цитата Сообщение от maruo Посмотреть сообщение
аякс более менее стал понимать прошлой ночью
хех, брат
Я вот также, когда прижало, сел и начал вчитываться. Моим знаниям AJAX-а от силы неделя-полторы.

JSON - это такой "массив" который возвратится скриптом lot.php. Его можно удобно обработать в JQuery: в принципе сделать с ним все, что хотите. Например:
- если данные, которые вернутся, понятны (а главное понятно из количество), то очень просто разложить их по заранее подготовленным боксам (дивам, ссылкам, параграфам.. да куда угодно в DOM);
- если же количество данных непонятно, то они все равно структурированы (массив же). Поэтому можно перебрать их и вывести так, как Вам надо.

Оба моих варианта есть в моем скрипте. Несмотря на то, что он кажется громоздким и, вроде бы, непонятным, там не все там уж сложно.

Я сейчас поищу статьи, по которым я это делал (учился).. и сюда скину

Добавлено через 2 минуты
вот тут пример 5 http://ruseller.com/lessons.php?rub=32&id=1452

Добавлено через 2 минуты
http://anton.shevchuk.name/jav... ners-ajax/
0
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 22:12  [ТС] 18
Цитата Сообщение от Laroux Посмотреть сообщение
видал я все это, и не только
0
172 / 167 / 75
Регистрация: 21.11.2014
Сообщений: 1,490
15.03.2016, 22:13 19
ну так надо разок просто вникнуть и все.. дальше проще будет (авторитетно заявляю). Ну или это вторая стадия, как говорят:
1 стадия: нифига непонятно!
2 стадия: о, йолки! Все ж просто...
3 стадия: неа.. все-таки непонятно нифига
1
133 / 133 / 48
Регистрация: 26.04.2013
Сообщений: 1,356
15.03.2016, 22:16  [ТС] 20
Laroux, Моя проблема это MVC это я подозревал уже давно)Придется переделывать)
0
15.03.2016, 22:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2016, 22:16
Помогаю со студенческими работами здесь

Php+ajax передаю данные формы в базу mysql
От сюда $(function() { $('#chat_submit').click(function(e) { ...

Подгрузка из базы данных (MySQL) на PHP с использованием AJAX
Есть база данных в которой храняться фотографии, название и описание к ним. Сначала выводиться 9...

Нужен совет по PHP/Ajax/MySQL/Javascript/HTML/CSS
Добрый день. Маленько не стандартная тема для этого форума, но все же решил создать. Уже вопрос...

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\php\mysql.php on line 16
Не могу подключиться к базе...устал все перепроверять переписывать и пересоздавать... Я недавно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru