Display dynamic dropdown list – PHP
In this tutorial, we will be creating a dynamic dropdown to display list of orders. On selecting order from list, we display all product’s code in that order. And on selecting the product code, it will display the product’s detail.
We will be using a sample database named classicmodels, it is attached in the source files below. You can also download it from here.
Populate first dropdown
Create a file named index.php and create an empty <select> tag with a unique ID. We will be populating orders list in this dropdown.
<p>Orders</p>
<select id="orders">
</select>
Now create a function to populate all orders in this dropdown and call that function as soon as the page loads. We will be using pure Javascript in this tutorial, no jQuery is required.
<script type="text/javascript">
function getOrders() {
// Creating an AJAX object
var ajax = new XMLHttpRequest();
// A separate file is created to get orders list
ajax.open("GET", "get-orders.php", true);
// Actually sending the request to get data
ajax.send();
// Callback when request status changes
ajax.onreadystatechange = function () {
// readyState = 4, when the response is received
// status = 200, when the request is successfull
if (this.readyState == 4 && this.status == 200) {
// this.responseText will be JSON string, so we are converting it in Javascript object
// using function JSON.parse
var response = JSON.parse(this.responseText);
// html variable will contain all list items as String
var html = "<option>Select order</option>";
for (var a = 0; a < response.length; a++) {
// Value attribute will be used to get order details
html += "<option value='" + response[a].orderNumber + "'>";
// This will be displayed to users
html += response[a].orderNumber;
html += "</option>";
}
// Adding items in <select> tag
document.getElementById("orders").innerHTML = html;
}
};
}
// Calling the above created function when page loads.
getOrders();
</script>
Now go ahead and create a file named get-orders.php and in this file, simply get all the orders from database table orders and return as JSON.
<?php
$connection = mysqli_connect("localhost", "root", "", "classicmodels");
$sql = "SELECT * FROM orders";
$result = mysqli_query($connection, $sql);
$data = array();
while ($row = mysqli_fetch_object($result))
array_push($data, $row);
echo json_encode($data);
At this point, you will be able to see a list of orders in your first dropdown. The next step is to get all product’s code when user select any order from this list.
Populate second dropdown based on first value
First, attach an event that will be called when the user select any item from order’s list. Notice it is sending this.value which means user selected order number:
<p>Orders</p>
<select id="orders" onchange="getDetail(this.value);">
</select>
Now create a function to get all product’s code that have the same orderNumber as user has selected. Notice that we are sending orderNumber as parameter so we can get the record of only that order number:
function getDetail(orderNumber) {
var ajax = new XMLHttpRequest();
ajax.open("GET", "get-order-detail.php?orderNumber=" + orderNumber, true);
ajax.send();
ajax.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var response = JSON.parse(this.responseText);
var html = "<option>Select product code</option>";
for (var a = 0; a < response.length; a++) {
html += "<option value='" + response[a].productCode + "'>";
html += response[a].productCode;
html += "</option>";
}
document.getElementById("order-details").innerHTML = html;
}
};
}
Now, go ahead and create a file named get-order-detail.php and in this file, we will be getting records of only user selected order.
<?php
$orderNumber = $_GET["orderNumber"];
$connection = mysqli_connect("localhost", "root", "", "classicmodels");
$sql = "SELECT * FROM orderdetails WHERE orderNumber='$orderNumber'";
$result = mysqli_query($connection, $sql);
$data = array();
while ($row = mysqli_fetch_object($result))
array_push($data, $row);
echo json_encode($data);
Now you will be able to see the values in 2nd dropdown as soon as you select some value from first dropdown. So we can say that our 2nd dropdown list is now dynamic. Because its value changes with respective to the 1st dropdown.
[wpdm_package id=’127′]