Jump to content

Send Email With New Row Data - One Email Only?


Recommended Posts

The code below currently sends a separate Email with data from each row of a table when a Save All button is pressed. So, if I have 4 rows of data, 4 Email will be sent.

I would prefer to receive one Email with 4 sections of data. Any help greatly appreciated.

$email="to@email.com";
$from="from@email.com";
$msg="";
$subject="Registers Info for: ".$values["first_name"]." ".$values["last_name"]."";
 
$msg.= "Student: ".$values["first_name"]." ".$values["last_name"]."\r\n";
$msg.= "Absent or Present: ".$values["attendance_status"]."\r\n";
$msg.= "Class: ".$values["classname"]."\r\n";
$msg.= "Class Date: ".$values["attendance_date"]."\r\n";
$msg.= "Amount Received: ".$values["cash_received"]."\r\n";
$msg.= "Paid For: ".$values["cash_whatfor"]."\r\n";
 
$ret=runner_mail(array('to' => $email, 'subject' => $subject, 'body' => $msg, 'from'=>$from));
if(!$ret["Sent"])
echo $ret["message"];

 

 

Edited by leemo

You haven't shown the loop that must be present, but regardless

Move the variable initialization to before the loop, keep inside the loop the thing that builds the body of the email message, and move the actual sending of the email to after the loop.

Thanks for your replies. I'm trying so hard as a noob to work my way around things on my own and it's a great feeling when things work. It took me 2 days to get as far as this 🙂

I've tried the magic curly brackets before and after the actual message section, do I also need to add something similar to this:

while ($msg = mysqli_fetch_array($result)) - before the message section and I'm guessing I need something at the end also?
 

{
$email="to@email.com";
$from="from@email.com";
$msg="";
$subject="Registers Info for: ".$values["classname"]." ".$values["attendance_date"]."";

while ($msg = mysqli_fetch_array($result))
{
$msg.= "Student: ".$values["first_name"]." ".$values["last_name"]."\r\n";
$msg.= "Absent or Present: ".$values["attendance_status"]."\r\n";
$msg.= "Class: ".$values["classname"]."\r\n";
$msg.= "Class Date: ".$values["attendance_date"]."\r\n";
$msg.= "Amount Received: ".$values["cash_received"]."\r\n";
$msg.= "Paid For: ".$values["cash_whatfor"]."\r\n";
}
$ret=runner_mail(array('to' => $email, 'subject' => $subject, 'body' => $msg, 'from'=>$from));

}

This isn't correct, but I'm doing my best!

Edited by leemo
$subject="Registers Info for: ".$values["classname"]." ".$values["attendance_date"]."";

while ($msg = mysqli_fetch_array($result))
{

$values isn't available to use until you get to the while loop.

You didn't post the part of the code that shows what query is being run so I don't know whether you're doing a query that makes sense for that subject line - that is, whether it's a query for a specific class and attendance date. (Which used to be the student name in your original version...?) So if you want the classname and attendance_date, you should get those values from, presumably, the same place that the query was getting them from.

Either that, or you send one email each. You'd be sending multiple emails, but only one for each classname/attendance_date combination. Again, not sure since you haven't posted the code that would help explain what's going on. Hint.

1. As you are putting multiple names in the message it doesn't make sense to include (one of) them in the subject.

2. Your while loop should be

while ($values = mysqli_fetch_array($result))
{

otherwise you trash the $msg variable by overwriting it.

Edited by Barand

As stated in the first post I am receiving all the information correctly but in separate Emails. My results are between 1-20 records, which of course is 1-20 Emails.

Requinix I have changed the subject variable to make more sense if receving one Email.

I need to loop the information in the $msg.= sections into one email. I have added:

while ($values = mysqli_fetch_array($result))

and put the area I need looped in curly brackets, not sure if that is the correct way to do it. But, as the code stands below I am not receiving any Emails at all.

$email="lee@fisteps.com";
$from="db@fisteps.com";
$msg="";
$subject="Registers Info for: ".$values["classname"]." ".$values["attendance_date"]."";
while ($values = mysqli_fetch_array($result))
{
$msg.= "Student: ".$values["first_name"]." ".$values["last_name"]."\r\n";
$msg.= "Absent or Present: ".$values["attendance_status"]."\r\n";
$msg.= "Class: ".$values["classname"]."\r\n";
$msg.= "Class Date: ".$values["attendance_date"]."\r\n";
$msg.= "Amount Received: ".$values["cash_received"]."\r\n";
$msg.= "Paid For: ".$values["cash_whatfor"]."\r\n";
}
$ret=runner_mail(array('to' => $email, 'subject' => $subject, 'body' => $msg, 'from'=>$from));
SELECT
attendance.attendance_id,
attendance.student_id,
attendance.class_id,
attendance.attendance_status,
attendance.attendance_date,
attendance.cash_received,
attendance.cash_whatfor,
students.last_name,
students.first_name,
classes.classname
FROM attendance
INNER JOIN classes ON attendance.class_id = classes.class_id
INNER JOIN students ON attendance.student_id = students.student_id
ORDER BY students.last_name

 

It sounds like you've got something working. (which is a plus) and now just need to tweak it to for your specifications.

There are many more qualified coders here than me, but here's my opinion.

If I understand your dilemma, you are receiving one email per student but would prefer receive a single email with the information of all the students.

I would suggest adding an IF statement that surrounds the entirety of your applicable code.

You can either ADD another column (maybe MEMBER) and sort through with the IF statement.

Or, analyze an existing column that is applicant (maybe attendanc_date).

So, if attendence_date is March 1 [2020-03-01] THEN put the six lines of $msg into the body of the email, otherwise, skip the row.

You will want to add an additional \n at the end of your $msg to make the email body more presentable and break up the information.

Also, in this instance, make sure your$ret is pristine correctly to avoid sending multiple emails with the same content.

Good luck.

 

Edited by phppup
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.