Envoi de mail selon checkbox
Résolu
LaChaux78
Messages postés
585
Date d'inscription
Statut
Membre
Dernière intervention
-
LaChaux78 Messages postés 585 Date d'inscription Statut Membre Dernière intervention -
LaChaux78 Messages postés 585 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaie de mettre en place un formulaire d'envoi de mail un peu compliqué pour moi.
le membre peut choisir un ou plusieurs destinataires pré-définis dans une base MySQL pour envoyer un message privé.
Actuellement je ne peux envoyer uniquement à 1 personne ou sinon si je sélectionne plusieurs membres ça envoie uniquement au premier membre de la liste.
Pouvez-vous m'aider s'ils vous plait je suis vraiment à court d'idée.
Je vous remercie.
voici mes case à cocher
voici mon envoie de mail
J'essaie de mettre en place un formulaire d'envoi de mail un peu compliqué pour moi.
le membre peut choisir un ou plusieurs destinataires pré-définis dans une base MySQL pour envoyer un message privé.
Actuellement je ne peux envoyer uniquement à 1 personne ou sinon si je sélectionne plusieurs membres ça envoie uniquement au premier membre de la liste.
Pouvez-vous m'aider s'ils vous plait je suis vraiment à court d'idée.
Je vous remercie.
voici mes case à cocher
echo "<div><input type='checkbox' id='checkAll'/><b>(Sélectionner tous les membres)</b></div>";
echo "<div><pre>";
while ($donnees = $requete->fetch()) {
$id = $donnees->idpers;
echo "<input type='checkbox' class='ckb' id='env_".$id."' name='envoyer[]' value='".$id."'>".$donnees->nom . " " . $donnees->prenom ."" . PHP_EOL;
}
echo "</pre></div>";
voici mon envoie de mail
$sql = "SELECT nom,prenom,email
FROM cdc_personnes,cdc_adherer
WHERE cdc_personnes.idpers = cdc_adherer.idpers
AND annee='$aadh'
AND idclas IN (2)";
$requete = $bdd->prepare($sql);
$requete->execute();
if ($donnees2 = $requete->fetch()) {
// Adresse email des destinataires
$destinataire = $donnees2->email;
$prenom = $donnees2->prenom;
while ($donnees2 = $requete->fetch()) {
$destinataire .= ', '.$_POST['envoyer'];
}
// Titre de l'email
$sujet = 'Nouveau message Clique de Cruet';
// Contenu du message de l'email
$message = '<html>';
$message .= '<body><p>Bonjour '.$prenom.', <br/>';
$message .= 'Je t\'ai envoyé un nouveau message dans ton espace membre...<br/>';
$message .= 'Bonne lecture.<br/>';
$message .= '<p>'.$_SESSION['prenom'].'</p>';
$message .= '<p style="color:red;">Merci de ne pas répondre à cet email, ceci est un envoi automatique</p></body>';
$message .= '</html>';
// 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:"mon_site"<>'."\n";
// Fonction principale qui envoi l'email
mail($destinataire, $sujet, $message, $headers);
}
5 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, je pense que ta page d'envoi de mail ne traite pas correctement la réponse reçue. peux-tu partager ce qu'affichevar_dump($_POST);
?
-
Bonjour
Voici l'affichage avec var_dumparray(7) { ["MAX_FILE_SIZE"]=> string(6) "500000" ["dmess"]=> string(10) "18/11/2017" ["tmess"]=> string(7) "fffffff" ["mess"]=> string(11) "fffffffffff" ["action"]=> string(7) "ajouter" ["submit"]=> string(18) "Envoyer le message" ["envoyer"]=> array(2) { [0]=> string(1) "2" [1]=> string(2) "44" } }
Merci-
tu vois donc que $_POST['envoyer'] est ceci: array(2) { [0]=> string(1) "2" [1]=> string(2) "44" }
cela signifie que tu dois envoyer l'email aux personnes dont idpers est 2 ou 44.
moi je ferais une boucle foreach sur $_POST['envoyer'] , et, pour chaque idpers, je ferais une requête sql pour aller chercher l'email et je compléterais la liste des destinataires avec cet email. -
-
-
J'ai vraiment essayé d'arriver à quelque chose, j'ai peu de connaissance, tout ce que je sais c'est que je tourne en rond, j'ai fait cette boucle mais ecla me retourne toujours 1 checkbox même si j'en coche 2.
Pouvez-vous s'ils vous plait m'aider encore, peut-être me donner d'autres précisions.
Je vous en remercie.foreach($_POST['envoyer'] as $envoyer) { $envoyer = implode(';', $_POST['envoyer']); }-
plutôt ainsi:
$sql = "SELECT nom,prenom,email FROM cdc_personnes,cdc_adherer WHERE cdc_personnes.idpers = ? AND cdc_adherer.idpers = ? AND annee='$aadh' AND idclas IN (2)"; $requete = $bdd->prepare($sql); foreach ( $_POST['envoyer'] as $idpers ) { $requete->execute(array($idpers, $idpers)); if ($donnees2 = $requete->fetch()) { // Adresse email des destinataires $destinataire = $donnees2->email; $prenom = $donnees2->prenom; ... } }
-
-
Bonjour,
Merci c'est gentil de ta part ça fonctionne très bien.
Je me pose juste une question pourquoi dans le tableau execute il y a deux fois "idpers"-
le tableau utilisé dans execute sert à remplacer le(s) ? dans la requête sql.
la requête cherche des enregistrements dans deux tables, et, dans chaque table, elle cherche les enregistrements correspondant à l'idpers dont on s'occupe.
si le SQL avait été écrit comme suit, cela aurait aussi été correct, et le tableau execute aurait contenu une seule fois $idpers.SELECT nom,prenom,email FROM cdc_personnes,cdc_adherer WHERE cdc_personnes.idpers = cdc_adherer.idpers AND annee='$aadh' AND idclas IN (2) AND cdc_personnes.idpers = ?
en y réfléchissant, cela ne sert sans doute à rien de vérifier annee et idclass au moment d'envoyer le mail, donc on pourrait faire simplement:$sql = "SELECT nom,prenom,email FROM cdc_personnes WHERE cdc_personnes.idpers = ? "; $requete = $bdd->prepare($sql); foreach ( $_POST['envoyer'] as $idpers ) { $requete->execute(array($idpers)); if ($donnees2 = $requete->fetch()) { // Adresse email des destinataires $destinataire = $donnees2->email; $prenom = $donnees2->prenom; ... } }
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Encore un grand merci.
Cordialement