article

Friday, December 24, 2021

AngularJS PHP MySQLi Pie Doughnut Chart using ChartJS

AngularJS PHP MySQLi Pie Doughnut Chart using ChartJS

angularjs CDN https://angularjs.org/ Version 1.8.2 https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js

Chart.js
chart.js is a simple, clean and engaging HTML5 based JavaScript charts. Chart.js is an easy way to include animated, interactive graphs on your website for free.

https://www.chartjs.org/

https://www.chartjs.org/docs/latest/

CREATE TABLE `productsales` (
  `saleid` int(11) NOT NULL,
  `productid` int(11) NOT NULL,
  `amount` double NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `productsales`
  ADD PRIMARY KEY (`saleid`);

ALTER TABLE `productsales`
  MODIFY `saleid` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
  
  
CREATE TABLE `products` (
  `id` int(11) NOT NULL,
  `productname` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `products` (`id`, `productname`) VALUES
(1, 'Ipad'),
(2, 'Iphone'),
(3, 'Macbook'),
(4, 'Mac');

ALTER TABLE `products`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `products`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

index.html
//index.html
<!DOCTYPE html>
<html ng-app="app">
<head>
	<title>AngularJS PHP MySQLi Pie Doughnut Chart using ChartJS</title>
	<meta charset="utf-8">
	<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
	
	<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
	
	<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.bundle.min.js"></script>
	<style type="text/css">
		canvas{
			margin:auto;
		}
		.alert{
			margin-top:20px;
		}
	</style>
</head>
<body ng-controller="myCtrl">
<div class="container">
	<div class="row"><h1>AngularJS PHP MySQLi Pie Doughnut Chart using ChartJS</h1>
		<div class="col-sm-3 col-md-offset-1" ng-init="fetchproducts()">
			<h3 class="page-header text-center">Add Purchase</h3>
			<div class="form-group">
				<label>Select Product:</label>
				<select ng-model="productid" class="form-control" name="productid">
					<option ng-repeat="rs in products" value="{{rs.id}}">{{rs.productname}}</option>
				</select>
			</div>
			<div class="form-group">
				<label>Amount:</label>
				<input type="text" class="form-control" name="amount" ng-model="amount">
			</div>
			<button type="button" ng-click="purchase()" class="btn btn-primary">Buy</button>
			<div class="alert alert-success text-center" ng-show="success">
				<button type="button" class="close" aria-hidden="true" ng-click="clear()">×</button>
				{{ message }}
			</div>
			<div class="alert alert-danger text-center" ng-show="error">
				<button type="button" class="close" aria-hidden="true" ng-click="clear()">×</button>
				{{ message }}
			</div>
		</div>
		<div class="col-sm-7" ng-init="fetchsales()">
			<h3 class="page-header text-center">Product Sales Chart</h3>
			<canvas id="dvCanvas" height="400" width="400"></canvas>
	    </div>
	</div>
</div>
<script>
var app = angular.module('app', []);
 
app.controller('myCtrl', function ($scope, $http) {
 
    $scope.error = false;
    $scope.success = false;
 
    $scope.fetchproducts = function(){
		$http({
            method: 'GET',
            url: 'fetchproducts.php',
        }).then(function (data){
            console.log(data)
            $scope.products = data.data;
        },function (error){
            console.log(error, 'can not get data.');
        });
    }
 
    $scope.purchase = function(){
		$http({
            method: 'POST',
            url: 'purchase.php',
			data:{amount:$scope.amount, productid:$scope.productid}
        }).then(function (data){
            console.log(data)
            if(data.error){
                $scope.error = true;
                $scope.success = false;
                $scope.message = data.data.message;
            }
            else{
                $scope.success = true;
                $scope.error = false;
                $scope.message = data.data.message;
                $scope.fetchsales();
                $scope.buy = '';
            }
        },function (error){
            console.log(error, 'can not get data.');
        });
    }
 
    //this fetches the data for our table
    $scope.fetchsales = function(){
		$http({
            method: 'GET',
            url: 'fetchsales.php',
        }).then(function (data){
            console.log(data)
            var ctx = document.getElementById("dvCanvas").getContext('2d');
            var myChart = new Chart(ctx, {
                type: 'pie', // change the value of pie to doughtnut for doughnut chart
                data: {
                    datasets: [{
                        data: data.data.total,
                        backgroundColor: ['blue', 'green', 'red', 'yellow']
                    }],
                    labels: data.data.productname
                },
                options: {
                    responsive: false
                }
            });
        },function (error){
            console.log(error, 'can not get data.');
        });
    }
 
    $scope.clear = function(){
        $scope.error = false;
        $scope.success = false;
    }
 
});
</script>
</body>
</html>
dbcon.php
//dbcon.php
<?php
$conn = new mysqli('localhost','root','','testingdb');
if ($conn->connect_error) {
    die('Error : ('. $conn->connect_errno .') '. $conn->connect_error);
}
?>
fetchproducts.php
//fetchproducts.php
<?php
include('dbcon.php');

$out = array();
 
$sql = "SELECT * FROM products";
$query = $conn->query($sql);
 
while($row=$query->fetch_array()){
	$out[] = $row;
}
echo json_encode($out);
?>
purchase.php
//purchase.php
<?php
	include('dbcon.php');
 
	$out = array('error' => false);
 
	$data = json_decode(file_get_contents("php://input"));
 
	$productid = $data->productid;
	$amount = $data->amount;
 
	$sql = "INSERT INTO productsales (productid, amount) VALUES ('$productid', '$amount')";
	$query = $conn->query($sql);
 
	if($query){
		$out['message'] = "Purchase added successfully";
	}
	else{
		$out['error'] = true;
		$out['message'] = "Cannot add purchase"; 
	}
 
	echo json_encode($out);
?>
fetchsales.php
//fetchsales.php
<?php
	include('dbcon.php');
 
	$out = array();
 
	$sql = "SELECT *, sum(amount) AS total FROM productsales LEFT JOIN products ON products.id=productsales.productid GROUP BY productsales.productid";
	$query = $conn->query($sql);
 
	while($row=$query->fetch_array()){
	    $out['total'][] = $row['total'];
	    $out['productname'][] = $row['productname'];
	}
 
	echo json_encode($out);
?>

Related Post