Probleme avec Foreach et envoi de mail !!

Eléphanteau du PHP | 18 Messages

29 janv. 2011, 01:30

Bonsoir !

Dans le cadre de mon administration , je fais un script listant les membres ayant un champs null , sous la liste , 2 boutons , un pour envoyer un mail a la liste comme quoi le compte va bientot être supprimé si le champs rest null et l'autre envoi de mail pour dire que le compte est supprimé et une requete sql pour purger la base de ces comptes !

Voila ma liste , mes boutons et mes form Hidden
Liste :<br />
<?
echo'<form method="post" action="mail_avert_ad.php">';
$i=0;
$j=0;
while($rows=mysql_fetch_array($result1))
{
echo "<br /><input type='hidden' name='T[".$i++."][email]' value='".$rows["email"]."' />".$rows["login"]." sera averti à l'adresse : ".$rows["email"]."
     "."<br /><input type='hidden' name='R[".$j++."][login]' value='".$rows["login"]."' />";
}
mysql_close();

?>
<br />
<br />

<input type="submit" name="mailavert" value="Avertir les membres que leurs comptes vont être supprimés"/>
<input type="submit" name="mailsupp" value="Avertir & supprimer les  comptes "/>
<br />
<br />
<br />
<form method="post" action="AdMin_menu.php">
<input type="submit" name="" value="Retour au menu"/>
</form>
</center>
Donc la tout va bien ma liste marche super , quand je vais sur mail_avert_ad.php les choses se corsent
<?php
$i=0;
  
    $T = isset($_POST["T"]) ? $_POST["T"] : null;
    if (is_array($T)) foreach ($T as $clee=>$donnees)
    $R = isset($_POST["R"]) ? $_POST["R"] : null;
    if (is_array($R)) foreach ($R as $clee2=>$donnees2)
	{
	{
echo $i++.$donnees2['login'].'&nbsp;&nbsp;'.$donnees['email'].'<br />';
	}
	}
     $destinataire=$donnees['email'];
     $login=$donnees2['login'];
     $nom='x';
		   
     $options = "[email protected]";
     $headers ='From: "nom"<[email protected]>'."\n";
     $headers .='Reply-To: [email protected]'."\n"; 
     $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n"; 
     $headers .='Content-Transfer-Encoding: 8bit'."\n"; 
     $message.= $login.".<br>";
     $message.='Bon courage'."<br>";
     $message.='Cordialement'."<br><br>";
 if(mail($destinataire,'Sujet:wéééé. ',$message,$headers)) 
     { 
     } 


?>
Je fais le test actuellement sur 2 mails et Login , le mail s'expedie bien , mais par exemple j ai [email protected] et [email protected] y recoit son mail sur [email protected] mais il contient le mail de x , et x recoit bien son mail sur [email protected] mais il contient les infos de y !!
J'avoue que la , je sèche !!

QQ1 voit l'erreur ? :)

merci de votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 janv. 2011, 12:32

lu,


pourquoi deux foreach ?

un seul suffit les clés sont censées être identique. d’ailleurs tu n'a pas besoin de les inscrire dans le formulaire, ou si tu tuens à le faire une seul variable suffit !

donc
foreach ( $_POST['T'] as $clee => $data) {
echo $_POST['R'][ $clee ], $data;
}

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

29 janv. 2011, 22:40

Super merci de ton aide !! Les mails s'envoient bien au bon expediteur , mais si je veux faire intervenir le LOGIN , ça ne marche pas !!

En fait avec ton foreach j'ai déclaré la variable expediteur , en sortie du foreach tout le reste du mail !!
J'ai tenté de faire un autre foreach indépendant pour sortir le login , associé au mail !

foreach ( $_POST['T'] as $clee => $data) {
echo $_POST['R'][ $clee ],'&nbsp;&nbsp;'. $data.'<br />';
     $destinataire=$data;
}
foreach ( $_POST['R'] as $clee2 => $login) {
     $loginmail=$login;
}
     $nom='x';
		
     $headers ='From: "nom"<[email protected]>'."\n";
     $headers .='Reply-To: [email protected]'."\n"; 
     $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n"; 
     $headers .='Content-Transfer-Encoding: 8bit'."\n"; 
     $message.='Bonjour '.$loginmail.','."<br>";
     $message.='Cordialement'."<br><br>";
  
     if(mail($destinataire,'Sujet:x. ',$message,$headers)) 
     { 
	 echo 'mail envoyé';
     } 
     else 
     { 
	 echo 'erreur d\'envoi';
     } 
Du coup j'ai le mail qui s'envoi aux bonnes adresses mais les logins sont tous l'ARRAY 1 , le 0 est sauté j'ai l'impression !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 janv. 2011, 00:12

ou alors avec un seul foreach comme indiqué plus haut
<?php
foreach ( $_POST['R'] as $clef => $login) {
     $headers ='From: "nom"<[email protected]>'."\n";
     $headers .='Reply-To: [email protected]'."\n";
     $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
     $headers .='Content-Transfer-Encoding: 8bit'."\n";
     $message.='Bonjour '.$login.','."<br>";
     $message.='Cordialement'."<br><br>";
     if(mail($_POST['T'][ $clef ],'Sujet:x. ',$message,$headers)){
         echo 'mail envoyé';
     }
     else{
         echo 'erreur d\'envoi';
     }
}
 ?>
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

30 janv. 2011, 02:27

Arf j'ai du mal , je comprend tout ce que je fais et ce que vous m'avez indiqué !!

Le mail s'envoie bien , mais le Login est toujours celui de l'array 1 du tableau R !

Je suis completement pommé !!

Là je fais un test sur 2 mails !

mail : [email protected] login: pierre
mail : [email protected] login: emma

j'ai 2 input en hidden ;
le premier a pour name name="T[]' et value une extration en base $rows['mail']
le deuxieme a pour name name="R[]' et value une extration en base $rows['login']

Tout est bien envoyé , car le print du tableau me montre bien

TABLEAU T
Array [0]--> [email protected]
Array [1]--> [email protected]

TABLEAU R
Array [0]--> pierre
Array [1]--> emma


Etrangement je n'ai aucun pb pour envoyer le mail a la bonne adresse , mais pour afficher le login approprié ... la c'est autre chose !!
Si je décide de pas mettre le login , tout marche et je vais me coucher , mais le mail est trop impersonnel !

Si je met le corp du mail dans le foreach tu TAB T , je recois un mail sans pb
si je met le corp du mail dans un foreach TAB R qui lui est dans un foreach TAB T , je recois mon mail mais avec un message pour Pierre et dessous le meme pour Emma !

si je fais une declaration $destinataire= les valeurs de T dans le foreach du TAB T , ça marche
si je fais une declaration $login dans le foreach du TAB R , j'ai mes mails mais uniquement avec l'array 1 , il zappe le 0 !!

Comment je peux faire pour que le mail soit envoyé avec la valeur ARRAY 0 du tableau T , au nom login avec la valeur ARRAY 0 du tableau R !! qui sont identiques !

Je me met aux tableaux en ce moment , je perd mes cheveux !! :p

merci en tout cas

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 janv. 2011, 13:35

ben comme j'ai fait les clef sotn identique !

vire la fonction mail dans le dernier que je t'ai fournis et utilise simplement un echo $message, $login,$_POST['T'][ $clef ],'<hr />';

tu devrais avoir toute tes infos !


@+
Il en faut peu pour être heureux ......