[RESOLU] Création d'un formulaire de contact

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Création d'un formulaire de contact

Re: Création d'un formulaire de contact

par Dobby » 10 déc. 2020, 21:11

Merci beaucoup pour votre aide!

Re: Création d'un formulaire de contact

par two3d » 08 déc. 2020, 22:28

Comment faire pour changer cet emplacement (si c'est possible)?
Mettre le code ailleurs, ou l'entourer de balise HTML qui stylisera les réponses.
Aussi, est-ce que cette ligne a une réelle utilité ou est-ce qu'elle peut être enlevée?
Aucune utilité, lors de l'envoi, c'est automatiquement rajouté.

L'envoi de mail avec PHP peut être complexe, il faut retenir les principales règles comme le MIME, le Content-type et l'encodage du titre (comme mentionné sur mon tuto: Formulaire de contact PHP)

Bon courage pour la suite :D

Re: Création d'un formulaire de contact

par Dobby » 08 déc. 2020, 22:06

C'est bon! J'ai trouvé un autre code et l'ai implanté dans le fichier index et ai donc modifié l'extension en .php et ça fonctionne.

Evidement, une réponse mène à une autre question...
Le code en question a une fonctionnalité qui liste les erreurs (par exemple un champ non rempli) au dessus du formulaire. Comment faire pour changer cet emplacement (si c'est possible)?

Aussi, est-ce que cette ligne a une réelle utilité ou est-ce qu'elle peut être enlevée?

Code : Tout sélectionner

$contenu = '<html><head><title>La Main Magique</title></head><body>';


Voici le code général:
			<!-- DEBUT CODE PHP FORMULAIRE DE CONTACT -->
			<?php
// S'il y des données de postées
if ($_SERVER['REQUEST_METHOD']=='POST') {
  // Code PHP pour traiter l'envoi de l'email
  
  $nombreErreur = 0; // Variable qui compte le nombre d'erreur
  
  // Définit toutes les erreurs possibles
  if (!isset($_POST['email'])) { // Si la variable "email" du formulaire n'existe pas (il y a un problème)
    $nombreErreur++; // On incrémente la variable qui compte les erreurs
    $erreur1 = '<p>Il y a un problème avec la variable "email".</p>';
  } else { // Sinon, cela signifie que la variable existe (c'est normal)
    if (empty($_POST['email'])) { // Si la variable est vide
      $nombreErreur++; // On incrémente la variable qui compte les erreurs
      $erreur2 = '<p>Vous avez oublié de donner votre email.</p>';
    } else {
      if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $nombreErreur++; // On incrémente la variable qui compte les erreurs
        $erreur3 = '<p>Cet email ne ressemble pas un email.</p>';
      }
    }
  }
    if (!isset($_POST['message'])) {
    $nombreErreur++;
    $erreur4 = '<p>Il y a un problème avec la variable "message".</p>';
  } else {
    if (empty($_POST['message'])) {
      $nombreErreur++;
      $erreur5 = '<p>Vous avez oublié de donner un message.</p>';
    }
  }

  
  if ($nombreErreur==0) { // S'il n'y a pas d'erreur
    // Récupération des variables et sécurisation des données
    $nom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML
    $email = htmlentities($_POST['email']);
    $message = htmlentities($_POST['message']);
    
    // Variables concernant l'email
    $destinataire = '; // Adresse email du webmaster
    $sujet = 'La Main Magique - Formulaire de contact'; // Titre de l'email
    $contenu = '<html><head><title>La Main Magique</title></head><body>';
    $contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
    $contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
    $contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
    $contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
    $contenu .= '</body></html>'; // Contenu du message de l'email
    
    // Pour envoyer un email HTML, l'en-tête Content-type doit être défini
    $headers = 'MIME-Version: 1.0'."\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
    
    @mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email
    
    echo '<h2>Message envoyé!</h2>'; // Afficher un message pour indiquer que le message a été envoyé
  } else { // S'il y a un moins une erreur
    echo '<div style="border:1px solid #ff0000; padding:5px;">';
    echo '<p style="color:#ff0000;">Désolé, il y a eu '.$nombreErreur.' erreur(s). Voici le détail des erreurs:</p>';
    if (isset($erreur1)) echo '<p>'.$erreur1.'</p>';
    if (isset($erreur2)) echo '<p>'.$erreur2.'</p>';
    if (isset($erreur3)) echo '<p>'.$erreur3.'</p>';
    if (isset($erreur4)) echo '<p>'.$erreur4.'</p>';
    if (isset($erreur5)) echo '<p>'.$erreur5.'</p>';
    echo '</div>';
  }
}
?>		
			<!-- FIN CODE PHP FORMULAIRE DE CONTACT -->
		
			<!-- DEBUT CODE HTML FORMULAIRE DE CONTACT -->			
			<div class="container">
				<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
				<label>Nom</label>
				<input type="text" name="nom" size="30" placeholder="Prénom Nom">
    
				<label>Mail</label>
				<input type="text" name="email" size="30" placeholder="[email protected]">
    
				<label>Message</label>
				<textarea name="message" cols="60" rows="10" placeholder="Votre message..."></textarea>
    
				<input type="submit" name="submit" value="Envoyer" />
				</form>
			</div>	
			<!-- FIN CODE HTML FORMULAIRE DE CONTACT -->


Et merci de m'avoir fait penser à retirer l'adresse mail ;)

Re: Création d'un formulaire de contact

par two3d » 08 déc. 2020, 21:15

tu devrais enlever ton mail sur ton précédent post pour pas que les robots le sniff :wink:

Re: Création d'un formulaire de contact

par two3d » 08 déc. 2020, 20:03

mettre name="envoyer" sur l'input submit ;)

si tu souhaite mettre du PHP dans un fichier html ça ne fonctionnera pas, tu peut renommer ton fichier index.html en index.php sinon

Re: Création d'un formulaire de contact

par Dobby » 08 déc. 2020, 19:34

Un copier/coller de quel code pour le coup?

Re: Création d'un formulaire de contact

par or 1 » 08 déc. 2020, 19:32

mieux vaut faire un copier/coller intégral sans retoucher au code ensuite, car sinon le premier if retourne false et comme il n'y a pas de else à ce if, rien ne s'affiche.

Re: Création d'un formulaire de contact

par Dobby » 08 déc. 2020, 19:24

L'url du site suivit du nom de fichier du formulaire de contact, donc:

http://www.lamainmagique.be/dev/formcontact.php

Re: Création d'un formulaire de contact

par or 1 » 08 déc. 2020, 19:14

quelle est l'url complète qui s'affiche dans la barre du navigateur quand formcontact.php affiche une page blanche ?

Re: Création d'un formulaire de contact

par Dobby » 08 déc. 2020, 18:38

Donc, je viens de rajouter le method=post et ai supprimé la ligne numéro (pas très importante pour l'instant, je verrai plus tard pour l'ajouter si nécessaire).

Mais ça ne fait toujours rien. Je suis renvoyé vers une page blanche (cette fois ci url: /formcontact.php). Aucun message d'erreur, aucun message d'opération réussie, rien. Même si le formulaire est vide et que j'appuie sur envoyer, je suis redirigé.

Pour ne pas reposter le code, j'ai modifié mon message précédent.


Si je veux mettre le code dans mon index.html et supprimer le formcontact.php, où est-ce que je dois le mettre?


Désolé, comme j'ai dit je suis totalement novice en php

Re: Création d'un formulaire de contact

par two3d » 08 déc. 2020, 18:05

<form action="formcontact.php"> précise la m"thode (ici tu est en POST, là il y est envoyé en GET, d'où les querys dans l'URL

La CSS on s'en fout...

et ton fichier formcontact.php, c'est un peu bête de le mettre appart mais on peu faire comme ça, c'est plus chiant certes #-o

ensuite ton champs numtel n'existe pas dans la vérification en PHP, tu l'aura null part mentionné, si tu veux le récupérer, il est contenu dans $_POST['numtel'] (si il existe bien sûr, bien faire les vérifications des champs que renseigne l'utilisateur, ET NE JAMAIS LUI FAIRE CONFIANCE, toujours vérifier si c'est un mail, un num de tel, etc...)

Voilà, déjà en mettant la méthode post dans la balise <form> et la page formcontact sera bien traitée

Voir la DOC si besoin de plus d'infos sur les FORM: https://developer.mozilla.org/fr/docs/W ... laire_HTML

Re: Création d'un formulaire de contact

par Dobby » 08 déc. 2020, 16:16

Bonjour,

Je viens donc de réessayer.
Lorsque je clique sur "envoyer", je suis redirigé vers une page blanche intitulée: "/formcontact.php?nom=test&mail=test&numtel=test&sujet=test"
et je ne reçois aucun mail. Et ce, que le fichier soit en .php ou en .html.

Voici mes codes, peut-être aurez-vous plus facile pour m'aider...

index.html
	
			<div class="container">
			<form action="formcontact.php" method="post">

				<label for="nom">Nom</label>
				<input type="text" id="nom" name="nom" placeholder="Ecrivez votre nom">

				<label for="mail">Email</label>
				<input type="text" id="mail" name="mail" placeholder="Ecrivez votre email">

				<label for="sujet">Sujet</label>
				<textarea id="sujet" name="sujet" placeholder="Ecrivez votre message" style="height:200px"></textarea>

				<input type="submit" value="Envoyer">

			</form>
			</div>	
		
formcontact.php
<?php
$VotreAdresseMail="";//mettez ici votre adresse mail
if(isset($_POST['envoyer'])) { // si le bouton "Envoyer" est appuyé
    //on vérifie que le champ mail est correctement rempli
    if(empty($_POST['mail'])) {
        echo "Le champ mail est vide";
    } else {
        //on vérifie que l'adresse est correcte
        if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,}$#i",$_POST['mail'])){
            echo "L'adresse mail entrée est incorrecte";
        }else{
            //on vérifie que le champ sujet est correctement rempli
            if(empty($_POST['sujet'])) {
                echo "Le champ sujet est vide";
            }else{
                //on vérifie que le champ message n'est pas vide
                if(empty($_POST['message'])) {
                    echo "Le champ message est vide";
                }else{
                    //tout est correctement renseigné, on envoi le mail
                    //on renseigne les entêtes de la fonction mail de PHP
                    $Entetes = "MIME-Version: 1.0\r\n";
                    $Entetes .= "Content-type: text/html; charset=UTF-8\r\n";
                    $Entetes .= "From:  <".$_POST['mail'].">\r\n";//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire
                    $Entetes .= "Reply-To:  <".$_POST['mail'].">\r\n";
                    //on prépare les champs:
                    $Mail=$_POST['mail']; 
                    $Sujet='=?UTF-8?B?'.base64_encode($_POST['sujet']).'?=';//Cet encodage (base64_encode) est fait pour permettre aux informations binaires d'être manipulées par les systèmes qui ne gèrent pas correctement les 8 bits (=?UTF-8?B? est une norme afin de transmettre correctement les caractères de la chaine)
                    $Message=htmlentities($_POST['message'],ENT_QUOTES,"UTF-8");//htmlentities() converti tous les accents en entités HTML, ENT_QUOTES Convertit en + les guillemets doubles et les guillemets simples, en entités HTML
                    //en fin, on envoi le mail
                    if(mail($VotreAdresseMail,$Sujet,nl2br($Message),$Entetes)){//la fonction nl2br permet de conserver les sauts de ligne et la fonction base64_encode de conserver les accents dans le titre
                        echo "Le mail à été envoyé avec succès!";
                    } else {
                        echo "Une erreur est survenue, le mail n'a pas été envoyé";
                    }
                }
            }
        }
    }
}
?>

Re: Création d'un formulaire de contact

par two3d » 06 déc. 2020, 21:55

si si, pas de souci

Re: Création d'un formulaire de contact

par Dobby » 06 déc. 2020, 21:48

Mais du coup je ne comprends pas... (désolé! )

Si la page index doit être en php, elle ne s'affichera plus sur le navigateur, si?

Re: Création d'un formulaire de contact

par two3d » 06 déc. 2020, 21:37

toutes les pages qui utilisent du code PHP

après si tu veux que tu ton site affiche une URL avec index.html, fait la réécriture d'URL de index.php vers index.html, ya bcp de tutos sur internet concernant ce point ;)