4660 sujets

Sémantique web et HTML

Bonjour à tous,
Le problème : L'utilisateur de mon formulaire ne reçois pas la copie de son message après avoir coché la checkbox.

<?php

$to = 'destinataire@free.fr';
//Test de la Checkbox et ajout du destinataire
 if (!empty($_POST['email']) && isset($_POST['checkbox'])) {
$to .= 'destinataire@free.fr', $_POST['email'];
    }
    $email_subject = "Sujet";
    $email_body = "Sujet.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
    $headers = "From: adresse d'envoi@free.fr\n";
   
//Envoi du mail
    mail($to,$email_subject,$email_body,$headers);
?>


Je ne comprends pas ou se trouve mon erreur.
Merci pour votre aide Smiley cligne
Merci beaucoup niuxe, mais je me doute bien que l'erreur vient de là.
J'ai essayer tellement de choses différentes que je ne sais pas quelle est la bonne syntaxe à utiliser.
Ex qui ne fonctionne pas non plus :
$to .=  ','.$_POST['email'];

Modifié par valttt (22 Sep 2017 - 16:25)
valttt a écrit :
Merci beaucoup niuxe, mais je me doute bien que l'erreur vient de là.
J'ai essayer tellement de choses différentes que je ne sais pas quelle est la bonne syntaxe à utiliser.
Ex qui ne fonctionne pas non plus :
$to .=  ','.$_POST['email'];


Sans voir le formulaire (le code), c'est pas simple. Ensuite, rien ne dit que le mail sera envoyé. Donc on test toujours..... Smiley cligne if mail( ....) etc.

Ce que je peux te conseiller, affiche les erreurs php et regarde les logs php / apache / postfix Smiley cligne
Modifié par niuxe (22 Sep 2017 - 16:44)
Essaye
$to .=  ';'.$_POST['email'];


(les email sont séparés par des points virgules il me semble)
Modifié par JENCAL (22 Sep 2017 - 16:40)
JENCAL a écrit :
Essaye
$to .=  ';'.$_POST['email'];


(les email sont séparés par des points virgules il me semble)


J'ai déjà vérifié : mail(). C'est bien des virgules.
Merci à tous,

Je ne peux rien vérifier hormis la réception des mails car mon site est hébergé (je fais donc les test en mettant une autre adresse mail m'appartenant (utilisateur) dans le champs de saisie) .
Si la syntaxe est bonne avec la virgule, pourquoi l'utilisateur ne reçois rien ?
PS : voilà mon formulaire...
<form name="contactForm" id="contactForm" method="POST" action="M2.php">
                            <div class="col-md-6">
                                <div class="row control-group">
                                    <div class="form-group col-xs-12">
                                        <label>Civilité</label>
                                        <select class="form-control" name="sex" id="sex">
                                            <option value="Mr">Monsieur</option>
                                            <option value="Mm">Madame</option>
											<option value="Melle">Mademoiselle</option>
                                        </select>
                                    </div>
                                    <div class="form-group col-xs-12">
                                        <label>Nom</label>
                                        <input type="text" name="name" class="form-control" placeholder="Votre Nom" id="name" required>
                                    </div>
                                </div>
                                <div class="row control-group">
                                    <div class="form-group col-xs-12">
                                        <label>Email</label>
                                        <input type="email" name="email" class="form-control" placeholder="Votre Adresse Mail" id="email" required>
                                    </div>
                                </div>
                                <div class="row control-group">
                                    <div class="form-group col-xs-12">
                                        <label>Téléphone</label>
                                        <input type="text" name="phone" class="form-control" placeholder="Votre téléphone" id="phone" required>
                                    </div>
                                </div>
							</div>
                            <div class="col-md-6">
                                <div class="row control-group">
                                    <div class="form-group col-xs-12">
                                        <label>Message</label>
                                        <textarea rows="12" name="message" class="form-control" placeholder="Votre Message" id="message" required></textarea>
                                    </div>
                                </div>
                            </div>
							<br>
	                        <div class="row">       
	                            <div class="form-group col-xs-11 text-right">
	                                <label><input type="checkbox" name="checkbox" align="left">Cochez ici si vous souhaitez recevoir une copie de votre message.</label>
<button type="submit" id="btnSubmit" class="btn btn-info text-right"">Envoyer</button>
	                            </div>
	                        </div>
	                        <br>
							
	                    </form>


Et pour que ce soit plus clair pour vous, le traitement :
$to = 'destinataire@free.fr';
    if (!empty($_POST['email']) && isset($_POST['checkbox'])) {
    $to .=  ','.$_POST['email'];
    }
    $email_subject = "Sujet";
    $email_body = "Sujet.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
    $headers = "From: expéditeur@free.fr\n";
          
    mail($to,$email_subject,$email_body,$headers);


Merci encore Smiley cligne
Modifié par valttt (22 Sep 2017 - 17:00)
Je ne pense pas que ça ait à voir mais:

Le caractère de fin de ligne est CRLF pour les mails: donc \r\n (c'est une norme).

$headers = "From: adresse d'envoi@free.fr\n"

Il faut utiliser CRLF pour séparer les en-têtes mais rien si on en a une seule.

Sinon:

1) destinataire@free.fr reçoit-il bien l'e-mail
2) Comme le dit niuxe, il faut voir les éventuels messages d'erreurs et autres logs (apache, exim/postfix, etc.)
Oui, le destinataire reçois systématiquement les mails.
Serait-ce le fichier mail.log lorsque je me connecte sur le ftp de mon site ?
Modifié par valttt (22 Sep 2017 - 17:11)
valttt a écrit :
Merci à tous,

Je ne peux rien vérifier hormis la réception des mails car mon site est hébergé (je fais donc les test en mettant une autre adresse mail m'appartenant (utilisateur) dans le champs de saisie) .
Si la syntaxe est bonne avec la virgule, pourquoi l'utilisateur ne reçois rien ?
PS : voilà mon formulaire...
&lt;form name="contactForm" id="contactForm" method="POST" action="M2.php"&gt;
                            &lt;div class="col-md-6"&gt;
                                &lt;div class="row control-group"&gt;
                                    &lt;div class="form-group col-xs-12"&gt;
                                        &lt;label&gt;Civilité&lt;/label&gt;
                                        &lt;select class="form-control" name="sex" id="sex"&gt;
                                            &lt;option value="Mr"&gt;Monsieur&lt;/option&gt;
                                            &lt;option value="Mm"&gt;Madame&lt;/option&gt;
											&lt;option value="Melle"&gt;Mademoiselle&lt;/option&gt;
                                        &lt;/select&gt;
                                    &lt;/div&gt;
                                    &lt;div class="form-group col-xs-12"&gt;
                                        &lt;label&gt;Nom&lt;/label&gt;
                                        &lt;input type="text" name="name" class="form-control" placeholder="Votre Nom" id="name" required&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                                &lt;div class="row control-group"&gt;
                                    &lt;div class="form-group col-xs-12"&gt;
                                        &lt;label&gt;Email&lt;/label&gt;
                                        &lt;input type="email" name="email" class="form-control" placeholder="Votre Adresse Mail" id="email" required&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                                &lt;div class="row control-group"&gt;
                                    &lt;div class="form-group col-xs-12"&gt;
                                        &lt;label&gt;Téléphone&lt;/label&gt;
                                        &lt;input type="text" name="phone" class="form-control" placeholder="Votre téléphone" id="phone" required&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
							&lt;/div&gt;
                            &lt;div class="col-md-6"&gt;
                                &lt;div class="row control-group"&gt;
                                    &lt;div class="form-group col-xs-12"&gt;
                                        &lt;label&gt;Message&lt;/label&gt;
                                        &lt;textarea rows="12" name="message" class="form-control" placeholder="Votre Message" id="message" required&gt;&lt;/textarea&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
							&lt;br&gt;
	                        &lt;div class="row"&gt;       
	                            &lt;div class="form-group col-xs-11 text-right"&gt;
	                                &lt;label&gt;&lt;input type="checkbox" name="checkbox" align="left"&gt;Cochez ici si vous souhaitez recevoir une copie de votre message.&lt;/label&gt;
&lt;button type="submit" id="btnSubmit" class="btn btn-info text-right""&gt;Envoyer&lt;/button&gt;
	                            &lt;/div&gt;
	                        &lt;/div&gt;
	                        &lt;br&gt;
							
	                    &lt;/form&gt;


Et pour que ce soit plus clair pour vous, le traitement :
$to = 'destinataire@free.fr';
    if (!empty($_POST['email']) &amp;&amp; isset($_POST['checkbox'])) {
    $to .=  ','.$_POST['email'];
    }
    $email_subject = "Sujet";
    $email_body = "Sujet.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
    $headers = "From: expéditeur@free.fr\n";
          
    mail($to,$email_subject,$email_body,$headers);


Merci encore Smiley cligne


Dans un premier temps (avant ton code ==> si possible le plus en amont de tout ton code php) :

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


Je suis pratiquement que l'on peut voir les logs tout de même....

Que vaut $_POST['checkbox'] ? Dans un second temps, je t'invite à corriger cet aspect là.

Perso, j'écrirai comme ceci :

if (!empty($_POST['email']) && !empty($_POST['checkbox']) && $_POST['checkbox'] === "quelque chose") { //cela veut dire que le code html doit être modifié bien sûr
    $to .=  ','.$_POST['email'];
}


Et en générale, je fais comme ceci pour un mail texte et écrit en natif :

<?php 
    session_start();
    //......
    //......
    //......
    $to = 'adresse@dom.com';
    $sender = 'adresse@dom.com';
    $copy = 'adresse@dom.com';
    $hidden_copy = 'adresse@dom.com';
    $subject = 'Test';
    $headers  = 'MIME-Version: 1.0' . "\n"; 
    $headers .= 'Reply-To: '.$sender."\n"; 
    $headers .= 'From: "Nom_de_expediteur"<'.$sender.'>'."\n"; 
    $headers .= 'Delivered-to: '.$to."\n"; 
    $headers .= 'Cc: '.$copy."\n"; 
    $headers .= 'Bcc: '.$hidden_copy."\n\n"; 
    $message = 'lorem ipsum';
    if (mail($to, $subject, $message, $headers)) {
        $_SESSION['flash'] = 'Votre message a bien été envoyé ';
    }else {
        $_SESSION['flash'] = "Votre message n'a pas pu être envoyé";
    }
    //......
    //......
    //......
    //......
?>


<<<EDIT
Je viens de voir que ce sujet n'est pas au bon endroit. Il devrait être dans le forum approprié qui est : "Développement web côté serveur, CMS"
EDIT;
Modifié par niuxe (22 Sep 2017 - 17:25)
Tu feras gaffe à cette ligne, ton guillemet pète le reste :
<button type="submit" id="btnSubmit" class="btn btn-info text-right"">Envoyer</button>


Concernant le reste, ton premier destinataire reçoit donc le mail mais pas l'utilisateur.
Je rejoins Niuxe sur le que trouve t'on dans tes variables. Essaye des var_dump pour débugger alors :

$to = 'destinataire@free.fr';
var_dump($_POST['email']);
var_dump($_POST['checkbox']);
    if (!empty($_POST['email']) && isset($_POST['checkbox'])) {
    $to .=  ','.$_POST['email'];
var_dump($to);
    }
    $email_subject = "Sujet";
    $email_body = "Sujet.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
    $headers = "From: expéditeur@free.fr\n";

Modifié par JENCAL (22 Sep 2017 - 17:11)
Ah oui, je l'avais pas vu celle là... Smiley rolleyes

Oulàlà, alors là je m'y perds un peu... Smiley biggol , pardonnez-moi Smiley cligne

1) la " ne change rien. je l'ai supprimée et rien ne change.
2) @JENCAL : Toujours le même problème, ET je reçois toujours le message comme quoi le mail est bien parti
3) @niuxe : Désolé, mais là je suis un peu beaucoup largué.
J'ai fais le test avec un simple echo et j'ai comme retour "on" quand je clique dessus.
Modifié par valttt (22 Sep 2017 - 17:35)
valttt a écrit :

1) la " ne change rien. je l'ai supprimée et rien ne change.

le " ne change rien c'est normal Smiley smile mais il était en trop quand même Smiley smile
valttt a écrit :
2) @JENCAL : Toujours le même problème, ET je reçois toujours le message comme quoi le mail est bien parti

Le but des var_dump n'est pas de corriger le problème mais de t'afficher le contenu exact de tes paramètres.
mais j'ai oublier de te dire qu'il faut un rajouter un
die()

à la fin
$to = 'destinataire@free.fr';
var_dump($_POST['email']);
var_dump($_POST['checkbox']);
    if (!empty($_POST['email']) && isset($_POST['checkbox'])) {
    $to .=  ','.$_POST['email'];
var_dump($to);
    }
    $email_subject = "Sujet";
    $email_body = "Sujet.\n\n$sex $name\n\nEmail: $email_address\n\nTéléphone: $phone\n\nMessage:\n$message";
    $headers = "From: expéditeur@free.fr\n";
die();
Mil merci pour votre aide et réponses ultra rapide Smiley biggrin

Cela affiche le contenu exact de tes paramètres, mais où ?
Dans le fichier log ? Smiley biggol

Je viens de regarder dans le fichier log et j'ai comme message d'erreur : client@free.fr/n: invalid address.

il vient d'où le /n ?
C'est peut-être pour ça que ça ne fonctionne pas, une adresse mail ne peut pas contenir de /.
Modifié par valttt (22 Sep 2017 - 18:09)
C'est un retour à la ligne, cela dépend de comment est faite la saisie,

essaie de faire un


$to .=  ','.trim($_POST['email']);


trim supprime les espaces blancs en début et fin de chaîne (espaces, tab, retours à la ligne).

Il serait bien au aussi de valider ton adresse e-mail:


$email = trim($_POST['email']);

if (!empty($email) && isset($_POST['checkbox'])) {
  if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $to .=  ','.$_POST['email'];
  }
  else {
    // AFFICHER PROPREMENT UN MESSAGE à l'utilisateur
    // cette solution est dégueu mais te permet de voir si l'adresse est valide:
    die('l\'adresse e-mail est invalide!');
  }
}
OK, merci.
Bon, je viens de faire l'essai et c'est toujours pareil.
Je viens d'appeler mon hébergeur pour lui demander des explications.
Il ne constate aucune erreur sur le serveur.
Je fais bien une vérification de l'adresse mail, mais je ne l'ai pas indiquée sur le code pour ne pas compliquer le sujet Smiley cligne
Je lâche l'affaire pour aujourd'hui.

Merci encore et bonne soirée à tous... Smiley biggrin
Modifié par valttt (22 Sep 2017 - 19:18)
Bonjour à tous,

J'ai enfin trouvé la raison du problème.

Je viens de m'aperçevoir que dans le fichier d'entête, (page_head.php), il est indiqué un lien vers un autre fichier java (script.js), qui traite aussi le formulaire.
J'ai donc le formulaire contact.php qui renvoi vers mail.php et script.js.

Je suis incapable non seulement de dire à quoi sert ce fichier car sans lui, la fonction mail() fonctionne parfaitement, mais de vous décrire le problème que pose ce fichier par rapport à mon besoin de copie de mail envoyé.

Je vous présente donc mes excuses pour ne pas vous en avoir informé plus tôt, car cela aurait pu éviter de vous faire perdre votre temps.
Je vais malheureusement pour moi être dans l'obligation de faire intervenir un webmaster qui pourra apporter la correction dont j'ai besoin.

Encore toutes mes excuses... Smiley confused
Modifié par valttt (01 Oct 2017 - 13:43)