2012-11-28 35 views
0

可能重複:
Notification 7 Days Before Payment PHP No Error Message前7天到期還款通知並沒有收到錯誤/沒有Email

所以我必須每天對cron的運行PHP腳本。如果是在付款前7天作爲提醒,那麼假設檢查日期併發送電子郵件。非常感謝。我會說什麼問題是,但我沒有得到任何錯誤信息或任何東西..它不會發送電子郵件。

<?php 
mysqli_connect("xxxxxx", "xxxxxxx", "xxxxxxxxx") or die(mysqli_error()); 
mysqli_select_db("xxxxxxxxx") or die(mysqli_error()); 
//Retrieve original payment dates and enter them into an array 
$result = mysqli_query("SELECT DateCreated FROM UserTable"); 
$payment_dates = mysqli_fetch_array($result); 

//Puts original payment date into month-day format 
$md_payment_dates = substr($payment_dates, 5); 

//Gets todays date in m-d format and adds 7 days to it 
$due_date = mktime(0, 0, 0, date("m"), date("d")+7); 

//Checks if any payment days match today's date. If there are none it script will stop. 
if (count(preg_grep($due_date, $md_payment_dates)) > 0) { 
//Retrieves usernames of users that have an invoice due. 
$users_to_pay = mysqli_fetch_array("SELECT Username IN UserTable WHERE DateCreated = $date"); 

//Notifies you via email 
$to = "[email protected]"; 
$subject = "7 Day Payment Reminder"; 
$message = "Hi, <br /> The following owe a payment in 7 days : " + $users_to_pay ".<br/> Their payments are due on " + $md_payment_dates " of this year."; 

mail($to, $subject, $message); 
exit(); 

}else{ 
exit(); 
} 
?> 

回答

0

你需要使用FROM而不是IN

$users_to_pay = mysqli_fetch_array("SELECT Username FROM UserTable WHERE DateCreated = '$due_date'"); 

和日期應與單引號引起來,因爲它是不是數字。

請注意,您的查詢很容易受到SQL Injection的影響。請閱讀下面的鏈接從它來保護,

+0

仍然無法使用! :O感謝 – user1858672

+0

嘗試'WHERE DATE(DateCreated)= DATE('$ due_date')' –

0

有,我看到了一些東西。

  1. 你只打算返回1行,當你使用 -

    $payment_dates = mysqli_fetch_array($result); 
    

你可能想改變它TO-

while ($payment_dates = mysqli_fetch_array($result)){ 
.... //the rest of your code 
} 

這樣,它遍歷每個你的行。

  1. 您在2查詢中有2個錯誤。將IN更改爲FROM。並將$date更改爲'$due_date'

    $users_to_pay = mysqli_fetch_array($connection, "SELECT Username FROM UserTable WHERE DateCreated = '$due_date'"); 
    
0

不知道這是正確的答案,但我認爲這就是問題所在:

如果這是你完整的代碼,那麼你數組和字符串之間的混合。

$payment_dates = mysqli_fetch_array($result); 

那一個返回一個數組,它使得substr()函數不能工作,因爲它需要字符串而不是數組。 http://id1.php.net/manual/en/function.substr.php

$md_payment_dates = substr($payment_dates, 5); 

這條線不會工作。

而且你的$ date變量剛出來的不知從何處

$users_to_pay = mysqli_fetch_array("SELECT Username FROM UserTable WHERE DateCreated = $date"); 

再次,上面的代碼返回一個數組,所以你的郵件線可能是錯誤或包含迷惑收件人錯誤代碼。

$message = "Hi, <br /> The following owe a payment in 7 days : " + $users_to_pay ".<br/> Their payments are due on " + $md_payment_dates " of this year."; 

我認爲更好的解決方案是「提取」所有的數組,並通過字符串做函數字符串。

是的,在SQL查詢中使用「從」聲明

我知道這只是一個框架,而不是完整的代碼,但希望這有助於。

$due_date = mktime(0, 0, 0, date("m"), date("d")+7); 
$md_payment_dates=array(); 
$error_dates=array(); 
foreach($payment_dates as $payment_date){ 
    array_push($md_payment_dates,substr($payment_date, 5)); 
    if (count(preg_grep($due_date, $payment_date)) > 0) array_push($error_dates,$payment_date); 
} 

foreach($error_dates as $error_date){ 
    $users_to_pay = mysqli_fetch_array("SELECT Username FROM UserTable WHERE DateCreated = ".$error_date); 
    foreach($users_to_pay as $user){ 
     mail(); 
    } 
}