Envoi de mail selon checkbox

Résolu
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   -  
LaChaux78 Messages postés 583 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
	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);
	}
A voir également:

5 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, je pense que ta page d'envoi de mail ne traite pas correctement la réponse reçue. peux-tu partager ce qu'affiche
var_dump($_POST);
?
 
0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 
Bonjour

Voici l'affichage avec var_dump
array(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
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
en voyant le contenu de $_POST, je me dis que ton formulaire cause l'envoi d'informations inutiles. tu voudras peut-être simplifier cela.
0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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']);
	}
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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;
	...
	}
}
0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 
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"
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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;
	...
	}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 
Encore un grand merci.
Cordialement
0