Bonjour à tous et à toutes
Je cherche ce qui ne va pas dans mon fichier .PHP pour avoir si possible le retour en français et l'heure par exemple 15h34 et non pas "Message sent from website on date Wednesday, August 20th, 2025, hour: 03:34 PM".

Mon .php :

<?php 
$to = "tmail@gmail.com"; 
$subject = "Messsage from website";
$headers = "Name: Form Mailer";
$forward = 1;
$location = "merci.html";

$date = date ("l, F jS, Y"); 
$time = date ("h:i A"); 



$msg = "Message sent from website on date  $date, hour: $time.\n\n\n\n"; 

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	foreach ($_POST as $key => $value) { 
		$msg .= ucfirst ($key) ." : ". $value . "\n\n"; 
	}
}
else {
	foreach ($_GET as $key => $value) { 
		$msg .= ucfirst ($key) ." : ". $value . "\n\n"; 
	}
}

mail($to, $subject, $msg); 
if ($forward == 1) { 
    header ("Location:$location"); 
} 
else { 
    echo "Merci pour votre message. Nous vous contacterons dans les plus brefs délais."; 
} 

?>

D'avance merci beaucoup.

moderation: mis en forme du sujet
Modifié par gcyrillus (22 Aug 2025 - 19:09)
Modérateur
Salut,

Il faut indiquer le fuseau horaire et la locale :


setlocale(LC_TIME, 'fr_FR');
date_default_timezone_set('Europe/Paris');
echo utf8_encode(strftime('%A %d %B %Y, %Hh%M'));


mercredi 20 août 2025, 17h26


Il me semble que utf8_encode et strftime sont dépreciés depuis php 8. Il va falloir faire des recherches dans le cas où tu utilises php 8. Ce code fonctionne quand même.
Modifié par Niuxe (20 Aug 2025 - 17:30)
Niuxe a écrit :
Salut,

Il faut indiquer le fuseau horaire et la locale :


setlocale(LC_TIME, 'fr_FR');
date_default_timezone_set('Europe/Paris');
echo utf8_encode(strftime('%A %d %B %Y, %H:%M'));


mercredi 20 août 2025, 17:26


Il me semble que utf8_encode et strftime sont dépreciés depuis php 8. Il va falloir faire des recherches dans le cas où tu utilises php 8. Ce code fonctionne quand même.


Merci Niuxe, afin de ne pas faire d'erreur , à quel endroit dois-je placer le code ?
Car j'ai fait comme cela ;
<?PHP

setlocale(LC_TIME, 'fr_FR');
date_default_timezone_set('Europe/Paris');
echo utf8_encode(strftime('%A %d %B %Y, %Hh%M'));

$to = "mail@gmail.com"; 
$subject = "Messsage de mon site";
$headers = "Name: Form Mailer";
$forward = 1;
$location = "merci.html";

$date = date ("l, F jS, Y"); 
$time = date ("h:i A"); 



$msg = "Message envoyé depuis le site Web  $date, heure: $heure.\n\n\n\n"; 

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	foreach ($_POST as $key => $value) { 
		$msg .= ucfirst ($key) ." : ". $value . "\n\n"; 
	}
}
else {
	foreach ($_GET as $key => $value) { 
		$msg .= ucfirst ($key) ." : ". $value . "\n\n"; 
	}
}

mail($to, $subject, $msg); 
if ($forward == 1) { 
    header ("Location:$location"); 
} 
else { 
    echo "Merci pour votre message. Nous vous contacterons dans les plus brefs délais."; 
} 

?>

Et j'obtiens cela : mercredi 20 août 2025, 17h45 au lieu du retour vers mon fichier merci.html
Modifié par gcyrillus (22 Aug 2025 - 19:09)
Bonjour, avant la fonction header() vous ne pouvez avoir aucun retour au navigateur (même pas un espace).
Lire la doc https://www.php.net/manual/fr/function.header.php
Pour que cela fonctionne supprimer le echo avant le header().

PS : exit(); après un header() affin d'éviter la poursuite du code.

>> à quel endroit dois-je placer le code ?
A l'endroit ou vous souhaitez qu'il s'affiche.
casper2 a écrit :
à quel endroit dois-je placer le code ?
A l'endroit ou vous souhaitez qu'il s'affiche.


casper2, merci, mais je ne souhaite pas qu'il s'affiche, mais que dans le retour sur ma boite mail j'ai les bonnes heures "Messsage du site xxx xxx xxx
Boîte de réception
adresse@ma.il
19:17 (il y a 0 minute)
À moi
Ce que je reçois:
Message envoyé depuis le site Web Wednesday, August 20th, 2025, heure: ."

Ce que je souhaite, Message envoyé depuis le site Web Mercredi, 20 août,2025, heure 19h25
Modifié par gcyrillus (22 Aug 2025 - 19:08)
Bonsoir,
>> merci, mais je ne souhaite pas qu'il s'affiche
La c'est contradictoire, vous dite que vous ne souhaitez pas qu'il s'affiche mais qu'il s'affiche quand même dans le message du mail que vous recevez!!
Tout cela me fais dire que vous ne comprenez pas ce que vous écrivez.
Solution : Remplacer le code qui génère la date en anglais par celui qui génère le code de la date en français.

PS : J'avais bien compris ce que vous vouliez faire.
Re bonsoir, comme Niuxe la indiqué ce code est déprécié en PHP8+.
Sur base de cette FAQ je vous propose le code suivant qui formate la date en français et suivant le pattern souhaité.


$now = new DateTime();
$metteurEnForme = new IntlDateFormatter(
    'fr',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Paris',
    null, 
    "EEEE',' d MMMM yyyy', heure' H'h'mm"
);
echo $metteurEnForme->format($now) ; // Affiche: mercredi, 20 août 2025, heure 23h15 

A vous de modifier le format si vous souhaitez un autre.
Testé sous PHP 8.4.0 Voir la doc sur php.net si vous ne comprenez pas les fonctions.
Modifié par casper2 (20 Aug 2025 - 23:29)
casper2 a écrit :
Tout cela me fais dire que vous ne comprenez pas ce que vous écrivez.
Solution : Remplacer le code qui génère la date en anglais par celui qui génère le code de la date en français.
PS : J'avais bien compris ce que vous vouliez faire.


Désolé casper2, c'est vrai que je ne suis pas du tout dans ma zone de confort et j'ai beaucoup de mal à formuler ma demande. Et je n'ai toujours pas trouvé ou et comment je dois placer le code que tu m'a envoyé dans mon fichier .PHP
Merci
Modifié par BruChri (21 Aug 2025 - 07:55)
Bonjour, c'est la variable $msg qui contient le corps du message du mail que vous recevez. Donc en remplacement de la ligne qui initialise la variable $msg :


// Le code qui initialise vos variables pour l'envoie du mail... 

$now = new DateTime();
$metteurEnForme = new IntlDateFormatter(
    'fr',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Paris',
    null, 
    "EEEE',' d MMMM yyyy', heure' H'h'mm"
);
$msg = "Message envoyé depuis le site Web  {$metteurEnForme->format($now)}\n\n\n\n";
// Le reste du code.... 

Devrait donner le résultat voulu.
Cordialement,
XXXXX
08:36 (il y a 0 minute)
À moi

Message sent from website on date jeudi, 21 août 2025, heure 8h36

Name : papy Nono

Email : bruno@xxxxxxx.fr

Phone : 0600000000

Type : Réservation création

Message : Merci casper2

Merci casper2
Modifié par gcyrillus (22 Aug 2025 - 19:10)
Désolé de mon retour.
J'ai ce soucis de minuscule avec accent sur mon mail de retour.
Message envoyé depuis le site Web le jeudi, 21 août 2025, heure 12h00

Nom : Martin Dupont

Email : mail@gmail.com

Téléphone : 0xxxxxxxxxx

Type : Réservation création

Message : merci

Modifié par gcyrillus (22 Aug 2025 - 19:13)
Bonjour, et cela ne le faisais pas avant? Votre mail est ou format texte. Je pense qu'il failles indiquer les $headers avec un charset UTF-8 et le passer en HTML. Voir la doc de mail().
https://www.php.net/manual/fr/function.mail.php
https://stackoverflow.com/questions/7266935/how-to-send-utf-8-email

Si vous n'arrivez pas à définir les $headers comme indiqué je vous indiquerais ce soir comment faire (si quelqu'un d'autre ne la pas fait entre temps car je dois m'absenter.)
casper2 a écrit :
Bonjour, et cela ne le faisais pas avant? Votre mail est ou format texte. Je pense qu'il failles indiquer les $headers avec un charset UTF-8 et le passer en HTML. Voir la doc de mail().
https://www.php.net/manual/fr/function.mail.php
https://stackoverflow.com/questions/7266935/how-to-send-utf-8-email

Si vous n'arrivez pas à définir les $headers comme indiqué je vous indiquerais ce soir comment faire (si quelqu'un d'autre ne la pas fait entre temps car je dois m'absenter.)


Merci de ton aide casper2.
J'ai parcouru les deux liens de docs, mais bon je suis toujours complètement perdu.
Sachant que le fichier contact.html contient
<meta charset="utf-8">

Dois-je dans le fichier mailer.php rajouter
$headers = "Content-Type: text/html; charset=UTF-8";
?
Modifié par BruChri (21 Aug 2025 - 15:30)
Bonsoir, oui avec la définition de $headers comme vous l'indiquez dans votre dernier message et en remplacement de la ligne qui défini $headers dans votre premier code.

Pour l'utiliser il faut l'ajouter en quatrième paramètre de la fonction mail(), comme ceci :

mail($to, $subject, $msg , $headers);
Merci casper2
voilà le nouveau code mailer.php:
<?PHP

$to = "mail@gmail.com"; 
$subject = "Messsage du site xxxxx";
$headers = "Content-Type: text/html; charset=UTF-8";
$forward = 1;
$location = "merci.html";

$date = date ("l, F jS, Y"); 
$time = date ("h:i A");

$now = new DateTime();
$metteurEnForme = new IntlDateFormatter(
    'fr',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Paris',
    null,
    "EEEE',' d MMMM yyyy', heure' H'h'mm"
);

$msg = "Message envoyé depuis le site Web le {$metteurEnForme->format($now)}\n\n\n\n";   

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	foreach ($_POST as $key => $value) { 
		$msg .= ucfirst ($key) ." : ". $value . "\n\n"; 
	}
}
else {
	foreach ($_GET as $key => $value) { 
		$msg .= ucfirst ($key) ." : ". $value . "\n\n"; 
	}
}

mail($to, $subject, $msg, $headers); 
if ($forward == 1) { 
    header ("Location:$location"); 
} 
else { 
    echo "Merci pour votre message. Nous vous contacterons dans les plus brefs délais."; 
} 

?>


Et voilà le résultat:
xxxxx
07:18 (il y a 3 minutes)
À moi

Message envoyé depuis le site Web le vendredi, 22 août 2025, heure 7h18 Nom : HAGUE Prénom : Bruno Email : mail@gmail.com Téléphone : 0123456789 Type : Réservation création Message : télévision en route et téléphone
…

[Message tronqué]  Afficher l'intégralité du message


Au lieu de cette disposition:
xxxxx
04:55 (il y a 2 heures)
À moi

Ce message a été supprimé. Restaurer le message
Message envoyé depuis le site Web le vendredi, 22 août 2025, heure 4h55




Nom : 1

Prénom : 1

Téléphone : 1

Email : 1

Message : 1

Type : Réservation création


…

[Message tronqué]  Afficher l'intégralité du message


Fini le problème d'accent, mais pas bon la disposition.

Je pense avoir trouvé:
$to = "mail@gmail.com"; 
$subject = "Messsage du site xxxx";
$headers = "Name: Form Mailer; Content-Type: text/html; charset=UTF-8";
$forward = 1;
$location = "merci.html";


Merci à tous pour votre aide.
Modifié par gcyrillus (22 Aug 2025 - 19:12)
ça m'a l'air tout bon:
xxxx
07:35 (il y a 3 minutes)
À moi

Message envoyé depuis le site Web le vendredi, 22 août 2025, heure 7h35



Nom : Dupont

Prénom : martin

Email : mail@gmail.com

Téléphone : 0xxxxxxxxxx

Type : Réservation création

Message : on y arrivera j'en suis sur. la télévision et le téléphone sont présents


…

[Message tronqué]  Afficher l'intégralité du message


A bientôt et merci.
Modifié par gcyrillus (22 Aug 2025 - 19:16)
L'IA Alice-Beauty, il faut corriger tes fautes de participe passé, placer les virgules au bon endroit et ajouter un "que" après "pense".
ChatGPT, ça ose tout, c'est à ça qu'on le reconnaît Smiley biggrin