什么都不发送时发送的php邮件

时间:2018-06-14 06:44:51

标签: php mysqli

下面的PHP每晚都会从cronjob运行。但它仍然发送邮件,尽管没有任何东西可以发送。 因此,如果$ initialsearch为空,则不应发送邮件。我尝试了不同的方法来阻止这种方法在最后将if语句反转为尝试从initialsearch中计算行,但每次发送邮件时都是如此。 所以我只希望这个脚本在$ initialseach包含结果时发送邮件,否则什么都不做。

<?php
include ('adbfile.php');

$to = "me.mail.com";
$subject = "Device Alert";
$subject .= date("H:i:s d:M:Y");
$from = "this.mail.com";
$message = '';  // start with empty string
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: '.$from."\r\n".
    'Reply-To: '.$from."\r\n" .
    'X-Mailer: PHP/' . phpversion();

$initialsearch = mysqli_query($link, "SELECT * FROM mydevices where devicename like '123%' and Level = 0");

$message .='';
$message .= '<html><body>';
$message .='<h1 style="color:#f66;"Device Alert.</h1>';

//$id is previously defined as the users id 
while($row = mysqli_fetch_array($initialsearch))
{
     $devicename = $row['DeviceName'];
     $devicenumber = $row['DeviceNumber'];
     $devicelevel = $row['DeviceLevel'];

$message .= '<p style="color:#f80;">'.$devicename.' '.$devicenumber.' '.$devicelevel.'</p>';
$message .= '</body></html>';
}
$message .= 'device alert system.';

if (empty($initialsearch)) {
    echo ("There is nothing to send");
} else {
    (mail($to, $subject, $message, $headers));
}
?>

最后的if语句我已经多次改变并以不同的方式完成但到目前为止没有任何工作。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

mysqli_query返回一种混合数据类型。 因此,empty($initialsearch}可能不会返回空数据类型值。

而是你可以尝试if语句如下:

将变量$devicename = NULL声明为while循环。

if($devicename === NULL)

尚未尝试过,请告诉我它是否有效。

答案 1 :(得分:0)

您可以使用mysqli_num_rows检查空结果:

$initialsearch = mysqli_query($link, "SELECT * FROM mydevices ....");

// check for empty result
if (mysqli_num_rows($initialsearch) == 0) {
    echo ("There is nothing to send");
} else {
    ....

    // while loop to get results
    while($row = mysqli_fetch_array($initialsearch)) {
         ....
    }

    // send email
    .....
}