Envoi de formulaire

Petit nouveau ! | 2 Messages

04 mai 2021, 11:21

Bonjour à tous et toutes, je me présente rapidement, Mike 40ans de Belgique, je découvre petit à petit le PHP et j'ai créé mon premier script pour envoyer un formulaire de contact par mail.

Après avoir chargé le site, je parviens à envoyer le formulaire, je le reçois également mais deux questions se posent à moi :

1°) lorsque le formulaire est complété, je ne comprends pas comment faire pour que le script dise "Merci (éventuellement récupérer le prénom de l'expéditeur), votre formulaire a bien été envoyé. et d'y ajouter un bouton de retour à la page d'accueil

2°) seconde question, quelqu'un pourrait-il également m'aider pour l'utilisation de la fonction htmlspecialchars car j'ai fait plusieurs manipulations et essais et rien ne fonctionne :/ Je suis un simple débutant en la matière, veuillez m'excuser du manque de connaissances en PhP :oops: :P

Merci d'avance pour vos réponses et votre aide

Voici la copie de mon script fonctionnel (j'ai volontairement remplacé l'adresse mail par des *** pour des raisons de sécurité comme vous vous en doutez) :
<?php

    $to = "[email protected]***.be";
    $from = $_REQUEST['email'];
    $name = $_REQUEST['name'];
	$fname = $_REQUEST['fname'];
    $number = $_REQUEST['number'];
    $cmessage = $_REQUEST['message'];

    $headers = "From: $from";
	$headers = "From: " . $from . "\r\n";
	$headers .= "Reply-To: ". $from . "\r\n";
	$headers .= "MIME-Version: 1.0\r\n";
	$headers .= "Content-Type: text/html; charset=utf-8\r\n";

    $subject = "Message du site *****.";

    $logo = 'images/logo2.png';
    $link = '#';

	$body = "<!DOCTYPE html><html lang='en'><head><meta charset='UTF-8'><title>Express Mail</title></head><body>";
	$body .= "<table style='width: 100%;'>";
	$body .= "<thead style='text-align: center;'><tr><td style='border:none;' colspan='2'>";
	$body .= "<a href='{$link}'><img src='{$logo}' alt=''></a><br><br>";
	$body .= "</td></tr></thead><tbody><tr>";
	$body .= "<td style='border:none;'><strong>Nom:</strong> {$name}</td>";
	$body .= "<td style='border:none;'><strong>Prénom:</strong> {$fname}</td>";
	$body .= "<td style='border:none;'><strong>Email:</strong> {$from}</td>";
	$body .= "<td style='border:none;'><strong>Téléphone:</strong> {$number}</td>";
	$body .= "</tr>";
	$body .= "<tr><td style='border:none;'><strong>Message:</strong> {$csubject}</td></tr>";
	$body .= "<tr><td></td></tr>";
	$body .= "<tr><td colspan='2' style='border:none;'>{$cmessage}</td></tr>";
	$body .= "</tbody></table>";
	$body .= "</body></html>";

    $send = mail($to, $subject, $body, $headers);

?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10666 Messages

11 mai 2021, 13:14

Salutations Mike 40ans de Belgique et bienvenue sur phpfrance ! :)

1) le script que tu nous présentes récupères les informations envoyées par l'utilisateur pour les inclure dans l'entête et le corps du mail qui est envoyé. Rien n'est affiché à l'écran, mais tu peux parfaitement utiliser l'instruction echo pour afficher un message, où ajouter celui-ci en dehors des balises php.

Par exemple en vérifiant le succès de l'envoi du mail :
if ($send)
   echo '"Merci ' . $name . ', votre formulaire a bien été envoyé.';
else
   echo 'Oh la la... ça n\'a pas fonctionné'.
2) la fonction htmlspecialchars permet de convertir les caractères spéciaux d'une chaine en entités HTML afin qu'ils ne soient pas interprétés par le navigateur (ou le client de messagerie) et éviter ainsi des injections de code. C'est à dire empêcher l'utilisateur de t'envoyer un code potentiellement dangereux qui serait exécuté malgré toi (je pourrais par exemple inclure une ligne de code javascript à la place de mon nom et celle-ci s'exécuterait au moment où tu ouvres le mail).

Il faut donc utiliser htmlspecialchars lorsque tu as besoin d'afficher un élément (dans ton mail ou à l'écran) dont tu ne maitrise pas le contenu et qui pourrait être préjudiciable au bon affichage de ta page, voire à la sécurité.

Tu peux ainsi écrire $name = htmlspecialchars($_REQUEST['name']) pour protéger celui-ci avant de l'inclure dans ton mail à l'écran pour la confirmation du (1)

En revanche, il ne faut pas l'utiliser sur l'email (il y a d'autre façon pour valider que la chaine est bien une adresse mail), car tu risques d'altérer son contenu alors que tu as besoin de conserver son format brut pour l'utiliser dans les entêtes de ton mail. Mais tu peux néanmoins le protéger dans le corps du mail :
$body .= "<td style='border:none;'><strong>Email:</strong> " . htmlspecialchars($from) . "</td>";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

11 mai 2021, 18:24

@Ryle,

Je te remercie beaucoup pour cette réponse, je vais me remettre sur cela demain, j'avoue que je sature un peu niveau codage depuis 1 mois non stop à coder je commence à avoir mal au crâne, surtout que de base je m'occupe principalement de maintenance, le codage c'est pour mon site et pour rendre service à 2 amis qui veulent que je leur crée leurs sites également à moindre coût, j'ai beaucoup cherché et franchement tes informations sont claires et précises, je comprends nettement mieux que ce que j'avais trouvé sur certains forums/cours qui étaient un peu du chinois pour moi lol

Je vais tester cela demain et reviens vers toi pour te confirmer que tout est bien fonctionnel :)