Envoi de mail selon checkbox

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 17 nov. 2017 à 22:42
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 18 nov. 2017 à 20:44
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 nov. 2017 à 09:34
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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
18 nov. 2017 à 12:02
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 nov. 2017 à 12:28
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 nov. 2017 à 18:54
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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
18 nov. 2017 à 17:01
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 nov. 2017 à 17:26
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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
18 nov. 2017 à 18:27
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 nov. 2017 à 18:49
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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
18 nov. 2017 à 20:44
Encore un grand merci.
Cordialement
0