Well I changed everything I'm still not sure why it's setting my ids as NULL
My connection
class Database extends PDO
{
private $host = 'localhost';
private $user = 'root';
private $pass = '***';
private $dbname = 'scores';
protected static $instance;
public function __construct($host = null, $user = null, $pass = null, $opts = null)
{
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
parent::__construct("mysql:host={$this->host};dbname={$this->dbname}", $this->user, $this->pass, $opts);
$opts = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $opts);
}
// Catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
}
My class
<?php
error_reporting(-1); // reports all errors
ini_set("display_errors", "1"); // shows all errors
ini_set("log_errors", 1);
ini_set("error_log", "data.log");
require('classes/Database.php');
class Data{
function addName($name){
try{
$db = new Database;
$insert = ("INSERT INTO usernames (person) VALUES (:name)");
$stmt = $db->prepare($insert);
$stmt->bindValue(':name', $name);
$stmt->execute();
}
catch(PDOException $e ) {
throw new pdoDbException($e);
}
}
function addScore($totalScore, $correct, $wrong){
try{
$db = new Database;
$insert = ("INSERT INTO gamescore (totalScore, correct, wrong, ids) VALUES (:totalScore, :correct, :wrong, (SELECT ids FROM usernames WHERE ids = LAST_INSERT_ID()))");
$stmt = $db->prepare($insert);
$stmt->bindValue(':totalScore', $totalScore);
$stmt->bindValue(':correct', $correct);
$stmt->bindValue(':wrong', $wrong);
$stmt->execute();
}
catch(PDOException $e ) {
throw new pdoDbException($e);
}
}
}
Adding name
require('classes/Data.php');
session_start();
$post = json_decode( file_get_contents("php://input"),true );
$updatedvalue = substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") , 0, 1) . substr(md5(time()) , 1);
$name = $post['person'];
$_SESSION["scoreKey"] = $updatedvalue;
if($updatedvalue === true){
header('Content-Type: application/json');
$success = ['response' => 'Something'];
json_encode($success);
}else{
if(empty($name)){
$character = array("Shrewd Farseer", "Verity Farseer", "Dutiful Farseer", "Chade Fallstar", "Chivalry Farseer", "Regal Farseer",
"Shrewd Farseer", "FitzChivalry Farseer", "FitzVigilant", "Shine Fallstar", "Prosper Farseer", "Integrity Farseer",
"August", "Merry Farseer", "Nettle", "Bee"
);
$rand_keys = array_rand($character, 2);
echo $name = $character[$rand_keys[0]] . "\n";
}
$scored = new Data();
$scored->addName($name);
}
Adding score
require('classes/Data.php');
$post = json_decode( file_get_contents("php://input"),true );
$totalScore = $correct = $wrong = "";
$totalScore = $post['totalScore'];
$correct = $post['correct'];
$wrong = $post['wrong'];
$scores = new Data();
$scores->addScore($totalScore, $correct, $wrong);
$success = ['response' => 'true'];
header('Content-Type: application/json');
echo json_encode($success);
I've checked my error logs, there's nothing so I tried to create a custom on to see if it would help
I looked at my network responses and no errors are being displayed
The only error I seem to get is
Uncaught (in promise) SyntaxError: Unexpected token C in JSON at position 0
Promise.then (async)
(anonymous) @ scripts.js:148
setInterval (async)
timer @ scripts.js:134
countDown @ scripts.js:69
So this is my JS file...
document.addEventListener('click a', function(e) {
if (e.target.nodeName === "A") {
if (e.target.classList.contains("opensModal")) {
e.preventDefault();
console.log(e.target.hash);
document.querySelector(e.target.hash).classList.add("target");
} else if (e.target.classList.contains("closeModal")) {
e.preventDefault();
e.target.closest(".modalDialog").classList.remove("target");
}
} else {
e.preventDefault();
var target = document.getElementsByTagName('a');
var scrolling = e.target.getAttribute('href');
scrolling.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
document.addEventListener("DOMContentLoaded", function() {
const leaderBoard = document.querySelector('.scored'),
gamer = document.querySelector('.gamer'),
gameDisplayed = document.querySelector('.game-display'),
scoreDisplayed = document.querySelector('.score-display'),
saveName = document.querySelector('.player-save'),
plyBtn = document.querySelector('.play-btn');
let name = document.querySelector('[name="person"]');
let modalBtn = document.getElementById("modal-btn")
let modal = document.querySelector(".modal")
let closeBtn = document.querySelector(".close-btn")
modalBtn.onclick = function(){
modal.style.display = "block"
}
saveName.onclick = function(){
modal.style.display = "none";
}
window.onclick = function(e){
if(e.target == modal){
modal.style.display = "none";
}
}
fetch('getscores.php').then(r => r.json()).then(data=>{
scoreDisplayed.innerHTML = data.map(record=>`${record.person} : ${record.totalScore} : ${record.ids}`).join("<br>");
}).catch(console.error);
leaderBoard.onclick = function() {
scoreDisplayed.style.display = "block";
gameDisplayed.style.display = "none";
};
gamer.onclick = function() {
scoreDisplayed.style.display = "none";
gameDisplayed.style.display = "block";
};
document.addEventListener("keydown",e=> document.querySelector(e.key==="y" ? "#yes" : "#no").click());
let score = 0,
wrong = 0,
totalScore = 0,
pen = 10;
document.querySelector(".startBtn").onclick = countDown
function countDown(){
timer();
this.closest("section").classList.remove("show");
document.querySelectorAll(".anime").forEach((section, i) => {
setTimeout(() => {
section.classList.add("show")
if (i < 4)
setTimeout(() => {
randomColour();
section.classList.remove("show");
plyBtn.style.display = "none";
}, 250)
}, 1000 * i)
})
}
function randomColour() {
const box = document.createElement("div"),
oldBox = document.querySelector(".box:last-of-type"),
colours = document.querySelector(".inner-colours");
let colourName = ["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Black"],
textColour = ["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Black"],
name = colourName,
randomItem = name[Math.floor(Math.random() * name.length)],
randomColours = box.style.color = textColour[Math.floor(Math.random() * textColour.length)];
box.classList.add("box");
box.textContent = randomItem;
colours.append(box);
setTimeout(() => {
box.classList.add('arrive');
if (oldBox) {
oldBox.classList.remove('arrive');
oldBox.ontransitionend = e => oldBox.remove();
oldBox.classList.add('depart');
}
document.querySelector(".answers").onclick = e => {
if ((randomItem === randomColours) && (e.target.textContent === "YES") || (randomItem !== randomColours) && (e.target.textContent === "NO")) {
randomColour();
score++;
} else if((randomItem === randomColours) && (e.target.textContent === "NO") || (randomItem !== randomColours) && (e.target.textContent === "YES")) {
randomColour();
wrong++;
}
totalWrong = wrong - pen;
totalScore = score - totalWrong;
console.log({score, totalWrong, totalScore});
}
}, 100)
}
function timer(){
let timeleft = 13,
ticker = document.querySelector(".countdown"),
gameContain = document.querySelector(".game-contain"),
gameController = document.querySelector(".game-control"),
right = document.createElement("div"),
incorrect = document.createElement("div"),
startButton = document.createElement("BUTTON"),
hide = document.createElement("div");
right.className = "correct";
incorrect.className = "wrong";
startButton.className = "startBtn";
startButton.textContent = "Play again";
downloadTimer = setInterval(function(){
ticker.textContent = timeleft;
timeleft -= 1;
if(timeleft <= 0){
clearInterval(downloadTimer);
scores = gameContain.insertAdjacentElement('beforeEnd', right);
wronged = gameContain.insertAdjacentElement('beforeEnd', incorrect);
scores.textContent = name.value + " you scored: " + totalScore;
wronged.textContent = "Wrong answers: " + wrong;
gameContain.insertAdjacentElement('beforeEnd', startButton);
ticker.style.display = "none";
gameController.style.display = "none";
plyBtn.style.display = "block";
PostJSONReturnJSON("createScore.php",{person: name.value}).then(console.log);
PostJSONReturnJSON("testing.php",{totalScore: totalScore, correct: score, wrong: wrong}).then(data=>{
// do something good
score = 0,
wrong = 0,
totalScore = 0;
fetch('getscores.php').then(r => r.json()).then(data=>{
scoreDisplayed.innerHTML = data.map(record=>`${record.person} : ${record.totalScore} : ${record.ids}`).join("<br>");
}).catch(console.error);
},error=>{
// report something bad
})
function putout(data){
output.innerHTML=data.join("<br>")
}
function PostJSONReturnJSON(url, data) {
return fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
}).then(r => r.json())
}
startButton.addEventListener("click", function(e) {
ticker.style.display = "block";
gameController.style.display = "block";
right.remove();
scores.remove();
wronged.remove();
startButton.remove();
countDown.call(ticker);
});
}
}, 1000);
}
});