[RESOLU] Augmenter automatiquement une heure en fonction d'un champ de formulaire

Eléphanteau du PHP | 17 Messages

08 nov. 2020, 13:54

Bonjour à tous,
mon titre n'est pas très clair , désolé :D
Je pense que les spécialistes trouveront ça facile mais moi je coince un peu :(
J'ai un formulaire html avec un champ date (date et heure du jour) qui se rempli automatiquement avec un php echo date("Y-m-d H:i:s").
L'utilisateur choisi via un champ type bouton radio le délai de livraison qu'il souhaite (1 heure, 1/2 journée, immédiatement).
J'ai un autre champs avec la date et l'heure souhaitée, j'aimerais que ce champ affiche automatiquement la date et l'heure souhaitee en fonction du choix de l'utilisateur.
Exemple si l'utilisateur choisi 1 heure alors l'heure souhaitée sera champs date + 1 heure, si il choisi le délai 1/2 journée alors l'heure souhaitée sera champs date + 4h et rien si c'est immédiatement.

voici le code:

Code : Tout sélectionner

<input type="text" name="horodate_cde" value="<?php echo date("Y-m-d H:i:s"); ?>"><br/> <input type="text" name="horodate_souhaitee" value="DATE AU DESSUS + DELAI CHOISI"> <br/><br/> <FONT size="2pt">Degré d'urgence:*</FONT> <br/> <input type="radio" name="lieu" value="1Heure"/>1 heure <input type="radio" name="lieu" value="1/2Journee"/>1/2 journée <input type="radio" name="lieu" value="Immediat"/>Immédiat
Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 nov. 2020, 17:59

Tu veux afficher cet horaire en direct à l'utilisateur au moment où il sélectionne son degré d'urgence ou c'est uniquement pour le traitement que tu veux faire derrière ?

Si c'est pour l'afficher immédiatement alors ce n'est pas en PHP mais plutôt en javascript qu'il faut le faire.
Il existe une super librairie JS qui permet de manipuler facilement des dates et heures : https://momentjs.com/

Si c'est pour ton traitement côté serveur et donc en PHP tu veux le faire facilement avec la fonction strtotime(), ce qui pourrait donner : strtotime($horodate_cde." +1 hour" ) par exemple
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 17 Messages

09 nov. 2020, 19:10

Salut et merci de t'intéresser à mon cas ;-)
C'est un traitement derrière, l'utilisateur ne verra pas ce calcul.

Etant débutant en php j'avoue que je ne sais pas comment utilisé la fonction strtotime() ni comment je dois réaliser le code.
Je vais faire des recherches.

Eléphanteau du PHP | 17 Messages

11 nov. 2020, 22:02

Bonjour à tous,

après pas mal de recherches je reviens vers vous :D

Je me suis intéressé à la réception des données de mon formulaire plutôt qu'au formulaire lui même.

Dans le 1er champ je récupère la date et l'heure, comme cette donnée n'est pas entrèe manuellement je l'ai intégré directement dans le $POST:

Code : Tout sélectionner

if(isset($_POST['horodate_cde'])) $horodate_cde=$_POST['horodate_cde']; else $horodate_cde="Y-m-d H:i:s";


Je récupère ensuite la donnée de mes boutons radio:

Code : Tout sélectionner

if(isset($_POST['urgence'])) $urgence=$_POST['urgence']; else $urgence="";


Et au final ce que j'aimerais c'est additionner ces 2 données comme ceci:

Code : Tout sélectionner

if(isset($_POST['horodate_souhaitee'])) $horodate_souhaitee=$_POST['horodate_souhaitee']; else $horodate_souhaitee="$horodate_cde+$urgence";

Je sèche :D
Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 nov. 2020, 17:31

Je t'ai donné une piste dans mon premier message ;-)
Il faut que tu utilises la fonction strtotime :
https://php.net/strtotime
strtotime($horodate_cde." +1 hour" )
Là j'ai mis +1 hour, mais à toi d'adapter en fonction de l'urgence
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 17 Messages

12 nov. 2020, 20:39

Je débute :? :D
J'ai lu la page sur le strtotime.
J'ai intégré ça dans mon form.php qui récupère mes données de formulaire

Code : Tout sélectionner

$horodate_souhaitee = strtotime($horodate_cde." +$urgence" );
Et là je bloque, je n'arrive pas à convertir ce strtotime en date et heure.
J'ai lu pas mal de chose sur le timestamp mais je en comprends pas bien comment l'utiliser
Modifié en dernier par comardud le 12 nov. 2020, 21:07, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 nov. 2020, 20:45

strtotime() te renvoie un timestamp qui est le format machine le plus commun pour exprimer une date (mais il n'est pas très lisible, certe ;-) )

Pour debuguer tu peux convertir rapidement un timestamp via ce site : http://timestamp.fr

Et en PHP si tu veux avoir un timestamp dans un autre format, tu peux utiliser la fonction date() en indiquant ton timestamp en 2è paramètre.

Exemple :
$horodate_cde = '2020-11-12 19:30:00';
echo date('Y-m-d H:i:s', strtotime($horodate_cde.' +1 hour'));
// va te donner  2020-11-12 20:30:00
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 17 Messages

12 nov. 2020, 21:08

J'ai modifié mon post au dessus ;-)

En prenant ton code voilà ou j'en suis

Code : Tout sélectionner

$horodate_cde = date("Y-m-d H:i:s"); $horodate_souhaitee = date('Y-m-d H:i:s', strtotime($horodate_cde.' +1 hour')); echo $horodate_souhaitee;
Je commence doucement à comprendre le fonctionnement :D le echo me sert juste à visualiser ce que je fais.

Me reste à changer le +1 hour par ma variable $urgence

J'ai bon ? :)
Modifié en dernier par comardud le 12 nov. 2020, 21:54, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 nov. 2020, 21:54

Si $horodate_cde est toujours la date/heure courante alors, tu peux même faire + simple en utilisant le mot clé "now" dans strtotime() :
$horodate_souhaitee = date('Y-m-d H:i:s', strtotime('now +1 hour'));
echo $horodate_souhaitee;
Et effectivement tu as juste à changer le nombre d'heures en fonction de l'urgence.
Si tu n'utilises pas ailleurs la valeur de tes boutons radio urgence, tu peux directement mettre le nombre d'heures 0 / 1 / 4 en value que tu vas ensuite additionner
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 17 Messages

12 nov. 2020, 22:08

La syntaxe en PHP c'est compliqué :(

quelle est la bonne syntaxe ?

Code : Tout sélectionner

$horodate_souhaitee = date('Y-m-d H:i:s', strtotime('now' , $urgence));

Eléphanteau du PHP | 17 Messages

12 nov. 2020, 22:31

En faisant ça ça marche :D

Code : Tout sélectionner

$horodate_souhaitee = date('Y-m-d H:i:s', strtotime($horodate_cde. " + $urgence hour"));

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 nov. 2020, 23:27

Gagné !

En bonus, je te donne la façon de faire la + propre :
$horodate_souhaitee = date('Y-m-d H:i:s', strtotime('now +'.$urgence.' hour'));
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 17 Messages

13 nov. 2020, 00:21

Merci infiniment à toi pour ta patience et pour le cours PHP 🙂