Vous n'êtes pas identifié(e).
je reçois l'erreur suivante: Catchable fatal error: Object of class DateTime could not be converted to string in C:\wamp\www\Jeu_de_calcul\jeu_de_calcul.php on line 117
je suis bloqué depuis deux jours voici mon code:
/************************************** CONSTANTES *************************************/
define("MANCHES_PAR_PARTIE", 2);
define("OPERANDE1_MINI", 3);
define("OPERANDE1_MAXI", 10);
define("OPERANDE2_MINI", 2);
define("FUSEAU_HORAIRE", "Europe/Paris");
/************************************** FONCTIONS **************************************/
// Fonction de tirage au sort de l'opération de calcul
function tire_au_sort_opération() {
// tirage au sort des 2 opérandes
$opérande1 = rand(OPERANDE1_MINI, OPERANDE1_MAXI);
$opérande2 = rand(OPERANDE2_MINI, $opérande1-1);
// tirage au sort de l'opérateur
$operateurs = array ( '+', '-', '*'); // remarque : les constantes de type tableau ont été introduites par PHP 7 (possibilité non utilisée ici, car cette version du langage est encore très peu répandue)
$indice_aléatoire = rand(0,2);
$opérateur = $operateurs[$indice_aléatoire];
// contruction et renvoi de l'opération (chaîne de caractères)
$opération = "$opérande1 $opérateur $opérande2";
return $opération;
}
// Fonction d'affichage du formulaire de saisie de la réponse du joueur
function affiche_formulaire_saisie_réponse() {
echo "<form method=\"post\">\n";
// champ de saisie du résultat
echo " <label>Réponse </label>\n";
echo " <input type=\"text\" name=\"réponse_joueur\" value=\"\">\n";
// bouton de validation
echo " <input type=\"submit\" name=\"validation_réponse_joueur\" value=\"Valider\">\n";
echo "</form>\n";
}
// Fonction de calcul du résultat de la manche jouée
function calcule_et_affiche_résultat_manche($opération, $réponse_joueur) {
echo "<p>Opération : $opération</p>\n";
echo "<p>Votre réponse : ".htmlspecialchars($réponse_joueur, ENT_COMPAT, "UTF-8")."</p>\n";
eval('$résultat_opération = '.$opération.';');
if ($résultat_opération == $réponse_joueur) {
$_SESSION['score']++;
$rep=1;
echo "<p>Bravo : résultat correct !</p>\n";
}
else
{
echo "<p>Erreur : le résultat correct est $résultat_opération</p>\n";
$rep=0;
}
$_SESSION['nombre_manches']++;
if (!isset($_SESSION['sauvegarde_manches_partie']))
$_SESSION['sauvegarde_manches_partie']=array($_SESSION['nombre_manches'], $opération, $réponse_joueur, $rep);
else
array_push($_SESSION['sauvegarde_manches_partie'], $_SESSION['nombre_manches'], $opération, $réponse_joueur, $rep);
}
/********************************* PROGRAMME PRINCIPAL *********************************/
// Cas d'un premier chargement de la page ou d'une demande de nouvelle partie par le joueur :
// initialisation des variables de session
if (!isset($_SESSION['nombre_manches']) || isset($_GET['nouvelle_partie'])) {
$_SESSION['nombre_manches'] = 0;
$_SESSION['score'] = 0;
}
// Si la partie est en cours (manches restant à jouer)
if ($_SESSION['nombre_manches'] < MANCHES_PAR_PARTIE) {
echo "<h3>Manche ".($_SESSION['nombre_manches']+1)." sur ".MANCHES_PAR_PARTIE."</h3>\n";
// écran 2 : si le formulaire a été validé (bouton "Valider" cliqué)
if (isset($_POST['validation_réponse_joueur'])) {
// affichage des informations et du résultat de la manche
calcule_et_affiche_résultat_manche($_SESSION['opération'], $_POST['réponse_joueur']);
//ajout dans la variable de sauvegarde des manches
//$_SESSION['sauvegarde_manches_partie'] = "/$opération $réponse_joueur";
// si la partie est en cours : affichage d'un lien pour passer à la manche suivante
if ($_SESSION['nombre_manches'] < MANCHES_PAR_PARTIE)
echo "<p><a href=\"".$_SERVER['SCRIPT_NAME']."\">Continuer la partie</a></p>\n";
// si la partie est terminée (dernière manche jouée) :
// fin du chronométrage de la partie, puis affichage de son score final et de sa durée
else {
[color=#eb5717]$date_fin_partie = new DateTime("now", new DateTimeZone(FUSEAU_HORAIRE));
//date_format($date_fin_partie, 'Y-m-d H:i:s');
$durée_partie = $_SESSION['date_début_partie']->diff($date_fin_partie);[/color]
//date_format($durée_partie, 'H:i:s');
//$durée_partie=$durée_partie->format('%i:%s');
$score=$_SESSION["score"];
echo "<p><strong>Partie terminée<br>Score : ".$_SESSION["score"]." sur ".MANCHES_PAR_PARTIE."</strong></p>\n";
echo "<p>Durée de la partie : ".$durée_partie->format('%i min %s s')."</p>\n";
//echo '<pre>';
$sauvegarde_manches_partie=$_SESSION['sauvegarde_manches_partie'];
//print_r($_SESSION['sauvegarde_manches_partie']);
// echo '</pre>';
echo "<p><a href=\"sauvegarde_partie.php ?$date_fin_partie, $durée_partie, $score, $sauvegarde_manches_partie\">Sauvegarder la partie</a> et son score</p>\n";
unset($_SESSION['sauvegarde_manches_partie']);
}
}
// écran 1 : tirage au sort de l'opération et affichage du formulaire de saisie
else {
$opération = tire_au_sort_opération();
// stockage de l'opération courante dans la session
$_SESSION['opération'] = $opération;
echo "<p>Opération : $opération</p>\n";
affiche_formulaire_saisie_réponse();
// si c'est la première manche : début du chronométrage de la partie
if ($_SESSION['nombre_manches'] == 0){
$_SESSION['date_début_partie'] = new DateTime("now", new DateTimeZone(FUSEAU_HORAIRE));
//$_SESSION['sauvegarde_manches_partie']= '';
}
}
}
echo "<p><a href=\"".$_SERVER['SCRIPT_NAME']."?nouvelle_partie\">Commencer une nouvelle partie</a></p>\n";
?>
Voici la page sauvegarde:
<?php
// Fonction d'affichage du formulaire de saisie de la réponse du joueur
function affiche_formulaire_saisie_nom() {
echo "<form method=\"post\">\n";
// champ de saisie du résultat
echo " <label>Votre pseudonyme </label>\n";
echo " <input type=\"text\" name=\"pseudo\" value=\"\">\n";
// bouton de validation
echo " <input type=\"submit\" name=\"validation_pseudo_joueur\" value=\"Sauvegarder la partie\">\n";
echo "</form>\n";
}
function connexion_BD (){
$link = mysqli_connect("localhost", "script_php", "zh6tjPp6T56N4dbF", "exercices_php");
/* Vérification de la connexion */
if (mysqli_connect_errno()){
echo "Échec de la connexion: " . mysqli_connect_error();
exit();
}
}
function save($pseudo, $date, $durée, $score, $sauvegarde_manches_partie){
if ($link = mysqli_connect("localhost", "script_php", "zh6tjPp6T56N4dbF", "exercices_php"))
{
$pseudo=$_POST['pseudo'];
mysqli_query($link,"INSERT INTO jeudecalcul (id_partie,pseudo,date,duree,score,calculs) VALUES ('','$pseudo','$date_fin_partie','','$score','$sauvegarde_manches_partie')");
mysqli_close($link);
}
}
affiche_formulaire_saisie_nom();
include 'jeu_de_calcul.php';
include 'ressources_communes.php';
//Sauvegarde du jeu
[color=#ff3108]if (isset($_POST['validation_pseudo_joueur'])){
if (empty($_POST['pseudo']))
{
echo "Vous n'avez pas saisi de pseudonyme!</p>\n ";
echo "Veuillez saisir votre pseudonyme s'il vous plait</p>\n ";
}
else
{
$pseudo=$_POST['pseudo'];
//convertir_au_format_datetime ($date_fin_partie, $durée_partie);
save($pseudo, $date_fin_partie, $score, $sauvegarde_manches_partie);
echo "<p>Votre partie a été enregistrée sous le Pseudonyme : ".htmlspecialchars($pseudo, ENT_COMPAT, "UTF-8")."</p>\n";
}[/color]
}
echo "<p><a href=\"jeu_de_calcul.php?nouvelle_partie\">Commencer une nouvelle partie</a></p>\n";
?>
Hors ligne
Bonsoir,
Ici $_SESSION['date_début_partie'] représente une chaîne de texte contenant une valeur représentant une date. Or vous l'utilisez comme si c'était un objet (une instance de classe) via l'opérateur ->
Pour vous mettre sur la voie, il vous faut écrire un truc du genre $duree_partie=$_SESSION['date_début_partie'] - $date_fin_partie en utilisant des fonctions de temps de PHP. Je vous invite à regarder le manuel en ligne de PHP pour trouver la bonne méthode pour le faire.
Jc.
Hors ligne