Probléme de vérification d'heure

Fermé
Marlocq - 21 sept. 2011 à 11:41
 le père - 23 sept. 2011 à 11:18
Bonjour,



Je vous explique le topo. Je fais un calendrier pour des locaux avec insertion de date dans la base de donnée via un formulaire.
J'ai un soucis que je ne comprend pas trop bien au niveau des vérifications des heures. Le soucis est le suivant: j ai un local qui est occupé de 8h à 12h et je veux inséré une heure d'occupation de 15h a 18h. La 15h 18h est bloqué. C'est l'avant dernière vérification qui bloque alors qu'elle devrait juste bloqué celle qui englobe les heures d'occupation (genre 7:00 13:00)

Voici le code de vérification

nhd= nouvelle heure de départ
hd= heure de départ (ancienne)
nhf= nouvelle heure de fin
hf= heure de fin

if ( $nhd >= $hd && $nhd <= $hf ) {
echo '<div id="forminserdatelocaux">';
echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
} elseif ( $nhd == $hd ) {
echo '<div id="forminserdatelocaux">';
echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
} elseif ( $nhf >=$hd && $nhf <= $hf ){
echo '<div id="forminserdatelocaux">';
echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
} elseif ( $nhd <=$hd && $nhf >= $hf ) {
echo '<div id="forminserdatelocaux">';
echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
} elseif ( $nhf == $hf ) {
echo '<div id="forminserdatelocaux">';
echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
} else {...

15 réponses

Bonjour

Si j'ai bien compris ton problème, tu as
$nhd= 15; // nouvelle heure de départ
$hd= 8; // heure de départ (ancienne)
$nhf= 18; // nouvelle heure de fin
$hf= 12; // heure de fin

As-tu bien vérifié avec un echo que tu as les bonnes valeurs ? Parce que chez moi, le test marche.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 sept. 2011 à 12:05
essayes comme ça:

if( ($nhd <= $hd && $nhf >=$hd) || ($nhd >= $hd && $nhd < $hf) || ($nhf < $hf) ){
	echo '<div id="forminserdatelocaux">';
echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
}else{

}
0
Pour répondre à le père c'est bien ce que j'ai comme valeur et ça bloque...
0
j ai testé ta solution Alain chez moi ça ne bloque pas les cas
nhd:7:00
hd:8:00
nhf: 18:00
hf: 12:00
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ton programme marche chez moi avec les valeurs que j'ai indiquées, il n'y a aucune raison qu'il ne marche pas chez toi.
As-tu vérifié les valeurs des variables avec un echo immédiatement avant ta série de comparaisons ? Sinon, comment les as-tu vérifiées ?
Comment as tu établi que c'est la 4ème comparaison qui bloque ?
0
J'ai vérifier en faisant un echo avant les vérifications et après on ne sais jamais...
J'ai testé en mettant la 4ie vérification en commentaire et après ça les heures passait marchait après. Sinon pour la trouvé je suis partit du principe simple que c'est la seule qui parle de $nhf>= $hf.

Ce qui me semble louche c'est que la première fois que je l'avais testé ça avait marché et plus maintenant...
0
Peux-tu refaire un essai sans mettre le 4ème test en commentaire, mais en mettant 5 messages différents ("1 - Impossible..." "2 - Impossible...") etc... ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 21/09/2011 à 19:47
question bête quel format pour les heures testées (celles enregistrées $hd $hf) et celles reçues du formulaire ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 sept. 2011 à 21:15
j ai testé ta solution Alain chez moi ça ne bloque pas les cas
nhd:7:00
hd:8:00
nhf: 18:00
hf: 12:00


j'ai unj peu plus de temps ce soir et j'ai regardé ton pb de plus près et fait ce petit bout de code de test:

<?php
if(isset($_POST['envoyer'])){
	$hd=$_POST['hd'];
	$hf=$_POST['hf'];
	$nhd=$_POST['nhd'];
	$nhf=$_POST['nhf'];
	if( ($nhd <= $hd && $nhf >=$hd) || ($nhd >= $hd && $nhd < $hf) || ($nhf < $hf) ){
		echo '<div id="forminserdatelocaux">';
	echo "<p class=\"red\">Impossible d'envoyer votre demande. Le local n'est pas disponible pour aux heures demandées.</p>";
	}else{
	echo "Possible";
	}
}else{
	$hd="";
	$hf="";
	$nhd="";
	$nhf="";
}
?>
<html>
<form name="form1" method="post" action="">
HD<input type="text" name="hd" value="<?php echo $hd; ?>" />
HF<input type="text" name="hf" value="<?php echo $hf; ?>" /><br />
NHD<input type="text" name="nhd" value="<?php echo $nhd; ?>" />
NHF<input type="text" name="nhf" value="<?php echo $nhf; ?>" />
<input type="submit" name="envoyer" value="Envoyer" />

</form>
</html>


il fonctionne si on saisi les heures sous le format numérique 7 8 18 12
par contre et c'est normal qu'il ne fonctionne pas si on saisit 7:00 8:00 12:00 car ce ne sont pas des formats numériques donc pas comparables

Je répète ma question ci dessus quels sont les formats de tes heures ?
0
Bonjour Alain_42

Tu as certainement raison sur le fait que Marlocq travaille avec des heures au format 8:00 et non pas simplement 8.
Par contre, ta formule de comparaison est certainement fausse. La seule condition ($nhf < $hf) empêche de définir une nouvelle occupation qui se termine avant la fin de l'ancienne, même si elle se termine avant de début !
Je pense qu'il faut :
if (!($nhd <= $hd) && ($nhf <= $hd) || ($nhd >= $hf) && ($nhf >=$hf))) {...

négation de : les nouvelles heures de début et de fin sont toutes les deux avant l'ancien début ou toutes les deux après l'ancienne fin
0
Désoler de vous répondre si tard. Problème de pc...

Le format n'est pas en numérique mais en 8:00
0
Si tu as bien TOUJOURS 1 ou 2 chiffres pour les heures, puis le caractère : puis 2 chiffres pour les minutes, il te suffit de rajouter un '0' à gauche si la chaîne ne fait que 4 caractères. Ensuite, Tu peux comparer tes valeurs comme si elles étaient des nombres.
Sinon, il faut que tu convertisses ton heure en un nombre, mais là la conversion dépend de ce qui est permis dans les données entrées
0
Ok je vais faire le test alors puis je re-posterais ici.
0
Merci le père.
C'était bien juste ça qu'il fallait faire. Donc rajouter un zéro si on à 4 chiffre.

Merci a Alain aussi pour son aide.
0
Heureux d'avoir pu t'aider. C'était quand même une remarque d'Alain_42 au départ...

J'espère que tu as compris pourquoi ça ne marchait pas avant, pourquoi ça marche maintenant et donc à quelles conditions ça marche. Car si demain quelqu'un tape un autre format, ça ne marchera plus.
0