?
Solved

how to increment a progress bar while inserting data into database on button click in php

Posted on 2016-11-08
5
Medium Priority
?
1,090 Views
2 Endorsements
Last Modified: 2016-11-10
I have tried doing this but couldn't get it. Below is my code :
<script> 
    $(document).ready(function(){
        var $progressbar = $("#progressbar");
        $progressbar.show();
        $('#uploadForm').on('submit', function(e){
            e.preventDefault();
            $(function(){
                $progressbar.css('width', '30%');
            }); 
            $.ajax({
                url: "insertdata.php",
                type: "POST",
                data: new FormData(this),
                contentType: false,
                processData: false,
                success: function(data){
                    console.log(data);
                    if (data == 'T'){
                        $('#txtname').val("");
                        $('#txtsex').val("");
                        $('#txtage').val("");
                        $('#txterr').val('Record Inserted');
                        $progressbar.css('width', '100%');
                    }
                },
                error: function(data){
                alert("Something went wrong !");
            }
        });
    });
});
</script>

Open in new window


Code for Progress bar is as follows:
<div class="progress" style="margin-top:100px">
    <div class="progress-bar active" id="progressbar" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
        <span class="sr-only">0% Complete</span>
    </div>
</div>

Open in new window


insertdata.php In this file, insertion of data is processed.

Here working of my code is something like this: when the user presses the "Submit" button, progress bar shows 30% increase and when the process finishes 30% moves to 100%.

What I want to achieve is : Progress Bar should show progress ( percent by percent ) with the insertion of data into database, after Submit button is pressed.

How to achieve this?

Please help
2
Comment
Question by:Ratan Shastri
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 41879473
We have an article here at E-E that shows this exact application.
https://www.experts-exchange.com/articles/14519/A-jQuery-Progress-Bar.html

In order for the progress bar to be meaningful (or maybe even visible at all) the server-side process would need to run long enough for client/server communication to take place.  Typically a database insert is completed in milliseconds, so you might not see anything if the process completes quickly.  The article deliberately delays the background process so that the progress bar can be visible.
0
 
LVL 82

Expert Comment

by:leakim971
ID: 41879611
Without jQuery plugin :
<script> 
    $(document).ready(function(){
        var $progressbar = $("#progressbar");
        $progressbar.show();
        var updateProgressBar = function(evt) {
            if(evt.lengthComputable) {
                var percent = (evt.loaded*100)/evt.total;
                $(function(){
                    $progressbar.css('width', percent.toFixed(1) + '%');
                }); 
            }
        }
        $('#uploadForm').on('submit', function(e){
            e.preventDefault();
            $.ajax({
                xhr: function() {
                    var req = new XMLHttpRequest();
                    req.upload.addEventListener("progress", updateProgressBar, false);
                    req.addEventListener("progress", updateProgressBar, false);
                    return req;
                },
                url: "insertdata.php",
                type: "POST",
                data: new FormData(this),
                contentType: false,
                processData: false,
                success: function(data){
                    console.log(data);
                    if (data == 'T'){
                        $('#txtname').val("");
                        $('#txtsex').val("");
                        $('#txtage').val("");
                        $('#txterr').val('Record Inserted');
                        $progressbar.css('width', '100%');
                    }
                },
                error: function(data){
                    alert("Something went wrong !");
                });
            });
        });
    });
</script>

Open in new window


With this jQuery plugin : https://github.com/likerRr/jq-ajax-progress
<script> 
    $(document).ready(function(){
        var $progressbar = $("#progressbar");
        $progressbar.show();
        var updateProgressBar = function(evt) {
            if(evt.lengthComputable) {
                var percent = (evt.loaded*100)/evt.total;
                $(function(){
                    $progressbar.css('width', percent.toFixed(1) + '%');
                }); 
            }
        }
        $('#uploadForm').on('submit', function(e){
            e.preventDefault();
            $.ajax({
                url: "insertdata.php",
                type: "POST",
                data: new FormData(this),
                contentType: false,
                processData: false,
                success: function(data){
                    console.log(data);
                    if (data == 'T'){
                        $('#txtname').val("");
                        $('#txtsex').val("");
                        $('#txtage').val("");
                        $('#txterr').val('Record Inserted');
                        $progressbar.css('width', '100%');
                    }
                },
                error: function(data){
                    alert("Something went wrong !");
                });
            });
        }).uploadProgress(updateProgressBar).upload(updateProgressBar);
    });
</script>

Open in new window


/*
 * jQuery Ajax Progress - Lightweight jQuery plugin that adds support of `progress` and `uploadProgress` promises to $.ajax()
 * Copyright (c) 2015 Alexey Lizurchik <al.lizurchik@gmail.com> (http://likerrr.ru)
 * Licensed under the MIT license
 * http://likerrr.mit-license.org/
 */

(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['jquery'], factory);
  } else if (typeof exports === 'object') {
    // Node/CommonJS
    module.exports = factory(require('jquery'));
  } else {
    // Browser globals
    factory(jQuery);
  }
}(function($) {
  var $originalAjax = $.ajax.bind($);

  $.ajax = function (url, options) {
    if (typeof url === 'object') {
      options = url;
      url = undefined;
    }
    options = options || {};

    // Instantiate our own.
    var xmlHttpReq;

    if (!options.xhr) {
      xmlHttpReq = $.ajaxSettings.xhr();
    } else {
      xmlHttpReq = options.xhr();
    }

    // Make it use our own.
    options.xhr = function () {
      return xmlHttpReq;
    };

    var chunking = options.chunking || $.ajaxSettings.chunking;

    // this line looks strange, but without it chrome doesn't catch `progress` event on uploading. Seems like engine bug
    xmlHttpReq.upload.onprogress = null;

    var $newPromise = $originalAjax(url, options);

    // Extend our own.
    $newPromise.progress = function (handler) {
      // Download progress
      var lastChunkLen = 0;
      xmlHttpReq.addEventListener('progress', function (e) {
        var params = [e],
          chunk = '';

        if (this.readyState == 3 && chunking) {
          chunk = this.responseText.substr(lastChunkLen);
          lastChunkLen = this.responseText.length;
          params.push(chunk);
        }
        handler.apply(this, params);
      }, false);

      return this;
    };

    $newPromise.uploadProgress = function(handler) {
      // Upload progress
      if (xmlHttpReq.upload) {
        xmlHttpReq.upload.addEventListener('progress', function (e) {
          handler.apply(this, [e]);
        }, false);
      }

      return this;
    };

    return $newPromise;
  };
}));

Open in new window

2
 

Author Comment

by:Ratan Shastri
ID: 41879901
Thanks it really helped me a lot, can u please provide me a link from where can I study more about this.
0
 
LVL 82

Accepted Solution

by:
leakim971 earned 2000 total points
ID: 41879991
1
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 41880315
Here is the demonstration link for the article about progress bars:
https://iconoun.com/demo/jquery_progress_bar.php

See also:
My Favorite Lazy Alternative in the article.  This may be enough for essentially instantaneous activities like a database INSERT query.
https://v.cdn.vine.co/w/ccf87cd9-assets/images/loading_black.gif
1

Featured Post

Are You Using the Best Web Development Editor?

The worlds of web hosting and web development are constantly evolving. Every year we see design trends change, coding standards adapt and new frameworks/CMS created. With such a quick pace of change it’s easy to get lost trying to keep up.

See if your editor made the list.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller singl…
In this blog post, we’ll look at how ClickHouse performs in a general analytical workload using the star schema benchmark test.
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question