Bonjour,

Je rencontre un petit problème avec mon code.

Ce que je fais

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>";

            ......

Ce que je veux

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.

Ce que j'obtiens

Le résultat de mon joueur ne s'enregistre pas dans la BDD.
Voici la structure de ma BDD:
Structure de la BDD

1 réponse


kurdtkobane
Auteur
Réponse acceptée

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;
};