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


И как добавить кнопку выхода из цикла break; ?
Guest
Цитата (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 нужно сделать?
d4a1
Это я гуглил уже, хотелось бы реализацию этого увидеть.
Да кнопку любую, чтоб тормознуть цикл если будет необходимо.
AllesKlar
Цитата (d4a1 @ 19.05.2016 - 14:16)
Добрый день, подскажите пожалуйста, как реализовать progress bar выполнения цикла
 $a = $db->query('SELECT x FROM db;');
while ($i = $a->fetchArray()) {
echo $i[x];
}


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

никак.

_____________
[продано копирайтерам]
redreem
перебирать $a->fetchArray() на клиенте и слать аджаксы для запроса.
arbuzmaster
Нужно еще знать, кол-во всех записей, иначе не от чего плясать progressbar-у.

_____________
Мой первый сайтик

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

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
d4a1
спасибо!
Ну я могу получить сколько всего в базе,
допустим 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 подключить к нему?
arbuzmaster
Вот тебе простой прогрессбар

<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%"; // изменяем счетчик процентов, на полосе загрузки

}


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
arbuzmaster
Процент получается так

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



_____________
Мой первый сайтик

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

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

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
arbuzmaster
Да с куками я чет,загнул не в ту степь, можно попробовать так.
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,то я думаю это не критично.

}


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
Быстрый ответ:

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