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 = "team.0cool@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 Niuxe (20 Aug 2025 - 17:20)
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 = "team.0cool@gmail.com"; 
$subject = "Messsage du site Pic & Coud 2.0";
$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 BruChri (20 Aug 2025 - 17:50)
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
sh-174456840@eu.hosting-webspace.io
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 BruChri (20 Aug 2025 - 19:26)
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,
sh-174456840@eu.hosting-webspace.io
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
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 : Bruno HAGUE

Email : bruno@hague.fr

Téléphone : 0695541876

Type : Réservation création

Message : merci
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.)