03-09-2008, 03:50 PM
Bonjour.Je reviens avec mes histoires :p
Je viens de finir ma messagerie privée, avec un tas de fonctionnalité, un code à moi tout beau (surement illisible^^)
Mais j'aimerai permettre d'envoyer un message à plusieurs personne en même temps. Pour cela j'ai crée un formulaire html de <select multiple>
Mais là maintenant je suis completement perdu...A force de mettre des conditions et d'autres boucles pour le traitement des données, je ne sais pas où mettre (ni vraiment si c'est comme ca qu'il faut faire) ma boucle for pour que chaque $_POST['destinataire'] recoivent un mail/et le message dans leur boite(les actions du traitement quoi...).
Je viens de finir ma messagerie privée, avec un tas de fonctionnalité, un code à moi tout beau (surement illisible^^)
Mais j'aimerai permettre d'envoyer un message à plusieurs personne en même temps. Pour cela j'ai crée un formulaire html de <select multiple>
Mais là maintenant je suis completement perdu...A force de mettre des conditions et d'autres boucles pour le traitement des données, je ne sais pas où mettre (ni vraiment si c'est comme ca qu'il faut faire) ma boucle for pour que chaque $_POST['destinataire'] recoivent un mail/et le message dans leur boite(les actions du traitement quoi...).
Code PHP :
<?php
<SELECT NAME="destinataire" MULTIPLE="multiple" SIZE=9>
<?php $pays = mysql_query("SELECT paysdispo FROM pays");
while($payss = mysql_fetch_array($pays)) {?>
<option><?php echo''.$payss['paysdispo'].'';}?>
<OPTION SELECTED><?php echo''.$donnees_reponse['expediteur'].''; ?>
</SELECT>
</fieldset>
<input type="submit" value="Envoyer le message" />
</form>
<?php
}
}
// sinon si la variable $_GET['action'] est égale à 'traitement' alors on traite les données envoyées par le fomulaire
elseif(isset($_GET['action']) AND $_GET['action'] == 'traitement' AND $_SESSION['login'] == true)
{
// si le message le sujet et le destinataire ne sont pas vide
if(!empty($_POST['sujet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']))
{
// on regarde si il existe une entrée avec le pseudo du destinataire
$nbr_entree = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM pays WHERE paysdispo='".$_POST['destinataire']."'")or die(mysql_error());
$nbr_entrees = mysql_fetch_array($nbr_entree);
// si il existe
if($nbr_entrees['nbre_entrees'] == 1)
{
// on sécurise les valeurs envoyées
$sujet = addslashes(htmlentities($_POST['sujet']));
$destinataire = addslashes(htmlentities($_POST['destinataire']));
$message = addslashes(nl2br(htmlentities($_POST['message'])));
$expedteur = mysql_query("SELECT paysjoue from membres_tbl where Login ='".$_SESSION['login']."'");
$expediteur = mysql_fetch_array($expedteur);
$timestamp = time();
// on récupère le dernier message envoyé au destinataire
$retour = mysql_query("SELECT destinataire, sujet, message FROM mp WHERE expediteur='".$expediteur['paysjoue']."' ORDER BY id DESC LIMIT 0,1");
$donnees = mysql_fetch_array($retour);
// si c'est le même que celui qu'on veut envoyer
if($donnees['destinataire'] == $destinataire AND $donnees['sujet'] == $sujet AND $donnees['message'] == $message)
{
// on l'enregistre pas et on affiche un message d'erreur
echo 'Vous ne pouvez pas poster le même message 2 fois d\'affilée';
}
// sinon ce n'est pas un double post
else
{
// alors on enregistre dans la base de données
mysql_query("INSERT INTO mp(sujet, expediteur, destinataire, message, timestamp, vu, efface) VALUES('" . $sujet . "', '" . $expediteur['paysjoue'] . "', '" . $destinataire . "', '" . $message . "', '" . $timestamp . "', '0', '0')")or die(mysql_error());
// on met un message
echo 'Votre message a bien été envoyé à '.$destinataire.'. Vous allez être redirigé vers votre boîte de réception dans une seconde.';
// et on redirige vers la boîte de réception
$mailto = mysql_query('SELECT Password, mail, email FROM membres_tbl WHERE Login = "'. $_SESSION['login'].'"') or die (mysql_error());
if($mailtop['email']==oui){
while ($mailtop = mysql_fetch_array($mailto)) {
$mail = $mailtop['mail']; // c'est la personne qui recevra le message !
$sujet ='Nouveau message'; // pas besoin de commenter ça -_-
$from = $expediteur; // c'est le nom du contact qui sera affiché
$from_mail = 'stephane.delatorre@gmail.com'; // c'est l'adresse à partir de laquelle le mail est envoyé, veillez à ce que l'adresse existe bien
$headers = "From: \"$from\"<$from_mail>\n";
$headers .='Reply-To: stephane.delatorre@gmail.com'."\n"; // c'est l'adresse utilisée pour la réponse , laissez la même que pour l'envoi, ça évite les soucis
$headers .= "MIME-Version: 1.0\n";
$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$txt .= "Vous avez reçu un nouveau message dans votre boite de réception. Il vient de '".$destinataire."'.
http://lantimonde.free.fr/identification.php . Si vous ne souhaitez plus en être informé, aller le modifier dans votre profil. ";
mail($mail, $sujet, $txt, $headers)or die (mysql_error());
}
}
redirection('boitedereception.php');
}
}
// sinon le membre n'est pas enregistré dans la table
else
{
// alors on affiche un message d'erreur
echo 'Le membre à qui vous souhaitez envoyer ce message n\'existe pas/plus. Vous allez être redirigé vers votre boîte de réception dans 2 secondes';
// et on redirige vers la boîte de réception
redirection('boitedereception.php');
}
}
// sinon tous les champs sont pas remplis
else
{
// alors on affiche un message d'erreur et un lien
echo 'Vous devez remplir tout les champs. <a href="ecriremp.php?action=ecrire">Recommencer</a>.';
}
}
?>
Je vous remercie d'avance si vous pouviez me donner une petite piste...de où placer "for($i = 0; $i < count($destinataire); $i++)"
Enfin si déjà c'est la bonne façon de faire que de faire un for au lieu d'un while ou d'un foreach...