2013-09-25 2 views
1

В настоящее время я разрабатываю систему, которая будет уведомлять пользователя о том, что в ближайшее время гарантия их продукта истекла. Если дата меньше 45 дней, тогда мне будет автоматически отправлено электронное письмо. Пока я использую ниже код для отправки электронной почты. Он может работать без проблем.Код для чтения каждой строки даты в таблице базы данных

$days = (strtotime("2013-9-23") - strtotime(date("Y-m-d")))/(60 * 60 * 24); 
if ($days<45) 
    include 'sendmail.php'; 
else { 
    echo "Problem!"; 
} 

Это может быть невозможно скопировать дату по одному. Итак, я думаю, что система может читать каждую строку даты в самой таблице, но я не собираюсь это делать. Что я должен делать, так что приведенный выше код может считывать данные без конкретных его как «2013-9-23» и т.д.

Мой полный код:

// set database server access variables: 
$host = "localhost"; 
$user = "root"; 
$pass = ""; 
$db = "master_inventory"; 

// open connection 
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 

// select database 
mysql_select_db($db) or die ("Unable to select database!"); 


// create query 
$query = 'SELECT Lap_PC_Name, Lap_War_Expiry FROM laptop'; 
$date = 'SELECT Lap_War_Expiry FROM laptop'; 
// execute query 
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

// see if any rows were returned 
if (mysql_num_rows($result) > 0) 

$days = (strtotime($date) - strtotime(date("Y-m-d")))/(60 * 60 * 24); 
if ($days<45) 
    include 'sendmail.php'; 
else { 
    echo "Problem!"; 
} 

while($row = mysql_fetch_array($result)) { 
    $Lap_PC_Name = $row['Lap_PC_Name']; 
    $Lap_War_Expiry = $row['Lap_War_Expiry']; 
} 

Мой sendmail.php код:

<?php 
// set database server access variables: 
$host = "localhost"; 
$user = "root"; 
$pass = ""; 
$db = "master_inventory"; 

// open connection 
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 

// select database 
mysql_select_db($db) or die ("Unable to select database!"); 

// create query 
$query = "SELECT * FROM laptop"; 

// execute query 
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

// see if any rows were returned 
if (mysql_num_rows($result) > 10) { 
    for ($query=1; $query<=$result; $query++){ 
     while($row = mysql_fetch_array($result)) { 
      $Lap_PC_Name = $row['Lap_PC_Name']; 
      $Lap_War_Expiry = $row['Lap_War_Expiry']; 
     } 
    } 
    $to  = '[email protected]'; 
    $subject = 'Testing sendmail'; 
    $message = 'The Following licensed will expired in less than one month. PC   
    Name:'.$Lap_PC_Name. '.The license will expire on '.$Lap_War_Expiry; 
    $headers = 'From: [email protected]'; 

    if (mail($to, $subject, $message, $headers)) { 
     echo "Email sent."; 
    } 
    else { 
     echo "Email sending failed."; 
    } 
} 
?> 
+0

Ваш вопрос непонятен. Пожалуйста, обновите свой вопрос с подробностями и большим количеством кода. –

+0

@sala Uddin Я отредактировал мой вопрос и объяснил больше об этом. Спасибо, что упомянул. – user2810332

ответ

0

Вы должны дать более подробную информацию. Откуда берутся ваши данные? В любом случае, когда вам нужно отфильтровать данные, вы можете отфильтровать их в разных местах: когда вы получаете данные (когда это возможно) или после получения данных.

Например, если данные поступают из базы данных, у вас есть выбор: 1/использовать запрос SQL, чтобы получить только соответствующие данные, а затем отправить mailfor этих случаев.

sample SQL code given by liyakat (see above) 

2/получить все ДАННЫЕ из базы данных, и обрабатывать каждую строку с кодом, заменив жесткий кодированную дату с датой из базы данных.

foreach($db_results as $row) { 
    $days = (strtotime($row['date']) - strtotime(date("Y-m-d")))/ (60 * 60 * 24); 
    if ($days < 45) { 
     include 'sendmail.php'; 
    else { 
     echo "Problem!"; 
    } 
} 

Первое решение является более производительным, так как вы не должны получать и обрабатывать все ДАННЫЕ.

+0

Я обновил свой вопрос с полным кодированием. Можете ли вы подробнее рассказать о ** $ db_results как $ row **? Что я должен объявить с ним? К сожалению, я все еще новичок в php и разработке системы. – user2810332

+0

Это был ярлык, чтобы сказать, что для каждой строки базы данных результата необходимо проверить поле даты. Вы можете перенести свой тестовый код даты (ваш первый фрагмент кода) внутри цикла while (чтобы проверить каждую строку). Тогда ваш тест будет против $ row ['Lap_War_Expiry']. – Armage

+0

Спасибо вам и Likayat за отличный ответ. Я запускаю код уже, но он будет печатать только одни данные из таблицы. Можете ли вы дать мне представление о том, как отображать все данные, которые меньше 45? – user2810332

1

вы можете сделать это с MySQL это будет хороший подход

CREATE TABLE t (d1 timestamp, d2 timestamp); 

INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 05:00:00'); 
INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 13:00:00'); 
INSERT INTO t VALUES ('2010-03-11 00:00:00', '2010-03-30 13:00:00'); 
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-03-30 13:00:00'); 
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-04-01 13:00:00'); 

SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t; 

+---------------------+---------------------+------+ 
| d2     | d1     | diff | 
+---------------------+---------------------+------+ 
| 2010-03-30 05:00:00 | 2010-03-11 12:00:00 | 19 | 
| 2010-03-30 13:00:00 | 2010-03-11 12:00:00 | 19 | 
| 2010-03-30 13:00:00 | 2010-03-11 00:00:00 | 19 | 
| 2010-03-30 13:00:00 | 2010-03-10 12:00:00 | 20 | 
| 2010-04-01 13:00:00 | 2010-03-10 12:00:00 | 22 | 
+---------------------+---------------------+------+ 
5 rows in set (0.00 sec) 

или же вы можете добавить запрос как

SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t where DATEDIFF(d2, d1) < 45 ; 
0
// $date is get from table 
$days = (strtotime($date) - strtotime(date("Y-m-d")))/ (60 * 60 * 24); 
if ($days < 45) { 
    include 'sendmail.php'; 
else { 
    echo "Problem!"; 
} 
+0

Спасибо за блестящую идею. После того, как я отредактировал код, отправленное мне сообщение электронной почты содержит только одну информацию из таблицы. Это должно быть несколько данных. Я обновил свой вопрос. Не могли бы вы проверить, где мне не хватает? Заранее спасибо ! – user2810332

Смежные вопросы