8768 sujets

Développement web côté serveur, CMS

Bonjour, j'ai un formulaire qui envoi son contenu par mail, dont voici le code :
<p>Vous avez des questions, besoin de renseignements, n'hésitez pas à me contacter via ce formulaire.</p>
            <form method="POST">
                <label for="name">Votre nom et prénom :</label> <br>
                <input type="text" name="name" required><br>
                <label for="email">Votre email :</label><br>
                <input type="email" name="email"><br>
                <label for="subject">Sujet :</label><br>
                <input type="text" name="subject" required><br>
                <label for="message">Votre message :</label><br>
                <textarea name="message"></textarea><br>
                <input class="envoyer" type="submit" value="Envoyer">
            </form>
        
            <?php
    if (isset($_POST['message'])) {
        $retour = mail('destinataire@mondomaine.fr', $_POST['subject'], $_POST['message'], 'From: contact@lmondomainer.fr' . "\r\n" . 'Reply-to: ' . $_POST['email']);
        if($retour)
            echo '<p style="color:red">"Votre message a été envoyé avec succès, merci".</p>';
    }
    ?>

Cela fonctionne, mais le premier souci, il me mets des codes à la place des lettres accentués :
=C3=A9  pour  é


et ensuite comment je peux faire pour vider complétement le formulaire pour éviter le renvoi
lorsque je veux réactualiser la page ? voici ce qu'il me mets
Pour afficher cette page, les informations précédemment transmises par Firefox doivent être renvoyées. Ceci répétera toute action (telle qu’une recherche ou un ordre d’achat) entreprise précédemment.


Merci.
Bonsoir,

Pour ta première question, tu reçois en fait le message encodé au format quoted-printable. Tu peux essayer deux choses:
1. <form action="..." enctype="text/plain"> (pas sûr que ça marche, j'ai un doute, peut-être que ça dépend du client mail utilisé pour envoyer le message et que tu ne peux pas y faire grand chose)
2. IL doit y avoir une fonction en php avec un nom du type quoted_printable_decode que tu peux appliquer sur $_POST['message'] (ce n'est peut-être pas le nom exact)

Pour ta deuxième question, une des solutions les plus simples et les plus communes est de rediriger l'utilisateur vers une autre page.
header("Location: ...");
Merci QuentinC pour ta réponse, pour le
header ('location:.....')
j'y avait pensé, le formulaire est dans un modal, peut être envoyer le location sur l'adresse d'une deuxième modal avec la réponse comme quoi le mail est bien partie ? je vais tester et vous tenir au courant, si d'autres personnes on d'autres idées je prends.
Re, du coup, j'ai étudié plusieurs solutions, la meilleurs reste un envoi
mail()
au format html et non en format brut. Voici le code

    <div id="modal" class="modal">
        <div class="modal_content">
            <a href="#close" class="close">X</a>
            <h3 class="text">Contact</h3>
            <p>Vous avez des questions, besoin de renseignements, n'hésitez pas à me contacter via ce formulaire.</p>
            <form method="POST">
                <label for="name">Votre nom et prénom :</label> <br>
                <input type="text" name="name" required><br>
                <label for="email">Votre email :</label><br>
                <input type="email" name="email"><br>
                <label for="subject">Sujet :</label><br>
                <input type="text" name="subject" required><br>
                <label for="message">Votre message :</label><br>
                <textarea name="message"></textarea><br>
                <input class="envoyer" type="submit" value="Envoyer">
            </form>

            <?php
    if (isset($_POST['message'])) {
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
        $headers .= 'From: contact@mondomaine.fr' . "\r\n";
        $headers .= 'Reply-to: ' . $_POST['email'];

        $message = '<p><b><u>Envoyé par :</u></b><br>' . $_POST['name'] . '<p>
        <p><b><u>Sujet :</u></b><br>' . htmlspecialchars($_POST['subject']) . '<p>
       <p><b><u>Message :</u></b><br>' . nl2br(htmlspecialchars($_POST['message'])) . '</p>';

        $retour = mail('destinataire@mondomaine.fr', 'Ce message provient du site "mondomaine.fr"', $message, $headers);
        
        if ($retour) {
            echo '<p style="color:red">"Votre message a été envoyé avec succès, merci".</p>';

        } 
        
        else {
            echo '<p style="color:red">"Une erreur est survenu, votre message n\'a pas été envoyé.</p>';
        }
    }

    ?>


De plus la fonction "htmlspecialchars" protège un peu plus en cas d'attaque, si vous avez d'autre solutions coté sécurité je suis preneur.

Bon maintenant, il faut que je m'attaque au deuxième problème une solution en php ?
QuentinC a écrit :
Bonsoir,
Pour ta deuxième question, une des solutions les plus simples et les plus communes est de rediriger l'utilisateur vers une autre page.
header("Location: ...");


re, je pensais enregistré la réponse avec une session, genre ceci :

$reponsePositive = '<p style="color:red">"Votre message a été envoyé avec succès, merci".</p>';
$reponseNegative = '<p style="color:red">"Une erreur est survenu, votre message n\'a pas été envoyé.</p>';

        $_SESSION['retour'] = $retour;

        if ($retour) {
            echo $reponsePositive;
        } 
        else {
            echo $reponseNegative;
        }
    }

j'ai vu que tu traitais à peu près le même code https://forum.alsacreations.com/topic-1-73113-1-Eviter-le-renvoi-automatique-dun-formulaire-.html
help please

Edit :
J'ai fais un truc de psychopathe, un truc tout con....
<a href="immoprojet.php" class="close">X</a>

Et du coup quand la personne ferme le modal, ça réactualise la page.

je ne sais pas si c'est conventionnelle, mais ça fonctionne ^^

Votre avis (amis développeur) serait le bien venu, merci.
Modifié par ricem (16 Jul 2024 - 15:23)
Bonsoir,

a écrit :
Et du coup quand la personne ferme le modal, ça réactualise la page.
je ne sais pas si c'est conventionnelle, mais ça fonctionne ^^


Tu auras quand même l'avertissement du navigateur si tu rafraîchis la page avec F5 sans cliquer sur le bouton pour fermer la pop-up.
C'est donc un peu de la magouille, et ce n'est pas fiable à 100%.

Ce qui est dit dans le post de 2014 que tu as retrouvé est toujours valable.

Tiens d'ailleurs, étrange, ce lien est cassé, j'obtiens un message bizarre de Chrome comme quoi il est bloqué. J'ai dû copier-coller l'URL manuellement pour l'ouvrir.


ET au fait, évite les up, c'est mal vu, surtout après seulement 2 ou 3 jours.
La fréquentation des forums n'est plus ce qu'elle était il y a 10 ou 20 ans, et c'est assez général, pas seulement ici. Ton sujet ne va plus se perdre si rapidement.