[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Уведомление о новом заказе
Страницы: 1, 2, 3
WisesT
Всем доброго дня!
Подскажите, пожалуйста, как можно решить вот такую задачу.

Есть страничка, которая отображает список сегодняшних заказов.
$result = mysql_query("SELECT *,
DATE_FORMAT(`time`, '%d-%m-%Y %H:%i:%s') `formatTime`, DATE_FORMAT(`na_kogda`, '%d-%m-%Y') `formatTime1`
FROM `zakazy` WHERE `na_kogda`=CURDATE() ORDER BY `na_kogda`ASC;"
);

дальше вывожу в виде таблицы
while($row = mysql_fetch_assoc($result)){

}


Раньше страничка обновлялась автоматом через некоторое время и были видны новые заказы. Но это неудобно и дает некоторую нагрузку.
Можно ли... точнее, как можно написать (php,java,jq или еще как) такую штуку, чтоб уведомляла о появлении нового заказа без обновления страницы?
Что-то вроде окошка как в Вконтакте. Можно только на этой странице а не по всему сайту. Просто уведомления "есть новый заказ" будет достаточно.

Сайт локальный.

буду благодарен за подсказку.
rooor
аяксом дёргать базу через определённое количество времени
WisesT
То что будет переодическое подергивание базы это понятно.
Но каков алгоритм?
Дернул раз. Запомнил сколько.
Дернул два. Изменилось? кричим что есть новый заказ?

А как это написать?
rooor
ну ты же где-то показываешь количество заказов при загрузке страницы? вот бери это число и сравнивай с тем что в базе
WisesT
ну на пхп я знаю как это

mysql_num_rows( mysql_query("SELECT * FROM zakazy WHERE `na_kogda`=CURDATE()"));


а вот как это в в скрипт впилить... без понятия.
WisesT
Может кто сможет из этого что-то выкроить.
я просто не пойму, как.
WisesT
Кто может показать пример на аяксе?
Что-то до меня не доходит как в аякс данные из пхп засунуть
Игорь_Vasinsky
как любой JS скрипт. так же.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
WisesT
Таксь. Как вызывать функцию с определенной переодичностью - вроде понял

function func() {
// что-то делаем
}
// регистрируем периодический вызов функции через 1 секунду
setInterval("func()", 1000);

но как в "что-то делаем"
засунуть то что мне нужно?
запросить колличество заказов и сравнить колличество с предидущим разом?
WisesT
Помогите хотяб построить логику.

я представляю себе это как-то так

1. Смотрим колличество сегодняшних заказов. Заносим колличество в переменную $memory
$memory=mysql_num_rows( mysql_query("SELECT * FROM zakazy WHERE `na_kogda`=CURDATE()"));

2. Нужно куда-то эту переменную сохранить.
3. Опыть проверяем колличество сегодняшних заказов.
4. Сравниваем колличестов заказов с тем колличеством, которое в памяти.
5. Если колличество изменилось - сообщаем во всплывающем окне+звук и перезаписываем память.
6. Повторяем с п.3.

Пожалуйста, напишите, как это засунуть

function func() {
//СЮДА
}
// регистрируем периодический вызов функции через 1 секунду
setInterval("func()", 1000);
rooor
С аяксом можно проще написать, если использовать GET, а не POST... ну или использовать jQuery. Это только пример) Разбирайся =)
1. Показываем где-то на странице количество заказов. Например, так:
echo '<input type="text" id="order" value="'.$count.'">';

2. JS
function func() {
val = "getCount";
count_start = document.getElementById("order").value;
ajax = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
ajax.open("POST", "index.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function()
{
if(ajax.readyState == 4 && ajax.status == 200)
{
if(ajax.responseText != count_start)
alert("Количество заказов изменилось");
}
}

ajax.send(val);
}
Shkiper
а для постоянного обновления так:
function func() {
val = "getCount";
count_start = document.getElementById("order").value;
ajax = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
ajax.open("POST", "index.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function()
{
if(ajax.readyState == 4 && ajax.status == 200)
{
if(ajax.responseText != count_start)
alert("Количество заказов изменилось");
setTimeout(func, 2000);
}
}

ajax.send(val);
}

Время сам подбирай ;)
WisesT

Таксь. Пробую понять.
echo '<input type="text" id="order" value="'.$count.'">';

тут понятно. Создаем некое поле с ИД (позже можно будет сделать скрытым). Скриптом будем обращаться к этому полю по ИД.

а вот JS логику пока не понял.
val = "getCount";

это, как я понимаю, наша "память" сколько было в прошлый раз. Получаем из

ajax.send(val);


count_start = document.getElementById("order").value;

это в переменную count_start мы загнали данные из инпута с ИД order

а вот дальше ничерта не понял...
Могли бы расписать?
rooor
val = "getCount";
переменная для обработчика, куда будем посылать запрос, например, обработчик у нас будет count.php
то там пишем - if(isset($_POST['getCount'])) { /**отдаём количество заказов в базе*/ }
count_start - число из текстового поля, количество заказов в базе при загрузке страницы
ajax.responseText - число которое вернул обработчик
if(ajax.responseText != count_start) - если число в базе отличается от существующего - тогда TRUE
ajax.send(val); - посылаем запрос обработчику
WisesT
пробую вот так, но...
на странице out_today.php
создал
$count = mysql_num_rows ( mysql_query ("SELECT * FROM zakazy WHERE `na_kogda` = CURDATE()"));
echo '<input type="text" id="order" value="'.$count.'">';

Создал обработчик count.php

<?php
include "config.php";
if(isset($_POST['getCount'])) {$count=mysql_num_rows( mysql_query("SELECT * FROM zakazy WHERE `na_kogda`=CURDATE()")); }
?>


JS сделал так
function func() {
val = "getCount";
count_start = document.getElementById("order").value;
ajax = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
ajax.open("POST", "count.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function()
{
if(ajax.readyState == 4 && ajax.status == 200)
{
if(ajax.responseText != count_start)
alert("Количество заказов изменилось");
setInterval("func()", 1000);
}
}

ajax.send(val);
}

Реакции никакой.

И немножко не разобрался. Вы посоветовали setTimeout(func, 2000); а я думал о setInterval("func()", 1000);
Как я понимаю, первый вариант подразумевает единоразовое выполнение скрипта, а второй - периодическое.
Что же выбрать?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.