PHP délai en heures

Résolu/Fermé
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 - Modifié par jobouille le 16/04/2015 à 19:50
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 - 17 avril 2015 à 22:42
Bonjour à tous !
J'aimerais pouvoir faire un délai en heures à partir du moment où un membre de mon site appui sur un bouton input.
Pour simplifier tout ça voici mon programme en français :

Si btn input
$champ == 2
attendre 72heures dans $temps
FinSi

Si $temps < 24h
champ == 3
FinSi

Si 24h < $temps < 48h
$champ == 4
FinSi

Si 48h < $temps < 72h
$champ == 5
FinSi

Si $temps >= 72h
$champ == 6
FinSi


Le but de se programme étant de passer la variable $champ à 6 au bout de 72h (après l'appui de l'utilisateur sur le bouton).
Cependant même si l'utilisateur quitte la page ou éteins son ordi le temps doit défiler.

Mon programme est déjà fait. Il me manque seulement cette variable de temps que je ne sais absolument pas faire.

J'espère ne pas être trop exigent mais je débute en PHP donc ça serait juste génial si vous m'ecrivez ces quelques lignes de codes.

Merci et bonne soirée :D

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
16 avril 2015 à 20:10
Bonjour,

Le seul moyen pour toi pour "incrémenter" cette variable temps (et ce... même si l'utilisateur ferme la fenêtre...et y revient plus tard...) c'est de mémoriser ( Soit dans des COOKIES .. soit dans une Base de donnée) la date/heure à laquelle a cliqué l'utilisateur sur ce bouton...

Ainsi.. à chaque connexion sur la page ( ou son rafraichissement..) tu lis cette valeur.. tu la compares à la date de l'instant T .. et tu pourras ainsi connaitre le temps écoulé !

nb : Le souci avec les cookies.. c'est que si l'utilisateur change de PC entre temps.. le cookie n'existera pas sur cette nouvelle machine...
Je te conseilles donc d'utiliser l'insertion en base de données.


0
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10
16 avril 2015 à 22:55
Merci de votre reponse.
Effectivement, je préfère opter pour la base de donnée que pour les cookies.

Cependant, savez-vous comment faire pour savoir le jour/heure/minute au moment où il a appuyer et comparer avec les 72h a attendre ?

Je vous remercie encore de m'aider car je suis conscient que ce que je demande n'est pas forcément très pas facile a faire :/
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017
16 avril 2015 à 23:01
C'est un simple calcul ...

$datetime1 = strtotime("2015-04-10 10:00:00");
$datetime2 = strtotime("2015-04-12 15:45:00");
$interval  = abs($datetime2 - $datetime1);
$hours= round($interval / 3600);
echo "Diff =  $hours heures "; 



avec $datetime1 à remplacer par la donnée que tu auras stocké en Base de données
et $datetime2 à remplacer par l'heure actuelle (au momment de l'affichage de ta page)
$now = date('Y-m-d H:i:s');
$datetime2 = strtotime($now);
0
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10
17 avril 2015 à 18:46
Parfait merci beaucoup !

J'aurais cependant une dernière question.
J'ai créer une nouvelle colonne dans ma basse de donnée que j'ai appelée champ1T de type DATETIME.

Il faut donc que la date soit enregistrée au moment où l'utilisateur appui sur le bouton afin de soustraire après etc.

J'ai essayé ceci mais ça ne fonctionne pas :/

			<form method="POST" action="">
			<input type="submit" name="test" value="TEST" />
			</form>

			<?php
			if(isset($_POST['test']))
			{
				$champ1T =  $bdd->exec('UPDATE membres SET champ1T = $now WHERE id = '.$_SESSION['id']);
				echo 'OK';
			}

			$datetime1 = strtotime("2015-04-18 19:00:00");
			$now = date('Y-m-d H:i:s');
			$datetime2 = strtotime($now);
			
			$interval  = abs($datetime2 - $datetime1);
			$hours= round($interval / 3600);
			echo "Diff =  $hours heures ";


			?>


Encore merci :)
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 17/04/2015 à 21:43
Dans un premier temps.. il faut que tu acquières quelques bonnes "pratiques"..
1 - On sort la requête de son exécution
2 - Lorsqu'une requête ne semble pas fonctionner... on en fait un ECHO puis on la teste en direct dans sa BDD
3 - On utilises de préférence les doubles-quotes pour encadrer la requête
4 - On utilise les simple-quotes pour entourer les variables DANS les requêtes.
5 - On essaye de placer le maximum de code php AVANT le html....

Maintenant concernant ton code actuel....il y a plusieurs erreurs....
- Tu utilises la variable $now dans la requête.. mais cette variable est déclarée seulement après....
- Tu n'as pas mis les variables entre quotes dans la requête


Bref... cela donne :

<?php
$datetime1 = strtotime("2015-04-18 19:00:00");
$now = date('Y-m-d H:i:s');
$datetime2 = strtotime($now);
   
$interval  = abs($datetime2 - $datetime1);
$hours= round($interval / 3600);

$id = isset($_SESSION['id'])?$_SESSION['id']:NULL;
if(isset($_POST['test'])){
 $sql = "UPDATE membres 
             SET champ1T = '$now' 
             WHERE id = '$id' ";
 $champ1T =  $bdd->exec($sql) or die(print_r($db->errorInfo(), true));
  echo " UPDATE - OK";
}


echo "Diff =  $hours heures ";

?>
<form method="POST" action="">
  <input type="submit" name="test" value="TEST" />
</form>
0
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
17 avril 2015 à 22:17
Ok merci beaucoup, la date a bien été sauvegardée dans la base de donnée.

Cependant pourquoi mettre une date "prédéfinie" dans $datetime1 ?
Car la différence doit être entre la date actuelle ($datetime2) et la date de la base de donnée.

Qu'est ce qui faudrait changer dans cette ligne "$datetime1 = strtotime("2015-04-18 19:00:00");" pour que $datetime1 prennent la valeur de la base de donnée ?

Merci encore de votre aide ! :D
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017
17 avril 2015 à 22:31
Je n'ai pas codé la récupération en bdd.... il faut le faire !
0
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
17 avril 2015 à 22:42
Oui c'est bon j'ai réussi, c'était pas grand chose :p

Bon ben je vais terminer mon programme et encore merci pour votre aide !
Vous m'avez beaucoup aidé ! :D

Bonne soirée
0