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://write.corbpie.com/wp-content/litespeed/localres/aHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS8=ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css"/> <script src="https://write.corbpie.com/wp-content/litespeed/localres/aHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS8=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
Example 1; Basic one-row fetch
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>
Example 2; Fetching with an input id
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: