dポイントプレゼントキャンペーン実施中!

お世話になります。

http://oshiete1.goo.ne.jp/qa3423046.html
にて質問させて頂いたのですが、追加で以下の質問をさせて頂きたく思います。ぼやけた質問ですので、こういう感じでどうでしょうというアドバイスでも頂ければ幸いでございます。

で、前回アドバイスいただきました事項を参考にさせて頂いて、
DBにて各情報を管理して、メール送信のプログラムはPHPをCRONにて動作させようと考えました。

・メール関連DBテーブル
 -> IDを一意の値として管理する。

postgres=# select * from mail_gen;
id | seireki | tuki | nitiji | jikan | word1 |
----+---------+------+--------+-------+-----------------+
31 | 2008 | 01 | 01 | 00 | メール内容 |

id | integer | not null default nextval



また、HTMLからメール関数の変数を引き継いだ際に、DBでデータ挿入以外にも、日時データをテキストファイルで追加するようにして、

<?
require('../include/init.inc');
$seireki = $_POST{'seireki'};
$tuki = $_POST{'tuki'};
$nitiji = $_POST{'nitiji'};
$jikan = $_POST{'jikan'};
$word1 = $_POST{'word1'};
$sql = "insert into mail_generator
(seireki,tuki,nitiji,jikan,word1,word2,word3)
values
('$seireki','$tuki','$nitiji','$jikan','$word1');";
pg_query("$sql");

$fhn = fopen("./at.txt","a");
fwrite($fhn,$seireki);
fwrite($fhn,"-");
fwrite($fhn,$tuki);
fwrite($fhn,"-");
fwrite($fhn,$nitiji);
fwrite($fhn," ");
fwrite($fhn,$jikan);
fwrite($fhn,":00");
fwrite($fhn,"\n");
fclose($fhn);
?>

ご教示頂いたことを参考にして、at.txtで時間が一致した時に、
指定したメール送信関数を起動させようと思ったのですが、

$now = date("Y-m-d H:i");
$atfile = "at.txt";
$atarr = file($atfile);
 if(count($atarr)>0){
  foreach($atarr as $at){
   if($at == $now) mySendMail();
  }
 }

・at.time
# more attime.txt
2008-01-01 00:00
2008-01-01 00:00

メール送信されるトリガーで、日時の条件だけでは条件として一意ではないため、IDと一致する条件も加えたいと考えております。

なにかうまい?方法はないでしょうか。

A 回答 (2件)

>'H-i-s H:i:00'の形に(snip)


ユーザ側で時間を指定できる仕様であれば
年月日ごとにフォームを分け、PHP側で値を合成してあげると良いです。

[HTML側]
<select name="yyyy">
 <option value="2000">2000年</option>
</select>
<input type="text" name="mm" size=2 maxlength=2 />
(snip..)

[PHP側]
$ymd = sprintf( // ←この前にis_numeric()で検査したほうが良い
 "%04d-%02d-%02d %02d:%02d:00"
 ,$_POST["yyyy"]
 ,$_POST["mm"]
 ,$_POST["dd"]
 ,$_POST["hh"]
 ,$_POST["mi"]
);
$sql .= "in sert into TABLE(id,sendtime) values(".$id.",".$ymd.")";
    • good
    • 0
この回答へのお礼

PHP側で値を合成とは、なるほどです。
うまく動作させることができました。
どうも、ありがとうございます。

お礼日時:2007/10/29 11:28

年月日をDBで持っているならfileを作る必要はないですよ。


内容が同じデータを分散させるのは良い方法ではありません。
それと、DBの日付はdatetime型で持たせたほうが良いかと。

日付のcolumnが sendtime datetime で定義されているとして、

[送信用PHP]
(snip..)
$now = date('H-i-s H:i:00');
$sql = "select word1,word2,word3 from mail_generator ";
 . "where sendtime=to_date('".$now."', 'YYYY-MM-DD HH24:MI:SS')";
(snip..)

こうすることでfileやidを意識することなく必要なデータのみとることが出来るかと。
// 800文字の壁は大きいなぁ・・・


蛇足ですが、$_POSTの値を直接クエリに組み込むのは恐怖です。
せめてpg_escape_string()を噛ましましょう。
あと連想配列は$_POST["seireki"]す。{"seireki"}じゃないす。
    • good
    • 0
この回答へのお礼

なるほど、ご丁寧な回答ありがとうございます。
追加で申し訳ないのですが、DBのdatetimeにHTMLより値を変数に渡す場合の良い方法がありますでしょうか。
'H-i-s H:i:00'の形にして、テキストにてDBに挿入するしかない?でしょうか。

> $_POSTの値を直接クエリに組み込むのは恐怖です。
> せめてpg_escape_string()を噛ましましょう。
ありがとうございます。
インジェクション対策は充分に実施しておきます。

よろしくお願いいたします。

お礼日時:2007/10/24 17:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!