I want to get form variables and push them into an array in memory only and not destroy the page by reloading. This is really something I have no expertise in. Can this be done? I need to add contents to a json file with php based on a form.
JSON DATA:
var members = [
{ "Class": "B", "Rating": "1776", "ID": "12537964", "Name": "Ahmed, Jamshed", "Expires": "2018.10.18" },
{ "Class": "C", "Rating": "1500", "ID": "12210580", "Name": "Attaya, James", "Expires": "2019.01.12" },
{ "Class": "F", "Rating": "0000", "ID": "16281977", "Name": "Auld, Thomas", "Expires": "" },
{ "Class": "B", "Rating": "1759", "ID": "10117780", "Name": "Badamo, Anthony", "Expires": "2018.09.12" }
]
JS:
<form action="" id = "newMember" class="pure-form" method = "GET" >
<fieldset>
<label for="mem-name">Last, First name:</label> <input type="text" id = "mem-name" name="mem-name" maxlength = "25" size = "20" />
<label for="mem-expires">Membership:</label> <input type="text" id = "mem-expires" name="mem-expires" maxlength = "10" size = "8" /> <br />
<label for="mem-rating">Rating:</label> <input type="text" id = "mem-rating" name="mem-rating" maxlength = "4" size = "3" />
<label for="mem-ID">ID:</label> <input type="text" id = "mem-ID" name="mem-ID" maxlength = "8" size = "7" />
<label for="mem-class">Class:</label> <input type="text" id = "mem-class" name="mem-class" maxlength = "2" size ="2" />
<button type="button" id="addPlayer" style="margin-left:2rem;" class="pure-button pure-button-primary" onClick="validateForm()">add new player</button>
<button type="reset" style="margin-left:2rem;" class="pure-button pure-button-secondary">reset form</button>
</fieldset>
</form>
<script>
function validateForm() {
var memName = document.getElementById('mem-name').value;
var memExpires = document.getElementById('mem-expires').value;
var memRating = document.getElementById('mem-rating').value;
var memID = document.getElementById('mem-ID').value;
var memClass = document.getElementById('mem-class').value;
if (memName == "") {
alert("Name must be filled out");
return false;
}else {
$.ajax({
type: 'GET',
url : 'welcome.php',
data : {
'mem-name' :memName,
'mem-expires' :memExpires,
'mem-rating' :memRating,
'mem-ID' :memID,
'mem-class' :memClass
},
success : function(data) {
console.log('My data should be here: ' + data);
members = JSON.parse(data);
console.log(members);
}
});
}
}
</script>
MEMBERS.PHP:
<?php
// Clean up data
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// define variables and set to empty values
$mem_name = $mem_expires = $mem_rating = $mem_ID = $mem_class = "";
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$mem_name = test_input($_GET["mem-name"]);
$mem_expires = test_input($_GET["mem-expires"]);
$mem_rating = test_input($_GET["mem-rating"]);
$mem_ID = test_input($_GET["mem-ID"]);
$mem_class = test_input($_GET["mem-class"]);
$array = array(
"Class" => $mem_class,
"Rating" => $mem_rating,
"ID" => $mem_ID,
"Name" => $mem_name,
"Expires" => $mem_expires
);
$json = file_get_contents('/home/verlager/public_html/cccr_mems.json');
$json = preg_replace('/\s{0,}var\s{0,}members\s{0,}=\s{0,}/', '', $json);
$json = preg_replace('/];\s{0,}/', ']', $json);
$json_data = json_decode($json,true);
array_push($json_data, $array);
$encodedJson = json_encode($json_data);
$myNewJson = 'var members =' . $encodedJson . '];';
file_put_contents('/home/verlager/public_html/cccr_mems.json', $myNewJson, LOCK_EX);
echo json_encode($encodedJson);
}
?>
This almost works, but not quite. What is a satisfactory solution?