Displaying data from MySQL without reloading the page can be done with an on-click event which does an Ajax request that then fills elements with the returned data.
This is done with no page refreshing/resetting.
You will need jQuery and Bootstrap (this example styled with Bootstrap):
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
The MySQL table and data for this example:
user_id|result|when |decimal|score
260| 1|2019-06-18 10:11:03| 1.9800|94
261| 0|2019-06-17 12:31:03| 1.1856|55
262| 1|2019-06-14 06:28:03| 1.2673|61
263| 1|2019-06-10 11:44:03| 1.6904|70
264| 1|2019-06-09 17:21:08| 1.8655|88
Each time the button is pressed the fetch.php file will be called and its data returned and assigned to elements.
The inline ajax script:
<script>
jQuery(document).ready(function ($) {
$("#btn_fetch").click(function (e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "fetch.php",
dataType: "json",
success: function (result) {
$('#result').html(result);
document.getElementById("updated").innerHTML = result[0];
document.getElementById("id").innerHTML = result[1];
document.getElementById("result").innerHTML = result[2];
document.getElementById("score").innerHTML = result[3];
},
error: function (result) {
alert('error');
}
});
});
});
</script> As the returned data is an array each HTML element is assigned its value with the array index.
fetch.php:
<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=test_table;charset=utf8mb4', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$select = $db->prepare("SELECT `user_id`, `result`, `when`, `score` FROM `login_data` LIMIT 1;");
$select->execute();
$array = [];
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
$uid = $row['user_id'];
$result = $row['result'];
$when = $row['when'];
$score = $row['score'];
$array = array(date('g:i:s a D jS M'), $uid, $result, $when, $score);
}
echo json_encode($array); This will return the id = 264 row as there is no where conditions in the query and has a limit of 1.
HTML file
<div class="container">
<div class="row">
<div class="col-12">
<div class="card py-3">
<div class="row text-center">
<div class="col-12 px-5">
<button type="button" class="btn btn-secondary px-5 mt-2" id="btn_fetch">Fetch</button>
</div>
</div>
<div class="row">
<div class="col-12 px-5">
<p><b>Id:</b> <span class="id" id="id"></span></p>
<p><b>Result:</b> <span class="result" id="result"></span></p>
<p><b>Score:</b> <span class="score" id="score"></span></p>
<p><b>Values fetched:</b> <span class="updated" id="updated"></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
The first example returned data from a hardcoded value, now for a dynamic example that will return data from a query based on a number input element.
The input will be the user_id column. The differences now are a variable assigned from the input element and this is passed with the POST request as uid:
<script>
jQuery(document).ready(function ($) {
$("#btn_fetch").click(function (e) {
var uid = $('input[name="user_id"]').val();
e.preventDefault();
$.ajax({
type: "POST",
data: {uid: uid},
url: "fetch.php",
dataType: "json",
success: function (result) {
$('#result').html(result);
document.getElementById("updated").innerHTML = result[0];
document.getElementById("id").innerHTML = result[1];
document.getElementById("result").innerHTML = result[2];
document.getElementById("score").innerHTML = result[4];
},
error: function (result) {
alert('error');
}
});
});
});
</script> The HTML with an input:
<div class="container">
<div class="row">
<div class="col-12">
<div class="card py-3">
<div class="row text-center">
<div class="col-12 px-5">
<input type="number" id="user_id" name="user_id" class="form-control" min="0" max="99999">
<button type="button" class="btn btn-secondary px-5 mt-2" id="btn_fetch">Fetch</button>
</div>
</div>
<div class="row">
<div class="col-12 px-5">
<p><b>Id:</b> <span class="id" id="id"></span></p>
<p><b>Result:</b> <span class="result" id="result"></span></p>
<p><b>Score:</b> <span class="score" id="score"></span></p>
<p><b>Values fetched:</b> <span class="updated" id="updated"></span></p>
</div>
</div>
</div>
</div>
</div>
</div> The fetch.php file now has a check for $_POST['uid'] this is passed into the MySQL PDO query:
<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (isset($_POST['uid'])){
$uid = $_POST['uid'];
} else {
$uid = 264;//Fallback id. Not proper handle of situation...
}
$select = $db->prepare("SELECT `user_id`, `result`, `when`, `score` FROM `login_data` WHERE `user_id` = ? LIMIT 1;");
$select->execute([$uid]);
$array = [];
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
$uid = $row['user_id'];
$result = $row['result'];
$when = $row['when'];
$score = $row['score'];
$array = array(date('g:i:s a D jS M'), $uid, $result, $when, $score);
}
echo json_encode($array); Now the data will be for the user id in the input element:
A drained and empty Kennington reservoir images from a drone in early July 2024. The…
Merrimu Reservoir from drone. Click images to view larger.
Using FTP and PHP to get an array of file details such as size and…
Creating and using Laravel form requests to create cleaner code, separation and reusability for your…
Improving the default Laravel login and register views in such a simple manner but making…
Laravel validation for checking if a field value exists in the database. The validation rule…