2012-03-21 15 views
2

私は在庫mySQLデータベースを持っています。 "qty"が "min"フィールドの数字と等しいか、それよりも小さい場合、警告を出している人に電子メールを送る必要があります。 「数量」が等しいか未満「分」であればmySQLフィールドが値と等しい場合に電子メール通知を送信

誰でもスクリプトを作成する方法を知っていますが、メールが送信されましたか?これはサーバー側で行うことができますか?

エリック

DATABASE NAME: _hero  

TABLE NAME:  CARTONS_CURRENT 
+--------------+--------------+--------+--------+-------------------+---------+ 
| Column     |  Type        |  Null  |  Key   |  Default          |  Extra  | 
+--------------+--------------+--------+--------+-------------------+---------+ 
| orig_time  | timestamp    |  No    |        | CURRENT_TIMESTAMP |         | 
| type    | text     |  No    |        |     |        | 
| part_no     | varchar(20)  |  No    |  Prim  |                   |         | 
| description | varchar(75)  |  No    |     |                   |         | 
| count  | varchar(2)   |  No    |     |                   |        | 
| size   | varchar(30)  |  No    |     |                   |         | 
| min   | int(7)    |  No    |     |                   |        | 
| max   | int(7)    |  No    |     |                   |         | 
| qty         | int(8)       |  No    |        |                   |         | 
+--------------+--------------+--------+--------+-------------------+---------+ 
+2

をこれは、テーブルのトリガのための完璧な状況のように思える、そうでなければ、スクリプトは常に在庫をポーリング持っている必要がありますレベル。 –

+1

@MikePurcell私の最初の考えは「cron job!」でした。私はテーブル・トリガがどのように機能するかを見てみたいと思っています。 – nkorth

+0

私はサーバ側がもっと簡単だろうと思った。在庫レベルが「最小」フィールドよりも大きくなると、ループを回避するためにスクリプトをリセットする必要があります。 – Erik

答えて

2

私はあなたのMySQL/PHPは、Linuxホスト上にある...もしそうなら、これは私の提案であると思います:

まず、データベースをチェックするPHPスクリプトを作成し、条件が満たされた場合は電子メールを送信します。このスクリプトは私の方法でサーバーによって実行可能でなければならないことを覚えておいてください。

/usr/bin/phpの値をあなたのPHPのパスに変更してください(whereis phpまたはこれを見つけるためwhich php

#!/usr/bin/php 
<?php 
//connect to database 
$dbconnect=new mysqli('localhost','username','password','_hero'); 
$result=$dbconnect->query("SELECT `qty`,`min`,`part_no` FROM `CARTONS_CURRENT` WHERE `qty`<=`min`"); 
//if there are any records matching this query we send an email listing each one using 'part_no' as the identifier in this case 
if($result->num_rows>=1) { 
    $email='[email protected]'; 
    $subject = "PRODUCTS OUT OF STOCK"; 
    $message='One or more products are out of stock:\n\n'; 
    while($row=$result->fetch_assoc()) { 
     $message.="{$row['part_no']}\n"; 
    } 
    if(mail($email, $subject, $message)) { 
     //mail successfully sent 
    } else { 
     //mail unsuccessful 
    } 
} 
?> 

)/終了を保存し、ファイルを実行可能に(chmod 700または777を作る

このスクリプトを5分ごとに実行するcronのエントリを作成します。

を210

*/5 * * * * /path/to/phpscript 

あなたのMySQLがLinuxホスト上ではなく、および/または実行可能PHPが設定されていない、あなたはまだ仕事をする上でのPHPスクリプトを使用することができますが、手動でポイントする必要がありいずれかの場合ブラウザをスクリプトの場所に移動したり、そのスクリプトを実行する別の方法を見つけたりできます。私は、構文エディタずにその場でそれを書いたとして

また、宗教的に私のコードを確認してください。..

+0

クローンは私にとって外国人です。 cronがどこに行くかわからない。 – Erik

+0

rootとしてcrontab -eと入力すると、cronテーブルがエディタで開きます。上記のファイルの最後に、/ path/to/phpscriptだけをスクリプトの実際のパスに置き換えて追加します。ファイルを保存/終了すると、crondは5分ごとにそのスクリプトを実行します。 root権限を持たない人やcronを持っていない人は、シェルアクセスがあればデーモンにする方法を教えてください。 –

+0

質問がある場合は直接私に電子メールを送る方法はありますか?私は約2時間でこれを開始しています。あなたがしなければならない場合 – Erik

関連する問題