[RESOLU] Probleme timestamp

Eléphant du PHP | 345 Messages

30 oct. 2021, 13:57

Bonjour,
Je sèche un peu sur ce sujet là et ne trouve pas la bonne écriture peut-etre?
$lastconnexion = strtotime($lastconnexion);
$date_jour = date('Y-m-d- h:i:s');
$date_jour = time();

while(($date_jour !== $lastconnexion+259200 AND (vacance =='ON'))
	{
		header('Location:vacance_OK.html');
		exit;
	}
Il s'agit de bloquer la connexion à un membre déclaré en vacances pendant 72 heures minimum.
($lastconnexion est déclaré en table avec DATETIME)

finipe_
Invité n'ayant pas de compte PHPfrance

30 oct. 2021, 16:38

Il y a un souci dans date('Y-m-d- h:i:s'); : un tiret en trop après d

finipe_
Invité n'ayant pas de compte PHPfrance

30 oct. 2021, 16:42

La variable $date_jour est affectée deux fois de suite, donc la ligne $date_jour = date('Y-m-d- h:i:s'); est de toute façon inutile.

Ensuite, pour comparer deux timestamps, il vaut mieux utiliser une inégalité je pense. Dans ce cas là, vous avez une boucle while qui semble infinie.

Eléphant du PHP | 345 Messages

31 oct. 2021, 18:09

Ok pour la variable $date_jour qui est redondante.
Pour la suite, le !== est bien une négation, non?

"Tant que la date du jour n'est pas égale à $lastconnexion +(équivalent de 72 heures en secondes )
header etc.."

Eléphant du PHP | 345 Messages

31 oct. 2021, 18:18

oups, avec le $ accolé à vacance et les parenthèses adéquates ça semble plus cohérent
$lastconnexion = strtotime($lastconnexion);
$date_jour = time();
while(($date_jour !== $lastconnexion+259200) AND ($vacance =='ON'))
	{
		header('Location:vacance_OK.html');
		exit;
	}
J'attends donc demain (les 72 heures écoulées) pour confirmer que c'est OK :P

Eléphant du PHP | 337 Messages

31 oct. 2021, 22:25

Les parenthèses ne sont pas un problème pour l'opérateur logique AND dans ce cas.
D'autre part, le !== est effectivement un test de l'inégalité, mais qui teste en plus le type de variable.

Donc si tu utilises !== au lieu de != tu dois t'assurer que $date_jour et $lastconnexion+259200 seront exactement du même type.
Auquel cas, ajouter un intval() pour chaque semble plus sûr.

Concernant l'inégalité, c'est pas nécessairement la différence : si 2 != 3, ça ne signifie pas pour autant que 2 > 3

Dernière chose : la boucle while est inutile. Un simple "if" est suffisant pour tester cela.

Eléphant du PHP | 345 Messages

10 nov. 2021, 00:27

Nouveau test en cours avec if au lieu de while...

Eléphant du PHP | 337 Messages

10 nov. 2021, 01:18

Il faut aussi que tu modifies le !== avec un > parce que sinon ta condition sera toujours vraie, sauf quand $date_jour sera parfaitement égal (à la seconde près) à $lastconnexion+259200.

La condition sera donc plutôt :

Code : Tout sélectionner

if($date_jour > $lastconnexion+259200) { header('Location: vacance_OK.html'); exit; }

C'est ce que je disais en soulignant que l'inégalité n'est pas la même chose que la différence.

Eléphant du PHP | 345 Messages

13 nov. 2021, 01:42

Oui, c'est ce que j'ai modifié ce jour car ça ne fonctionnait pas!
$lastconnexion = strtotime($lastconnexion);
$date_jour = time();
if($date_jour < $lastconnexion+259200 && $vacance ==='ON')
	{
		header('Location:vacance_OK.html');
		exit;
	}