2010-01-05 5 views
0

J'essaie de mettre en place une notification par e-mail pour me rappeler quand une inspection de véhicule est due, de préférence un mois à l'avance. Lorsqu'une date est un mois avant la date dans la table d'inspection due_date, elle doit envoyer le rappel. Votre aide serait grandement appréciée. Voici le code php et MySQL schéma j'ai jusqu'à présent:Rappel par e-mail PHP quand le champ de date est un mois avant la date d'échéance

<?php 
//calling PEAR Mailer 
require_once "Mail.php"; 
?> 
<?php function connect() 
{ 
    require('includes/config.php'); 
    return $conn; 
} 
?> 
<?php 
// Make a MySQL query 
$query = "SELECT * FROM inspection"; 
$result = mysql_query($query) or die(mysql_error()); 
$row = mysql_fetch_array($result) or die(mysql_error()); 
$from = "Server Database <[email protected]>"; 
$to = "me <[email protected]>"; 
//$cc = "another person <[email protected]>"; 
$subject = "Vehicle Inspection Reminder"; 
$body = "echo "The following vehicle is due for inspection:; 
echo $row['vehicle']; 
if (!$conn) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

?>"; 

$host = "mail.server.com"; 
$username = "username"; 
$password = "password"; 

$headers = array ('From' => $from, 
    'To' => $to, 
    'CC' => $cc, 
    'Subject' => $subject); 
$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
    'auth' => true, 
    'username' => $username, 
    'password' => $password)); 

$mail = $smtp->send($to, $headers, $body); 

if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
} else { 
    echo("<p>Message successfully sent!</p>"); 
} 
?> 

schéma MySQL:

`CREATE TABLE IF NOT EXISTS `inspection` (
    `id` int(6) NOT NULL AUTO_INCREMENT, 
    `vehicle` varchar(10) COLLATE utf8_unicode_ci NOT NULL, 
    `last_date` varchar(10) COLLATE utf8_unicode_ci NOT NULL, 
    `due_date` varchar(10) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `vehicle` (`vehicle`,`last_date`,`due_date`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;` 
+0

Où exactement êtes-vous coincé? –

+0

Vous devriez mieux décrire votre problème, essayez de fournir une entrée de test, la sortie attendue, la sortie que votre code génère et, plus important encore: Posez une question concrète. – soulmerge

Répondre

0

Vous êtes sur le bon chemin. La seule chose importante à faire est de créer un travail cron pour votre script PHP pour l'exécuter une fois par jour. Votre script devra vérifier si l'enregistrement est obsolète et ne pas oublier de modifier votre schéma pour contenir le champ booléen "NotificationSent" pour éviter d'envoyer des notifications par courrier tous les jours. Plus sur les emplois Cron: http://www.developertutorials.com/blog/php/running-php-cron-jobs-regular-scheduled-tasks-in-php-172/ Un projet de script:

$request = "SELECT due_date, NotificationSent FROM inspection WHERE due_date>$expected_date AND (NOT NotificationSent)"; 
$res = mysql_query($request); 
while ($somerow = mysql_fetch_assoc($request)) 
{ 
    // ... here you call your mail notification script and set NotificationSent to true for the row 
} 
Questions connexes