Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Progress bar к циклу
d4a1  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 22275
На форуме: 6 лет, 6 месяцев, 17 дней
Карма:




Добрый день, подскажите пожалуйста, как реализовать progress bar выполнения цикла
 $a = $db->query('SELECT x FROM db;');
while ($i = $a->fetchArray()) {
echo $i[x];
}


И как добавить кнопку выхода из цикла break; ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (d4a1 @ 19.05.2016 - 16:16)
Добрый день, подскажите пожалуйста, как реализовать progress bar выполнения цикла
 $a = $db->query('SELECT x FROM db;');
while ($i = $a->fetchArray()) {
echo $i[x];
}


И как добавить кнопку выхода из цикла break; ?

>Клиентская сторона ► JavaScript
> код php

Ну а кнопку-то хоть на CSS нужно сделать?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
d4a1  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 22275
На форуме: 6 лет, 6 месяцев, 17 дней
Карма:




Это я гуглил уже, хотелось бы реализацию этого увидеть.
Да кнопку любую, чтоб тормознуть цикл если будет необходимо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 10 дней
Карма: 170




Цитата (d4a1 @ 19.05.2016 - 14:16)
Добрый день, подскажите пожалуйста, как реализовать progress bar выполнения цикла
 $a = $db->query('SELECT x FROM db;');
while ($i = $a->fetchArray()) {
echo $i[x];
}


И как добавить кнопку выхода из цикла break; ?

никак.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4258
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 6 дней
Карма: 147




перебирать $a->fetchArray() на клиенте и слать аджаксы для запроса.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 720
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 11 дней
Карма: 21




Нужно еще знать, кол-во всех записей, иначе не от чего плясать progressbar-у.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 720
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 11 дней
Карма: 21




Логика примерно такая - перед запуском цикла, нужно знать сколько всего записей - будет 100%, далее запускаешь цикл и путем не хитрых вычислений, при каждой итерации получаешь процент, который можно например писать в куки, сессию или еще куда нибудь. Это все на PHP, затем на JavaScript пишешь функцию которая будет запускать твой PHP скрипт ajax-ом, и затем через setInterval опрашивать например куки и получать процент выполнения, т.е. циферку и по ней будешь рисовать progressbar. Кнопку в таком случае можно реализовать через те же куки, через ajax не получится, так как процесс уже запущен, и в цикле (php файл) прописать условие, что если значение например в куке такое-то, остановить цикл. А в JavaScript на функцию кнопки повесить еще и clearInterval для таймера который был запущен. Примерно как то так.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
d4a1  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 132
Пользователь №: 22275
На форуме: 6 лет, 6 месяцев, 17 дней
Карма:




спасибо!
Ну я могу получить сколько всего в базе,
допустим 100


$total = 100;
$count = 0; // для прогресс бара
$a = $db->query('SELECT x FROM db;');
while ($i = $a->fetchArray()) {
echo $i[x]; // вместо echo долгая операция
$count = $count + 1; // увеличиваем на 1 прогресс бар
}


а вот как JS подключить к нему?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 720
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 11 дней
Карма: 21




Вот тебе простой прогрессбар

<div style="text-align: center; color: red; display: block; height: 120px; width: 500px; border: solid 1px black;position:absolute;left:0px;top:100px;">
<div
id="load" style="text-align: center; color: white; display: block; height: 20px; width: 200px; background:blue; border: solid 1px black;">
<div
id="bar" style="display: block; height: 20px; width: 0%; background:green;" >
<div
id="persent" style="position: relative; float:left; width:200px;">0%</div></div>
</div>
</div>


и JavaScript к нему

// response - ответ от PHP -циферка процентов
if (response<100) {

document.getElementById("bar").style.width=response+"%"; //растягиваем полосу загрузки
document.getElementById("persent").innerHTML=response+"%"; // изменяем счетчик процентов, на полосе загрузки
}
else {
document.getElementById("bar").style.width="0%"; //растягиваем полосу загрузки
document.getElementById("persent").innerHTML="0%"; // изменяем счетчик процентов, на полосе загрузки

}


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 720
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 11 дней
Карма: 21




Процент получается так

$percent=round(($progress/$count)*100);
//$progress - в вашем коде -$count
//$count- всего записей



--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (arbuzmaster @ 19.05.2016 - 22:05)
затем на JavaScript пишешь функцию которая будет запускать твой PHP скрипт ajax-ом, и затем через setInterval опрашивать например куки и получать процент выполнения, т.е. циферку и по ней будешь рисовать progressbar. Кнопку в таком случае можно реализовать через те же куки, через ajax не получится, так как процесс уже запущен, и в цикле (php файл) прописать условие, что если значение например в куке такое-то, остановить цикл.

А как процесс, который уже запущен, узнает, что куки обновились?
Куки ездят на сервер в http-запросе.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 720
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 11 дней
Карма: 21




Да фиг его знает, с кнопкой не делал ! Но на верное можно как то по другому сделать эту кнопку? Или сделать запрос на сервер для обновления куки. Я вообще циферку в БД писал в одном файле а, потом ajax - ом ее от туда доставал в другом. А вообще вот


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
arbuzmaster  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 720
Пользователь №: 37872
На форуме: 3 года, 4 месяца, 11 дней
Карма: 21




Да с куками я чет,загнул не в ту степь, можно попробовать так.
select_from_db.php

$total = 100;
$count = 0; // для прогресс бара
$a = $db->query('SELECT x FROM db;');
while ($i = $a->fetchArray()) {
$count = $count + 1; // увеличиваем на 1 прогресс бар
$percent=round(($count/$total)*100);
$fp = fopen('counter.txt', 'w+t');
fwrite($fp, $percent);
fclose($fp);
}
$fp = fopen('counter.txt', 'w+t');
fwrite($fp, '0');
fclose($fp);
echo 'ok';



function start_select()
{
$.ajax( { type: "GET", url: "php/select_from_db.php", data:{'test':'test'} , beforeSend: function()
{

refresh_progressbar= setInterval(function ()
{

$.ajax( { type: "GET", url: "php/counter.txt", data:{'test':'test'} , success: function(response)
{
if (response<100)
{

document.getElementById("bar").style.width=response+"%"; //растягиваем полосу загрузки
document.getElementById("persent").innerHTML=response+"%"; // изменяем счетчик процентов, на полосе загрузки
}
else
{
document.getElementById("bar").style.width="0%"; //растягиваем полосу загрузки
document.getElementById("persent").innerHTML="0%"; // изменяем счетчик процентов, на полосе загрузки

}
}
);
}, 1000);

}, success: function(msg){if(msg=='ok'){console.log('процесс окончен');clearInterval(refresh_progressbar);}}
}
)
}
function chudo_knopka()
{
здесь можно попробовать сделать так,
пишем в куку значение для остановки цикла и отправляем ajax запрос хоть на тот
же самый counter.txt, кука попадает на сервер и скрипт по идее должен остановиться,
затем clearInterval(refresh_progressbar); если так не получится, то Х.З., кнопку никогда не делал! Хотя по сути юзеру совершенно насрать, остановился твой скрипт или нет, ведь он
все равно когда нибудь остановится. если у тебя конечно в БД не +100500 записей, а всего 100,то я думаю это не критично.

}


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 29 дней
Карма: 15




Можно сделать с помощью flush. Делаешь в цикле сброс буфера в браузер пользователя. Соединение с сервером при этом закрываться не будет. Можно посмотреть этот пример.

Вообще тебе нужно гуглить такие слова как: comet push, http streaming comet, server sent events.

Проблема лишь в том, что HTTP для это не предназначен и по большему счету это хак. Поэтому сброшенный буфер может застрять где угодно по пути к браузеру, на веб-сервере, на прокси серверах, на маршрутизаторах/коммутаторах и т.д. Поэтому в том же решении добивают буффер кучей пробелов echo str_repeat(' ',1024*64); чтобы пакет нигде не застрял и пролетел до браузера.

Все это выглядит довольно убого. Для решения таких задач придумали Websocket протокол. Но это другая история и другие подходы к веб разработке.
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса