Introduction
Nowadays, AJAX become an important technology in creating dynamic actions in a website page without need to reload the page itself.
AJAX allows web pages to be updated asynchronously by exchanging small amounts of data with the server behind the scenes. It can even extract data from database and display it in the webpage without reloading it
In this tutorial, we will handle the action of extracting data from Mysql database and display it in a html table using AJAX.
Content
- 1- Mysql database.
- 2- Connection file to database.
- 3- Home page (which will call the AJAX action).
- 4- AJAX Request.
- 5- Page handling the AJAX request.
-
1- MySql Database
Create a database named for example
stores
. Then create a table nameditems
by executing the following SQL query :
Then insert some data in table-- -- Table structure for table `items` -- CREATE TABLE `items` ( `itemId` int(11) NOT NULL, `itemBarcode` varchar(50) NOT NULL, `itemName` varchar(100) NOT NULL, `itemUnitPrice` float NOT NULL, `itemSellingPrice` float NOT NULL, `storeId` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- Indexes for table `items` -- ALTER TABLE `items` ADD PRIMARY KEY (`itemId`);
items
created :-- -- Dumping data for table `items` -- INSERT INTO `items` (`itemId`, `itemBarcode`, `itemName`, `itemUnitPrice`, `itemSellingPrice`, `storeId`) VALUES (1, '1234567896325', 'Laptop HP 4G Ram CPU 2.4', 200, 300, 1), (2, '1254856932452', 'Laptop HP 2G Ram CPU 1.6', 100, 150, 1), (3, '1289321785216', 'Laptop Dell 4G Ram CPU 2.0', 225, 315, 1), (4, '9658321456987', 'Laptop Dell 6G Ram CPU 2.4', 275, 350, 1), (5, '1452321852364', 'Printer HP lazerjet 11010', 35, 72, 2), (6, '1289326478215', 'Printer HP lazerjet 1120', 42, 95, 2), (7, '1235469852162', 'office table 2x3', 115, 225, 3), (8, '1325732158426', 'office chair TXPU', 22.5, 45.5, 3);
2- Connection file to database.
create a filedbconnect.php
to maintain the connection to database :<?php
//Database Connection file. Update with your Database information .
define ("DB_HOST", "localhost"); //Databse Host.
define ("DB_USER", "root"); //Databse User.
define ("DB_PASS", ""); //database password.
define ("DB_NAME", "stores"); //database Name.
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
mysqli_set_charset($db,"utf8");
if($db->connect_errno > 0){
die('Unable to connect to database ['.$db->connect_error.']');
}
?>
3- Home page (which will call the AJAX action).
Create a page namedindex.php
.
This page will include the visual data. It means it will contain a dropdown list which contains the names of the stores and a HTML table which will dispaly the data extracted from the tableitems
using AJAX.
insert in theindex.php
page the following code :
As you can see, in the dropdown list , we added an<div class="col-sm-12">
<div class="title-header">
<h1 class="title">Populate table with data from MySql using AJAX</h1>
</div>
<div class="well">
<div class="form-group">
<div class="text-center">
<label>Select store</label><br>
<select name="store" id="store" style="width:50%" class="autofill " Required >
<option value="">Select store</option>
<option value="1"> Store 1 </option>
<option value="2"> Store 2 </option>
<option value="3"> Store 3 </option>
</select>
</div>
</div>
<table id="items" class="table table-condensed table-hover table-bordered">
<tr>
<th>Barcode</th>
<th>Name</th>
<th >Cost Price</th>
<th >Selling Price</th>
</tr>
<tr class='item-row'>
<td colspan="4"></td>
</tr>
<input type="hidden" class="nbcomp" name="nbcomp" id="nbcomp" value="0"/>
</table>
</div>
</div>
id
attributeid="stores"
which we will use to create thechange
event when user click on the dropdown list to select the name of the store.
Anotherid
attribute is added to the table<table id="items" class="...">
to identify the container that will receive the data.
And finally, in order to display the data extracted, we added aclass
attribute to the row of the table<tr class="item-row">
and this class will be used to identify the place where the data received will be displayed.
4- AJAX Request.
As we said before, the ajax event will be handled when the user select an option from thestores
list.
So, when selecting an option, the folllowing Jquery event will be handeled ://when selecting an item from the dropdown $("#store").change(function() { $("#items tr>td").remove(); $.ajax({ data: { store_id: $("#store").val() }, type: 'POST', dataType: 'json', url: 'pages/get_items.php', success: function(response) { var content = response.content; $(".item-row:first").before(content); }, error: function(xhr, status, error) { alert(xhr.responseText); } }); });
-$("#items tr>td").remove();
: this will remove any previous data from the row.
-store_id: $("#store").val()
: object that will sent to the server with the request, this is the parameter of store identifier than , according to it,data will be retreived from the database .
-url: 'pages/get_items.php',
: This is a mandatory parameter in the asynchronous http POST request. It contains the adress to which to send the request. A request will be sent to the pageget_items.php
which will provide the necessary data and send it back. The returned data will be ignored if no other parameter is specified.
-success: function(response) { ..
: A callback function that is executed if the request succeeds. It takes as an argumentresponse
the returned data. It is also passed the text status of the response.
-$(".item-row:first").before(content);
: Here we see the usefulness of theitem-row
class. The row will receive the returned data and display it.
-error: function(xhr, status, error) { alert(xhr.responseText);}
: If any error occures during the ajax request, it will be displayed in an alert box.
5- Page handling the AJAX request
Now, we will create the page that handles the ajax request and returns the data to be displayed.
Create a file namedget_items.php
and insert the following code :$store = $_POST['store_id'];
if( isset($store)) {
$query = "SELECT * from items WHERE storeId='".$store."'";
$result = $db->query($query) or die($db->error);
$content = '';
While ($row = $result->fetch_array()) {
$barcode = mysqli_real_escape_string($db,$row['itemBarcode']);
$name = mysqli_real_escape_string($db,$row['itemName']);
$unitPrice =$row['itemUnitPrice'];
$sellingPrice =$row['itemSellingPrice'];
$content .='<tr class="item-row"><td><div class="delete-wpr">'.$barcode.'<a class="delme" href="javascript:;" title="Remove row">X</a></div></td>';
$content .='<td>'.$name.'</td>';
$content .='<td align="right">'.number_format($unitPrice,2).' $</td>';
$content .='<td align="right">'.number_format($sellingPrice,2).' $</td>';
}
$storeData = array(
"content" => $content
);
echo json_encode($storeData);
}