Bonjour,
Je rencontre un petit problème avec mon code.
Dans le cadre d'un jeu Juste Prix je fais une Diff de DateTime pour ressortir le timer du joueur et l'enregistrer dans la BDD.
$answers = (int)$_POST['answer'];
if(!isset($_SESSION['compteur'])):
$_SESSION['compteur'] = 1;
else:
++$_SESSION['compteur'];
endif;
if(empty ($_SESSION['timer'])):
$_SESSION['timer'] = $timer1 = new DateTime('NOW');
endif;
while ($goodanswer === false) {
if($answers === $_SESSION['findnum']):
$timer2 = new DateTime('NOW');
$diff = $_SESSION['timer']->diff($timer2, true)->format("%h:%i:%s");
echo "Bravo tu as trouvé le bon chiffre en $diff et {$_SESSION['compteur']} essaies";
var_dump($diff);
$username = htmlentities($_SESSION['username']);
$tries = $_SESSION['compteur'];
$timer = strtotime($diff);
$result = [$username, $tries, $timer];
$postresult = newScore($result);
var_dump($timer);
if($postresult === true):
echo "Votre score a été ajouté!";
else:
echo "Une erreur est survenue";
endif;
var_dump($result);
unset($_SESSION['timer'], $_SESSION['compteur'], $_SESSION['username']);
$goodanswer = true;
break;
elseif ($answers <= $_SESSION['findnum']):
echo "C'est plus!<br>";
......
Il se trouve que la Diff ressort en string et mes connaissances s'arrête à faire un strtotime alors que la BDD attend un Time. Donc la question est comment je peux transformer mon résultat string en valeur qu'attend la BDD.
Le résultat de mon joueur ne s'enregistre pas dans la BDD.
Voici la structure de ma BDD:
Structure de la BDD
C'est bon j'ai trouvé. Déjà j'avais une erreur dans ma BDD, le username était en int au lieu de varchar. Ensuite pour ceux que ça intéresse TIME en sql consiste à extraire l'heure, minute, seconde d'un DATE ou DATETIME.
Du coup pour l'insérer dans ma BDD j'ai fait cette requête:
function newScore(array $result) :bool{
require 'pdo.php';
$username = $result[0];
$tries = $result[1];
$timer = $result[2];
$data = [
'username' => $username,
'tries' => $tries,
'timer' => $timer,
];
$req = $bdd->prepare('INSERT INTO justeprix(username, user_try, timer) VALUES (:username, :tries, TIME(:timer))');
$req-> execute($data);
return true;
};