Page 1 of 1
Newbie Question about mailing from array
Posted: Fri May 29, 2009 9:02 pm
by flapjack
Hello,
I am pulling in data from a database to mail the customers that sign up for my service. Here is the code I have written so far:
$result = mysql_query('SELECT email FROM customers');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
else {$query = "SELECT DISTINCT email FROM customers";
$rcount= @mysql_numrows($result);
$result= mysql_query($query) or suicide(__LINE__, __FILE__, mysql_error());
$row = mysql_fetch_row($result);
echo $rcount;
while ( $r = mysql_fetch_array($locationResult) ) {
echo $value;
$to = $value;
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
if (mail($to, $subject, $body)) {
echo("<p>Message successfully sent!</p>");
} else {
echo("<p>Message delivery failed...</p>");
}
}
}
Can someone help?
Re: Newbie Question about mailing from array
Posted: Fri May 29, 2009 9:36 pm
by mikemike
I'm not sure what you're asking here - is your script not working?
A few points though:
- mysql_numrows isn't a function unless you've created it elsewhere - you might be looking for mysql_num_rows.
- The @ symbol infront of the mysql_numrows function is supressing any errors/warnings it may be producing. This is not recommended, especially when debugging.
- The function 'suicide' isn't a core function, I'm assuming this is your custom function.
- "$locationResult" and "$value" are used but never set
- For something like this where you're probably going to be looping through a large list it's worthwhile using mysql_fetch_assoc over mysql_fetch_row
Your script is all a bit of a mishmash using undefined variables and never calling one's you've defined.
Re: Newbie Question about mailing from array
Posted: Fri May 29, 2009 10:12 pm
by flapjack
Thanks for the quick reply. I am aware of some of the things you said. I am not concerned or troubleshooting that part. When I try and plug $results into a mail function for $to, it tells me that it is the wrong data type. My goal is simply to have a script that pulls info from emails row of customers table and have it mail everyone on it.
The thing about this script that I cannot figure out is when I echo the $results, it only outputs the first line. So it is something simple and stupid that I am missing.
Much of this code is a collection of scripts that I have been troubleshooting with. My first one did not work so I started replacing parts.
Anyone have an suggestions...?
Re: Newbie Question about mailing from array
Posted: Fri May 29, 2009 10:38 pm
by mikemike
Well $results doesn't exist - if you mean $result then that would be a resource, so of course mail() would not accept this.
I suggest some simple debugging like var_dump() any of the variables you think you have a problem with, this will tell you their values and their data types and should make it easier to see what's going on.
Something like this is actually quite simple so I don't think you need to go cutting random pieces of code and putting them together, just take a few minutes to write down some pseudo code and then code it yourself from scratch - that way you'll understand it more and it's a better way to learn.
Re: Newbie Question about mailing from array
Posted: Fri May 29, 2009 11:44 pm
by flapjack
Hey MikeMike,
Yes, I know it is simple. I just need a little guidance. The problem is when I am pulling it from the DB, I am building an array. The mail function will not accept arrays, so I have to convert it to a string. I have search the internet and gone through a few books I bought and I cannot find anything. Hence why I am here in the forums.
If you have any advice on how to look this up, that would be great.
I know for a fact I am using an array and I feel you are answering questions I am not asking. I am learning PHP at the best pace I can and rarely visit the forums for advice. When I do, I am looking for specific advice on how to do something. As you see, I am giving it a shot on my own. I am piecing it togehter in my mind to understand the way I learn.
With that said, I have the script working up to the point of sending it to multiple email addresses. It will send the email to the first address from the DB only. I have tried many things, but just not grasping it. I just need someone to push me in the right direction on the specific issue.
Thanks for your advice in advance.
Re: Newbie Question about mailing from array
Posted: Fri May 29, 2009 11:47 pm
by flapjack
By the way...this is the code I wrote my self. Without the use of any code snippets:
Code: Select all
<?php
require_once('includes/config.inc');
require_once('includes/dbc.inc');
$result = mysql_query('SELECT email FROM customers');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
else {
$query = "SELECT email FROM customers ";
$rcount= mysql_num_rows($result);
$result= mysql_query($query) or suicide(__LINE__, __FILE__, mysql_error());
$row = mysql_fetch_row($result);
foreach ($row as $value) {
$to = $value;
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
if (mail($to, $subject, $body)) {
echo("<p>Message successfully sent!</p>");
} else {
echo("<p>Message delivery failed...</p>");
}
}
}
v
Re: Newbie Question about mailing from array
Posted: Sat May 30, 2009 12:43 am
by mikemike
Ok, well if you know that you're passing an array of values to mail() then you have two options:
1. You could pass eveything to mail() in one string in a comma-seperated list. For example:
Code: Select all
mail('me@example.com, you@example.com, us@example.com', $subject, $body);
In order to do this from an array you'd need to
implode your array - this seperates each entry by a delimiter of your choosing:
Code: Select all
$comma_seperated_list = implode(',', $your_array);
2. You could send a seperate mail() call for each entry in the array using foreach. For example
Code: Select all
foreach($your_array as $email){
mail($email, $subject, $body);
}
This would loop through and send an email to every email address in your array.
This is just a quick idea of where you need to go from here, but I can notice a few things wrong with your code just at quick glance.
Re: Newbie Question about mailing from array
Posted: Sat May 30, 2009 10:31 am
by flapjack
thanks for the advice. Do you have any idea why it is just pulling the first emial from the row?
It should process two seperate emails that I have in there right now, but it is stoping with the first one!
I actually was exploring the implode feature, which an array is seperated buy a => right...so would that be my delimerter?
Re: Newbie Question about mailing from array
Posted: Sat May 30, 2009 10:47 am
by flapjack
So I have cleaned it up a bit but I am still just getting 1 email from the query. The funny thing is if I echo the count, it shows two rows found...
Code: Select all
<?php
require_once('includes/config.inc');
require_once('includes/dbc.inc');
$result = mysql_query('SELECT email FROM customers');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
else {
$query = 'SELECT email FROM customers';
$result2= mysql_query($query)
or suicide(__LINE__, __FILE__, mysql_error());
$row = mysql_fetch_row($result2);
$subject = "Message from Me";
$body = "Hi,\n\nWe just wanted you to know.";
foreach ($row as $value) {
if (mail($value, $subject, $body)) {
echo("<p>Message successfully sent to ". $value ."</p>");
} else {
echo("<p>Message delivery failed...</p>");
}
}
}
?>
When I run the Var Dump, it shows that there is only on value in the array, which makes me wonder if it is my query.
resource(5) of type (mysql result) array(1) { [0]=> string(17) "
admin@test.com" } string(17) "
admin@test.com"
Re: Newbie Question about mailing from array
Posted: Sat May 30, 2009 12:04 pm
by flapjack
Got it... This is how you can take an array and put it into a string list seperated by a comma:
Code: Select all
<?php
require_once('includes/config.inc');
require_once('includes/dbc.inc');
//Define Subject
$subject = "Hello";
//Define Body
$body = "How are you";
//Pull Emials Addresses from DB
$result = mysql_query('SELECT email FROM customers');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
else {
$query = 'SELECT * FROM customers';
$result= mysql_query($query)
or suicide(__LINE__, __FILE__, mysql_error());
if ($row = mysql_fetch_array($result))
{
$to = $row["email"];
$ok = true;
}
while ($row = mysql_fetch_array($result))
{
$to .= ", " . $row["email"];
$ok = true;
}
//Mail It
mail($to, $subject, $body);
}
?>