Php 通过电子邮件将个人行数据从mysql发送给个人用户
嗨,我有10行,其中包含用户信息及其id和电子邮件。单个用户有多行。现在,我想向所有在一封邮件中包含行数据的用户发送邮件 假设Php 通过电子邮件将个人行数据从mysql发送给个人用户,php,mysql,email,Php,Mysql,Email,嗨,我有10行,其中包含用户信息及其id和电子邮件。单个用户有多行。现在,我想向所有在一封邮件中包含行数据的用户发送邮件 假设 id email item balance 1 1@example.com car 200 2 2@example.com bike 400 3 3@example.com iron 100 1 1@example.com cd 500 3 3@example.com dvd 200 1
id email item balance
1 1@example.com car 200
2 2@example.com bike 400
3 3@example.com iron 100
1 1@example.com cd 500
3 3@example.com dvd 200
1 1@example.com books 300
现在我使用下面的脚本向不同的用户发送多封电子邮件。
这是一个脚本,它为单个用户的所有行发送单独的邮件
我想要id为的user11@example.com将只接收包含与他相关的所有行数据的单个邮件
<?php
$con=mysqli_connect("localhost","root","xx","card");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result2 = mysqli_query($con,"SELECT * FROM mailtest");
while($row = mysqli_fetch_array($result2))
{
$to = $row['email'];
$subject = "subject";
$emailBody="";
$emailBody .= "ID: ".$row['id']."; Item: ".$row['item']."; Balance: ".$row['balance']."; Email: ".$row['email']." \n";
$headers = 'From: Work Pass Notification System <no-reply@someemailaddress>' . "\r\n" .
'Reply-To: someemailaddress' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $emailBody, $headers)) {
echo $emailBody;
echo 'Email sent successfully!';
} else {
echo $emailBody;
die('Failure: Email was not sent!');
}
}
mysqli_close($con);
?>
为什么不将用户的所有信息放入一个数组中,然后循环使用
<?php
$con=mysqli_connect("localhost","root","xx","card");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result2 = mysqli_query($con,"SELECT * FROM mailtest");
while($row = mysqli_fetch_array($result2)){
$send_details[$row['email']] .= "ID: ".$row['Stu_id']."; Pin No: ".$row['Pin_number']."; name: ".$row['name']."; Email: ".$row['email']." \n";
}
foreach($send_details as $email => $body){
// Send the mail
}
您可以在要合并的行上使用。这将为您分组的每个列返回一个csv
SELECT id, email, GROUP_CONCAT(item) as item, GROUP_CONCAT(balance) as balance FROM mailtest GROUP BY id
返回
id email item balance
1 1@example.com car,cd,books 200,500,300
2 2@example.com bike 400
3 3@example.com iron,dvd 100,200
id email item balance
1 1@example.com car,cd,books 1000
2 2@example.com bike 400
3 3@example.com iron,dvd 300
然后可以使用explode()
在php中获取每个值,或者使用任何其他函数处理返回的行数据
您甚至可以将其与组合成balance
列
SELECT id, email, GROUP_CONCAT(item) as item, SUM(balance) as balance FROM mailtest GROUP BY id
返回
id email item balance
1 1@example.com car,cd,books 200,500,300
2 2@example.com bike 400
3 3@example.com iron,dvd 100,200
id email item balance
1 1@example.com car,cd,books 1000
2 2@example.com bike 400
3 3@example.com iron,dvd 300
编辑
这里有一种方法
<?php
$con=mysqli_connect("localhost","root","xx","card");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result2 = mysqli_query($con,"SELECT id, email, GROUP_CONCAT(item) as item, GROUP_CONCAT(balance) as balance FROM mailtest GROUP BY id");
while($row = mysqli_fetch_array($result2))
{
$to = $row['email'];
$subject = "subject";
$emailBody="";
// explode the items/balances on the comma's
$items = explode(',',$row['item']);
$balance = explode(',',$row['balance']);
// Create a line for each item/balance
foreach($items as $key => $item){
$emailBody .= "ID: ".$row['id']."; Item: ".$items[$key]."; Balance: ".$balance[$key]."; Email: ".$row['email']." \n";}
// add a Total Balance line
$emailBody .= "Total Balance: ".array_sum($balance)."\n";
$headers = 'From: Work Pass Notification System <no-reply@someemailaddress>' . "\r\n" .
'Reply-To: someemailaddress' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $emailBody, $headers)) {
echo $emailBody;
echo 'Email sent successfully!';
} else {
echo $emailBody;
die('Failure: Email was not sent!');
}
}
mysqli_close($con);
?>
您可以执行两个嵌套查询(伪代码)
作为在单个字段中获取所有项目的替代用途:
SELECT email, GROUP_CONCAT(item) all_items FROM items GROUP BY email
然后将所有项目
字段放在您的电子邮件中。我认为此代码完整且有一些错误,请更正并发送给我,以便我可以检查。请在我的代码中应用此代码,并告诉我它的外观,我无法理解如何使用它感谢它现在工作请告诉我,不要用逗号发送值,然后我们可以按行发送……id电子邮件项目成本11@example.com汽车20011@example.comcd 500 11@example.com第300册我已经更新了我的答案,告诉我如何分解项目/余额,并为每个项目/余额画一行,最后一行是总余额。我在添加/更改代码的地方添加了行注释(mysql查询除外,这是不言自明的)