Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

    $email = 'adressedudestinataire@yahoo.fr';
    // Adresse email du destinataire
    $destinataire = $email;

    // Titre de l'email
    $sujet = 'Résultats du concours';

    // Contenu du message de l'email
    $message = 'mon message';

// 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=utf-8' . "\r\n";  
    $headers .= 'From: noreply@cdbf.fr' . "\r\n" .
    $headers .= 'Bcc: monadresse@yahoo.fr' . "\r\n"; // On définit les destinataires en copie cachée pour qu\'ils ne puissent pas voir les adresses des autres inscrits.
    'X-Mailer: PHP/' . phpversion();

Ce que je veux

Je cherche à ce que dans le formulaire, la personne qui est déja connecté n'est pas besoin de taper son adresse mail.
En gros, le php ira chercher dans la base de donné son adresse mail.
Mais je ne vois pas comment faire ...

Quelqu'un aurait une idée ?

Merci d'avance.

Ce que j'obtiens

    $email = '<?= $_SESSION['auth']->prenom; ?> <?= $_SESSION['auth']->nom; ?>';
    // Adresse email du destinataire
    $destinataire = $email;

    // Titre de l'email
    $sujet = 'Résultats du concours';

    // Contenu du message de l'email
    $message = 'mon message';

// 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=utf-8' . "\r\n";  
    $headers .= 'From: noreply@cdbf.fr' . "\r\n" .
    $headers .= 'Bcc: monadresse@yahoo.fr' . "\r\n"; // On définit les destinataires en copie cachée pour qu\'ils ne puissent pas voir les adresses des autres inscrits.
    'X-Mailer: PHP/' . phpversion();

21 réponses


Salut,

Vérifie que la session existe, dans ton cas "email".

<?php
if(isset($_SESSION['auth']['email'])) {
    $email = $_SESSION['auth']['email'];
} else {
    $email = $_SESSION['auth']['email'];
}
?>

Adapte en fonction de tes besoins, pense aussi à récupérer l'email dans la session lors de la connexion si ce n'est pas déjà fait.

Nouchi35
Auteur

OK merci,
mais du coup comment l'intégrer dans mon php d'envois de mail suite à mon formulaire ?

Par exemple en temps normal on met soit l'adresse mail directement ou alors $_POST['email'])

Merci d'avance

Il te faut juste utiliser la fonction mail de php, exemple:

<?php
if(isset($_SESSION['auth']['email'])) {
    $email = $_SESSION['auth']['email'];
} else {
    $email = $_SESSION['auth']['email'];
}

$objet = 'Mon sujet';
$message = 'mon message';
$headers  = 'MIME-Version: 1.0' . "\r\n";
 $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";  
 $headers .= 'From: noreply@cdbf.fr' . "\r\n" .
 $headers .= 'Bcc: monadresse@yahoo.fr' . "\r\n";
    'X-Mailer: PHP/' . phpversion();

if(mail($email,$objet,$message,$headers)) {
    return true;
}
?>

Tu trouvera tout ce que tu as besoin sur la doc ;)
http://php.net/manual/fr/function.mail.php#example-3862

Bonsoir.
Ton code est incorrect dans la partie suivante :

$headers .= 'Bcc: monadresse@yahoo.fr' . "\r\n"; // On définit les destinataires en copie cachée pour qu\'ils ne puissent pas voir les adresses des autres inscrits.
'X-Mailer: PHP/' . phpversion();

Il te faut remplacer par :

$headers .= 'Bcc: monadresse@yahoo.fr' . "\r\n"; // On définit les destinataires en copie cachée pour qu\'ils ne puissent pas voir les adresses des autres inscrits.
$headers .= 'X-Mailer: PHP/' . phpversion();

@Darkh62 La condition que tu proposes est incorrecte, si je traduis dans condition, tu demandes :

Si $_SESSION['auth']['email'] existe, $email est égal à $_SESSION['auth']['email'] sinon $email est égal à $_SESSION['auth']['email']

Quelle est la différence entre les deux résultats dans ta condition ?
Le code serait plutôt :

if (isset($_SESSION['auth'])) {
    $email = $_SESSION['auth']->email;
} else {
    $email = $_POST['email'];
}

Oups, en effet, petite erreur de frappe :-)

Nouchi35
Auteur

Merci les gars ça marche !
Juste une petite dernière question.

Si je veux envoyer deux mails différent dans le même formulaire ?

Par exemple j'en envois un pour remercier la personne et un qui m'envoi les donnés.

Merci d'avance.

Tu peut simplement utiliser 2 fois la fonction mail avec du contenu et un destinataire différent

Nouchi35
Auteur

Merci mais après plusieurs essais je n'y arrive pas.

Voila mon code qui marche pour le moment et qui envois un seul mail :

<?php
require_once 'includes/function_register.php';
if(!empty($_POST)){

$errors = array();

if(empty($_POST['PrésencesU132'])){
    $errors['PrésencesU132'] = "<font color='red'>Vous n'avez pas validé votre présence ou absence.</font>";
}
if(empty($_POST['covoiturage'])){
    $errors['covoiturage'] = "<font color='red'>Vous ne nous avez pas indiqué si vous pouviez accompagner avec votre véhicule.</font>";
}
if(empty($_POST['covoituragenombre'])){
    $errors['covoituragenombre'] = "<font color='red'>Vous ne nous avez pas indiqué le nombre de joueur que vous pouvez prendre.</font>";
}

if(empty($errors)){

if (isset($_SESSION['auth'])) {
$email = $_SESSION['auth']->email;

} else {
$email = $_POST['email'];
}

// Adresse email du destinataire
    $destinataire = $email;

    // Titre de l'email
    $sujet = "Convocations U13 2";

    // Contenu du message de l'email
    $message= "Mon message";        

    // Pour envoyer un email HTML, l'en-tête Content-type doit être défini

    $headers = 'From: noreply@cdbf.fr' . "\r\n" .
    $headers .='X-Mailer: PHP/' . phpversion();

    // Fonction principale qui envoi l'email
    mail($destinataire, $sujet, $message, $headers);
// On redirige l'utilisateur vers la page de login avec un message flash
$_SESSION['flash']['success'] = 'Votre réponse a bien été prise en compte.';
header('Location: Convocations_U13_2.php');
exit();

}
}
?>

J'aimerai en envoyer un autre à moi même avec les donnés.

Une astuce ?

Merci d'avance.

Il te suffit tout simplement de faire quelque chose comme :

$destinataire = $email;
$destinataire2 = 'tonEmail';
$sujet = "Convocations U13 2";
$sujet2 = "Le sujet pour toi";
$message = "Le message pour l'utilisateur";
$message2 = "Le message pour toi";
/* préparation des entêtes & Co ... */
mail($destinataire, $sujet, $message, $headers);
mail($destinataire2, $sujet2, $message2, $headers);
Nouchi35
Auteur

merci mais pourquoi ajouter seulement un "2" ?

J'imagine que si on veut en faire 3 on ajoute "3" ?

Tu as dit que tu voulais envoyer un mail pour l'utilisateur et un pour toi, ce que je te montre n'est qu'un exemple, j'ai simplement mis un 2 à certaines variables pour les différencier, tu les nommes comme tu veux du moment quelles sont différenciés.

Nouchi35
Auteur

D'accord, je crois avoir compris.
Enfaite la première variable n'est pas obligatoirement nommé destinataire, mais elle sert de destinataire et pareil pour les autres.

En gros l'ordre pour l'envoi d'un mail c'est toujours :
mail($destinataire, $sujet, $message, $headers);

mais on peut mettre ce qu'on veut, par exemple :
mail($email, $subject, $texte, $entêtes);

Donc si on veut en faire plusieurs, on donne à chacun son nom et dans le php on dit à quoi ils correspondent.

J'ai bon ?

Oui, le nom de la variable importe peu, du moment que le contenu de chaque variable correspond à ce qu'il faut pour la fonction mail de PHP.
J'aurais pu aussi te donner un exemple en faisant un tableau pour les 3 premières valeurs qui changent, mais j'ai préféré te montrer le plus simple.
Par exemple :

$mail = [
    [
        'email' => $email, 
        'sujet' => 'Convocations U13 2', 
        'message' => "Le message pour l'utilisateur"
    ], 
    [
        'email' => 'tonEmail', 
        'sujet' => 'Le sujet pour toi', 
        'message' => 'Le message pour toi'
    ]
];
/* ... */
mail($mail[0]['email'], $mail[0]['sujet'], $mail[0]['message'], $headers);
mail($mail[1]['email'], $mail[1]['sujet'], $mail[1]['message'], $headers);

Les deux codes font la même chose mais sont juste présentés différemment.

Nouchi35
Auteur

Génial merci !

petite dernière et je vous dérange plus.

Si par exemple une personne coche présent ou absent.
Peut-on envoyer un mail en fonction de sa réponse ?

Ex :

si la personne coche présent, on lui envoit un mail avec un rappel du rdv etc ...
Si la personne coche absent, on la remercie dans le mail sans rapeler le rdv.

Merci d'avance pour vos réponses.

Si tu fais une case à cocher, soit elle l'a coche, soit elle l'a décoche.
Donc par exemple, si la personne coche la case à cocher, c'est qu'elle se désigne comme présente, si elle ne la coche pas, c'est qu'elle sera absente.
Tu pourrais donc par exemple faire quelque chose comme :


if (is_null($_POST['statut'])) { // la personne ne coche pas la case à cocher ==> Absente
    $message = "Message à envoyer à la personne absente";
} else { // la personne coche la case à cocher ==> Présente
    $message = "Message à envoyer à la personne présente";
}
Nouchi35
Auteur

Merci,
ok je vois ce qu'il faut faire.

Mais du coup par rapport aux conditions que j'ai déja mis en place, c'est à dire, signaler si rien n'a été cocher ou noter, cela va t-il être en conflit ?

Car en gros dans mon autre condition je dis "si il n'a rien cocher, ne rien envoyer et le signaler".

Mais la ça dit si il coche rien sa veut dire qu'il est absent.
Mais comment savoir si la personne a cocher quelque chose ou non ?

Mon code actuel avec la condition ou rien n'est coché :

if(!empty($_POST)){

$errors = array();

if(empty($_POST['PrésencesU132'])){
    $errors['PrésencesU132'] = "<font color='red'>Vous n'avez pas validé votre présence ou absence.</font>";
}
if(empty($_POST['covoiturage'])){
    $errors['covoiturage'] = "<font color='red'>Vous ne nous avez pas indiqué si vous pouviez accompagner avec votre véhicule.</font>";
}
if(empty($_POST['covoituragenombre'])){
    $errors['covoituragenombre'] = "<font color='red'>Vous ne nous avez pas indiqué le nombre de joueur que vous pouvez prendre.</font>";
}

if(empty($errors)){
}

Peut être mettre une case absent et une case présent qu'il cochera et envoyer en fonction de ce qu'il coche ?

Merci d'avance

Lorsque la réponse à une question ne peut être que oui ou non, une case à cocher est largement suffisante, donc inutile de vouloir faire plusieurs case à cocher pour une question de ce genre.
Si la personne dit quelle sera présente, c'est quelle ne sera pas absente, sinon c'est comme si tu demandais :

Vous dites que vous serez présent, est-ce que vous serez absent ?

C'est totalement dénoué de sens, non ?
Pourquoi poser une seconde question, si on en connait la réponse ?

Nouchi35
Auteur

Je suis daccord mais ce que je veux dire c'est que comme on doit avoir des réponses , qu'elles soient présentes ou absentes pour savoir si on remplace ou non la personne.

Du coup on a forcément besoin d'une réponse.

Donc c'est pour ça que j'ai mis l'obligation de cocher une des deux réponses.

Suite à cela , j'aurai aimer que, en fonction de la réponse, on puisse envoyer un mail différent pour chaque cas.

Par exemple si la personne coche présent, on lui renvoi le lieu et horaire du rdv et si elle coche absente on la remercie d'avoir répondu.

Mais dans tout les cas elle doit donner une réponse.

Donc cela donne plusieurs conditions :

1) Vérifier si elle a donner une réponse.
2) Vérifier si c'est présent ou absent.
3) En fonction de la réponse on lui renvois un mail personnalisé.

En gros je ne veut pas que les personnes se disent je suis absent donc je ne coche rien.
Car justement on a besoin de savoir rapidement si la personne sera absente ou présente pour pouvoir la remplacer le plus rapidement possible.

Suis-je plus claire ?

Je t'ai justement montré un exemple en PHP avec des commentaires dans le code pour la vérification.
Si ça ne te convient pas, au lieu d'utiliser une case à cocher (checkbox) ou un input de type radio, utilises une liste de choix avec par défaut une valeur vide par exemple, ce qui donnerait par exemple :

<select name="statut" id="statut">
    <option value="">Sélectionnez votre disponibilité</option>
    <option value="0">Absent</option>
    <option value="1">Présent</option>
</select>

Il ne te restera plus qu'à vérifier la valeur, si elle est vide, message d'erreur en indiquant que la personne doit préciser un choix, sinon selon la valeur définie tu envoies un message ou l'autre, par exemple :

if (empty($_POST['statut'])) { // la personne n'a rien sélectionné => message d'erreur
    $errors['statut'] = "Veuillez précisez votre disponibilité à l'évènement";
} elseif ($_POST['statut'] == 0) { // la personne à sélectionné qu'elle serait absente
    $message = "Message à envoyer à la personne absente";
} else { // la personne à sélectionné qu'elle serait présente
    $message = "Message à envoyer à la personne présente";
}
Nouchi35
Auteur

Ok merci,
c'est un peu l'idée que j'avais mais en simplifier.

Je vais tester et je te tiens au courant.

Merci

Nouchi35
Auteur

Re,
alors après plusieurs essais je constate que si je mets la liste de choix en dessous de chaque personne convoqués cela ne marche pas si la personne ne sélectionne pas pour tous.

Dois-je en faire un différent pour chaque personne ?
Ou alors je dois rester sur mes checkboxs ?
Ou as-tu une autre astuce ?

Après j'y suis presque.

Cela m'envoi bien un mail avec les donnés + un mail à la personne qui a répondu.
Seul souci, en cas d'absence je n'ai aucun message dans le mail.

Une idée ?

Merci d'avance.