0

I' currently working on a scheduled task where task scheduler will run the file daily to pick up expiry date 3 months from now and send email to receipient. But at this point of time, I can't seems to think of the correct syntax to do that. This is what I have right now which is only giving me an error.

<?php
//authentication for database
$hostname = "localhost";
$username = "admin";
$password = "xxxxxx";

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
or die("Unable to connect to MySQL");

//select a database to work with
$selected = mysql_select_db("notification",$dbhandle) 
or die("Could not select examples");

//execute the SQL query and return records
$result = mysql_query("SELECT * FROM tbl_lead WHERE pass_expiry >= DATE(NOW() + INTERVAL 3 MONTHS");

//variable for email message
$emailBody = "";
$headers = 'From: Pass Validity Reminder' . "\r\n" .
'Reply-To: myemail@email.com' . "\r\n" .
'Cc: ccemail@Wemail. com' . "\r\n".
'X-Mailer: PHP/' . phpversion();
$to = "myemail@email.com";

//fetch tha data from the database 
while ($row = mysql_fetch_array($result))
{
$subject = $row['company_name']."'s"." work pass is expiry soon";
$emailBody .="Creator: ".$row['rlog_create_user_name']." \n". "Email: ".$row['email']."
\n"."Comment: ".$row['comment']." \n"."Contact: ".$row['contact']." \n";

}

mail($to, $subject, $emailBody, $headers); 

echo 'Email sent successfully!';    
//close the connection
mysql_close($dbhandle);
?>

However, this error keeps coming up and I'm pretty sure there will be an error message also when there's no match. How can I go about perfecting this script?

( ! ) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in
C:\wamp\www\notification\staff\notify2.php on line 27
Call Stack
#   Time    Memory  Function    Location  
1   0.0005  681120  {main}( )   ..\notify2.php:0
2   1.0247  689424  mysql_fetch_array ( )   ..\notify2.php:27

( ! ) Notice: Undefined variable: subject in C:\wamp\www\notification\staff\notify2.php on line34
Call Stack
#   Time    Memory  Function    Location   
1   0.0005  681120  {main}( )   ..\notify2.php:0

I have made the amendment according to @peterm recommendation and the error is gone now. However, now the email still won't send.

I added a check for the email parameters. I had echo out the result before the error message to ensure it pass through the query.

//fetch tha data from the database 
while ($row = mysql_fetch_array($result))
{
$subject = $row['company_name']."'s"." work pass is expiry soon";
$emailBody .= "Company: ".$row['company_name']." \n"."Comment: ".$row['comment']."    
\n"."Contact: ".$row['contact']." \n";
}


if(mail($to, $subject, $emailBody, $headers)) {
echo 'Email sent successfully!';
} else {
echo $emailBody;
die('Failure: Email was not sent!');

}   

The script is suppose to check through every entry in the database and send email for each matching entry. Sorry for the coding in comment, I'm a first time user in stackoverflow and havent been in touch with programming for more than 8 years. Forgetting everything and nv heard of PDO. @peterm.

4

1 に答える 1

1

Your query fails, because SELECT has errors.

Try this one:

SELECT * FROM events WHERE event_date >= DATE(NOW() + INTERVAL 3 MONTH)

You didn't close parenthesis for DATE() function and correct INTERVAL keyword is MONTH.

Now, when a query execution fails mysql_query() returns FALSE instead of a resource. Therefore always check return value before passing $result to mysql_fetch_*:

$result = mysql_query(...);
if (!$result) {
    //handle your error
    die('The query failed.'); //There are certainly better ways to handle it
}
...

And please, stop using mysql_* functions for new code. They are deprecated. Use prepared statements with either PDO or MySQLi. Here is good PDO tutorial.

于 2013-02-28T04:56:24.427 に答える