• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:続・指定した時間にPHPプログラムを実施)

指定した時間にPHPプログラムを実施する方法

このQ&Aのポイント
  • 指定した時間にPHPプログラムを実施する方法を教えてください。
  • DBに情報を管理し、CRONを使用して指定した時間にメール送信プログラムを実行します。
  • 日時条件とIDを組み合わせてメール送信のトリガーを設定する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.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.")";

hokuhoku7
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

年月日を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"}じゃないす。

hokuhoku7
質問者

お礼

なるほど、ご丁寧な回答ありがとうございます。 追加で申し訳ないのですが、DBのdatetimeにHTMLより値を変数に渡す場合の良い方法がありますでしょうか。 'H-i-s H:i:00'の形にして、テキストにてDBに挿入するしかない?でしょうか。 > $_POSTの値を直接クエリに組み込むのは恐怖です。 > せめてpg_escape_string()を噛ましましょう。 ありがとうございます。 インジェクション対策は充分に実施しておきます。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 指定した時間にPHPプログラムを実施

    以下、メール送信のプログラムがあるのですが、 ATコマンドのようなものを使用して、指定された時間にPHPのメール送信プログラムが動作するようにしたいと考えています。無理でしょうか。 ## `at -t $seireki$tuki$niti$jikan` とかで可能?? 指定した時間にPHPプログラムを実施する良い方法があれば、ご教示頂けければと思います。ぼやけた質問で申し訳ありません。 <? ## PHP Version5のため、変数の事前定義。 $email = $_POST{'email'}; $word1 = $_POST{'word1'}; $word2 = $_POST{'word2'}; $word3 = $_POST{'word3'}; $seireki = $_POST{'seireki'}; $tuki = $_POST{'tuki'}; $niti = $_POST{'niti'}; $jikan = $_POST{'jikan'}; ## 以下、メール送信 $mail_to = "$email"; $mail_from = "test@test.co.jp"; $mail_bcc = "test@test.co.jp"; $mail_from_title = mb_encode_mimeheader("TEST___")."<".$mail_from.">"; $mail_xmailer = "PHP-" . phpversion(); $mail_subject = mb_encode_mimeheader("TEST"); $mail_body = $mail_body . "\n"; $mail_body = $mail_body . "\n"; $mail_body = $mail_body . "\n"; $mail_encode = "EUC-JP"; $mail_body = mb_convert_encoding($mail_body, $mail_encode); $mail_header_array["X-Mailer"] = $mail_xmailer; $mail_header_array["From"] = $mail_from_title; $mail_header_array["Bcc"] = $mail_bcc; foreach($mail_header_array as $key => $value){ $mail_header .= $key . ": " . $value . "\r\n"; } $mail_result = @mb_send_mail($mail_to, $mail_subject, $mail_body, $mail_header, "-f" . $mail_from); if(!$mail_result){ die("メールを送信できません\n"); } ?>

    • ベストアンサー
    • PHP
  • PHPでの変数引渡しに関して

    "HTML -> PHP1 -> PHP2"という順序で変数の引渡しを行いたいと考えております。 "HTML -> PHP1"への変数引渡しは正常なのですが、"PHP1 -> PHP2"への変数引渡しがうまくいかない状態です。 1) "HTML -> PHP1" ・HTML <form name="toroku" method="POST" action="result.phtml">  <input type="text" name="word1" size="34"></td></tr>  <input type="text" name="word2" size="34"></td></tr>  ・・・・ </form> ・PHP1(result.phtml) <? require('../include/init.inc'); $word1 = $_POST{'word1'}; $word2 = $_POST{'word2'}; $word3 = $_POST{'word3'}; $email = $_POST{'word7'}; $word8 = $_POST{'word8'}; $seireki = $_POST{'seireki'}; $tuki = $_POST{'tuki'}; $nitiji = $_POST{'nitiji'}; $result = pg_query($con, "select .........."); $rows = pg_num_rows($result); var_dump($HTTP_POST_VARS); ?> <FORM action="./result2.phtml" method="post"></FORM> ・結果 array(8) { ["word1"]=> string(6) "テスト"       ["word2"]=> string(6) "テスト"       ["word3"]=> string(6) "テスト"       ["word7"]=> string(16) "test1@test.co.jp"       ["word8"]=> string(16) "test1@test.co.jp"       ["seireki"]=> string(4) "2008"       ["tuki"]=> string(2)"01"       ["nitiji"]=> string(2) "01" } 2) "PHP1 -> PHP2" ・PHP2 <? var_dump($HTTP_POST_VARS); ?> ・結果 array(0) { } 2)でHTMLの変数を継続して渡したいのです。 ご存知のかたがいたしたら、ご教示頂ければと思います。

    • ベストアンサー
    • PHP
  • PHPボタンの判定が正常に機能しません

    phpによるWEBアプリケーションスーパーサンプルという参考書を用いて データ更新・削除プログラムを作成したのですが、データベースにつないだ後の作業として下記のソースを打ち込んだのですが削除・更新ボタンのどちらをを押しても削除ボタンの機能が優先されデータが削除されてしまいます。 一応単体テストとして更新・削除を各々別ソースで実行したときは動作できました。 申し訳ありませんがご指南お願いいたします。以下がソースです。 // 変更するデータを取得する if (count($_POST) > 0) { $id = $_POST["id"]; $dname = $_POST["dname"]; $teladdress = $_POST["teladdress"]; $mailaddress = $_POST["mailaddress"]; // データが送信されたときはデータを変更する if (strlen($id) and strlen($dname) and strlen($teladdress) and strlen($mailaddress)) { // データを変更する $sql = "UPDATE student SET dname = '".cnv_sqlstr(cnv_enc($dname, $enc_db, $enc_disp))."', teladdress = '".cnv_sqlstr(cnv_enc($teladdress, $enc_db, $enc_disp))."', mailaddress = ".cnv_sqlstr($mailaddress)." WHERE (id = ".cnv_sqlstr($id).");"; mysql_query($sql, $conn) or die("データ変更エラー"); } } // 削除するデータを取得する if (count($_POST) > 0) { $id = $_POST["id"]; // データが送信されたときはデータを削除する if (strlen($_POST["id"]) > 0) { // データを削除する $sql = "DELETE FROM student WHERE (id = ".intval($id).");"; mysql_query($sql, $conn) or die("データ削除エラー"); } }

    • 締切済み
    • PHP
  • ユニークIDを連番にする

    DB(Mysql)にあるIDを以下の条件をもとに一意に振りたいと考えております。 ・ID:0,1,2のみが(DBに)あれば次はID3を振る ・ID:0,2,3のみが(DBに)あれば次はID1を振る ご存じの方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP ハイパーリンク

    PHPで条件があった場合次のページに、とべるようにしたいのですが何と記述していいか調べてもいまいち解らないので質問させて頂きます。 <?php $ID = $_POST['ID']; $PWD = $_POST['PWD']; if($db = sqlite_open('db_ninshou')){ $query = "SELECT ID, PWD FROM tbl_ninshou WHERE ID = '$ID' AND PWD = '$PWD'"; $result = sqlite_query($db, $query); if($info = sqlite_fetch_array($result)){ print "認証に成功しました。下記URLから講義の登録を行ってください。\n"; print ここで次のページにとべる命令をしたのですが解りません。; }else{ print "認証に失敗しました。再度入力してください。"; } }else{ die("DBエラー"); } sqlite_close($db); ?> HTMLなら <A HREF = "URL">~</A>というふうに記述すればいいと思うのですが。リンクを貼る記述の仕方か、もしくは条件に当てはまったら自動的にページにとべるような命令の仕方を探しています。説明が下手で申し訳ありませんが・・・よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPプログラムの内部からPOSTする方法について

    お世話になります。PHPプログラムの内部からHTTPリクエストのPOSTを使ったデータの送信について教えてください。 あるサービスにPOSTでデータを送るのですが,HTMLのform要素から直接目的のサーバにPOSTするのではなく,一度自分のサイトのPHPプログラムにPOSTして,ある条件を満たすデータのみ目的のサイトへPOSTしたいのですが,PHPプログラムの内部からHTMLのform要素のようにPOSTすることは可能でしょうか。 最終的にPOSTしたいのは他社が行っているサービスです(メール一括送信システム)。 全く手がかりがつかめなく,困っております。手がかりでも良いので教えてください。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpメールフォーム マック入力のみ文字化け

    phpにて自動返信付きメールフォームをUTF-8で別の方が作ったものを自分で修正中です。 サーバーはOCNのホスティングです。 入力環境がMacの人だと入ってくるメールが文字化けを起こしております。 送信に以下のコードを入れているんですが、これでは問題がありますでしょうか? windowsでは問題がありません。 ISO-2022-JPはwindowsもmacも問題がないということだと思ったのですが これが効いていないということになるのでしょうか? 勉強中の身でわからず、教えていただけますと幸いです。 よろしくお願いいたします。 <?php $name = Mb_Convert_Kana($_POST['name'],"S"); $name2 = Mb_Convert_Kana($_POST['name2'],"S"); $name3 = Mb_Convert_Kana($_POST['name3'],"S"); $yubin = Mb_Convert_Kana($_POST['yubin'],"a"); $jyusyo = Mb_Convert_Kana($_POST['jyusyo'],"S"); $tel = Mb_Convert_Kana($_POST['tel'],"a"); $mail = Mb_Convert_Kana($_POST['mail'],"a"); $comment = Mb_Convert_Kana($_POST["comment"],"S"); $comment = str_replace(" ","\n",$comment); //文字列の置換 //メール送信 $fp = popen("/usr/local/bin/nkf -e -m0 | /usr/sbin/sendmail -oi -t", "w"); fwrite($fp, "From: $mail\n"); fwrite($fp, "To: info@amano-grp.co.jp\n"); fwrite($fp, "Subject: " . mb_encode_mimeheader('お問い合わせフォームの内容', 'ISO-2022-JP') . "\n"); //fwrite($fp, "Subject: お問い合わせフォームの内容\n"); fwrite($fp, "Mime-Version: 1.0\n"); fwrite($fp, "Content-Type: text/plain; charset=ISO-2022-JP\n\n"); fwrite($fp, "以下の内容で、メールフォームでのお問い合わせがありました。\n\n"); fwrite($fp, "団体名・法人名: $name\n\n"); fwrite($fp, "所属: $name2\n\n"); fwrite($fp, "お名前: $name3\n\n"); fwrite($fp, "郵便番号: $yubin\n\n"); fwrite($fp, "住所: $jyusyo\n\n"); fwrite($fp, "電話番号: $tel\n\n"); fwrite($fp, "メール: $mail\n\n"); fwrite($fp, "お問い合わせ内容:\n$comment\n\n"); pclose($fp);

    • ベストアンサー
    • PHP
  • よくわかるPHPの教科書から、

    「Twitter風ひとこと掲示板」の作成でのエラー。 [OK] ・データーベース作成 ・会員登録画面から登録可能 ・データベースを見ると登録されていること確認 http://higelatta.bob.buttobi.net/nise_twitter/index.php http://higelatta.bob.buttobi.net/nise_twitter/login.php [NG] ・ログイン画面でログイン後、TOPのindex.php画面に飛んだとき、エラーが発生 ■エラー内容 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1 以上です。 SQL文にエラーがありますと、バージョンがどーのこーのといっているようですが、 具体的な解決方法がわかりません。 以下に、TOPのindex.phpのソースを少々添付いたします。 <?php session_start(); require('dbconnect.php'); if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { // ログインしている $_SESSION['time'] = time(); $sql = sprintf('SELECT * FROM members WHERE id=%d', mysql_real_escape_string($_SESSION['id']) ); $record = mysql_query($sql) or die(mysql_query()); $member = mysql_fetch_assoc($record); } else { // ログインしていない header('Location: login.php'); } // 投稿を記録する if (!empty($_POST)) { if ($_POST['message'] != '') { $sql = sprintf('INSERT INTO posts SET member_id=%d, message="%s", reply_post_id=%d, created=NOW()', mysql_real_escape_string($member['id']), mysql_real_escape_string($_POST['message']), mysql_real_escape_string($_POST['reply_post_id']) ); mysql_query($sql) or die(mysql_error()); header('Location: index.php'); } } // 投稿を取得する $page = $_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); 以上です。 長々と申し訳ありません。 おそらく、 if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 付近に問題があるのかなと思うのですが、 詳しい方ご教授願います。

    • ベストアンサー
    • PHP
  • PHPフォームからのMYSQL保存がマッチしない

    いつもお世話になります。 類似する質問も見つけられず、いろいろ試して悩んだ挙句、アプローチを変えてもう一度投稿することにしました。 発端は、下記のページです。 http://okwave.jp/qa/q8604578.html 問題は、phpmyadminからカラムまたはフィールドに入力したものは重複していればエラー表示されるのですが、PHPのフォームからMYSQLのデータベースに保存したもの(phpmyadmin上ではちゃんと登録されている)は重複とみなされず、エラーとして検出されません。 phpフォームからMYSQLのデータベースを呼び出してカラムまたはフィールド上に同じものがなければ保存、そうでなければエラー表示、といった形で重複させないプログラムを作成するつもりでした。 上記のページでご返信いただいたように、重複させないカラムにユニーク設定してみたのですが、問題は解決されませんでした。 文字コードが違うからと思ったのですが、MYSQL、PHPどちらもUTF-8で統一させています。 フォームからMYSQLへの保存時に問題があるのでは?と思うのですが、どのような形で修正すればうまくいくのか、わかりません。 どうか、知識の足りない私にご教授いただけないでしょうか? PHPの設定とMYSQLへの登録のプログラムは下記の通りです。 PHP・・・5.4.19 XAMPP・・・1.8.2 phpmyadmin・・・4.0.4.1 データベース文字コード(UTF-8) phpの文字コード(php.iniのdefault_characterをUTF-8に設定) <?php //データベースの接続設定 $DB_HOST = "localhost"; $DB_NAME = "○○"; $DB_USER = "○○"; $DB_PASS = "○○"; //データベースに接続する $conn = mysql_connect($DB_HOST,$DB_USER,$DB_PASS) or die("接続エラー"); mysql_select_db($DB_NAME) or die("接続エラー");        //データベース登録前にメール送信する $userID = $_POST['userID']; $password = $_POST['password']; $name = $_POST['name']; $mail1 = $_POST['mail1']; $userID = htmlspecialchars($userID); $password = htmlspecialchars($password); $name = htmlspecialchars($name); $mail1 = htmlspecialchars($mail1); $mail_sub = '登録を受け付けました。'; $mail_body = 'ご登録、誠にありがとうございました。'; $mail_body = html_entity_decode($mail_body,ENT_QUOTES,"UTF-8"); $mail_head = 'From:blowin@horae.dti.ne.jp'; mb_language('Japanese'); mb_internal_encoding("UTF-8"); mb_send_mail($mail1, $mail_sub, $mail_body,$mail_head); ?> <?php //デフォルトのタイムゾーンを日本に設定 date_default_timezone_set("Japan"); //フォーム情報をすべて受信 extract($_POST); //そのまま代入する形ではエラーが起きるため、isset関数を使ってエラー回避する if(isset($_POST['$userID'])){ $userID = cnv_dbstr($_POST['$userID']); } if(isset($_POST['$password'])){ $password = cnv_dbstr($_POST['$password']); } if(isset($_POST['$name'])){ $name = cnv_dbstr($_POST['$name']); } if(isset($_POST['$mail1'])){ $mail1 = cnv_dbstr($_POST['$mail1']); } //データを追加する $sql = "INSERT IGNORE INTO touroku(userID,password,name,email,date)"; $sql .= "VALUES( " ; $sql .= " ' " .$userID. " ', " ; $sql .= " ' " .$password. " ', " ; $sql .= " ' " .$name. " ', " ; $sql .= " ' " .$mail1. " ', " ; $sql .= " ' " .date("Y/m/d H:i:s") . " ' " ; $sql .= " ) " ; $res = mysql_query($sql,$conn) or die("データ追加エラー"); //SQLコマンド用の文字列に変換する関数 function cnv_dbstr($string){ //タグを無効にする $string = htmlspecialchars($string); //magic_quotes_gpcがOnの場合はエスケープを解除する if(get_magic_quotes_gpc()){ $string = stripslashes($string); } //SQLコマンド用の文字列にエスケープする $string = mysql_real_escape_string($string); return $string; } header('location:./testkanryou.php'); exit; ?> 大変申し訳ありませんが、どうか、よろしくお願い申し上げます。

    • 締切済み
    • PHP
  • PHPを使ってMySQLのフィールドの追加ができない

    function部分は外部ファイル function getResult($query){ $result[result]=mysql_query($query,$this->connect) or die(mysql_error()); $result[count]=@mysql_num_rows($result[result]); return $result; } $null = ""; $query="insert into main values ($_POST[id],'$_POST[name]',$null,$null,$null,'$null')"; $insert[result]=$db->getResult($query); このように記述してmainテーブル内に新規フィールドの追加をしようとしたのですが、次のようなエラーが出ます。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',,'')' at line 1 $nullは結局NULL値なので、 ($_POST[id],'$_POST[name]',,,,) でやってみたのですが、これも同じです。 当たり前といえば当たり前ですが、 ($_POST[id],'$_POST[name]',,,,)を ($_POST[id],'$_POST[name]')と 省略してみましたが、数が合わないとエラーが返ってきました。 定型のfunctionに頼らず、$insert[result]=$db->getResult($query);のかわりに if(mysql_query($query,$db->connect)){ echo"成功"; }else{ echo"失敗"; } このようにも試してみたのですが、データは追加されず、失敗と表示されてしまいます。 どこをどう修正すればいいでしょうか。 どなたかお助けください。 ちなみに1,3~5番目が数値型で、2,6番目が文字型、1番目以外はNULLを許可しています。 どこもオートインクリメントは使用していません。

    • ベストアンサー
    • PHP