会員制サイトphp+mysqlに関する質問です。

登録したユーザーの情報はテーブル(User)に記録されています。
テーブル(User)のフィールドは以下の4つです。
()内がフィールド名です。

会員コード(UserCD) text
パスワード(Pass) text
ニックネーム(Name) text
会員期間(Period) int 11

10分経過するごとに会員コード100の会員期間の数値を1増やしていきたいです。
1時間に6増えることになります。
※特定の会員のみ増やすため、ここではコード100としています。

cronで10分おきに
/var/www/vhosts/smple.jp/httpdocs/period.php
を作動させ指定した会員コードのPeriodを1増やしたいのですが

この場合のperiod.phpに記述する内容を教えてください。
ご教授いただけると幸いです。
よろしくお願い致します。

MySQL - 5.0.45

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2009/04/18 22:35:51
  • 終了:2009/04/25 22:40:02

回答(5件)

id:mfkcesse No.1

mfkcesse回答回数16ベストアンサー獲得回数02009/04/18 23:35:24

ポイント20pt

(はてなにより削除しました)

id:nobuchiru No.2

ながの回答回数55ベストアンサー獲得回数32009/04/19 00:00:38

ポイント20pt
<?php 

//DBへ接続開始 サーバー名 ユーザー名 パスワード
$dbHandle = mysql_connect("あなたのDBサーバ","DBのユーザID","DBのパスワード");

//DBの接続に失敗した場合はエラー表示をおこない処理中断
if ($dbHandle == False) {
	print ("can not connect db\n");	
	exit;
}


//db名
$db = "あなたのdb名(スキーマ名)";

//usercd=100 のレコードを対象に、periodを+1します。
$sql0 = "update user set period=period+1 where usercd = '100'";

//SQL文を実行する
$rs = mysql_db_query($db,$sql0);

//コミット
$rs = mysql_db_query($db,"commit");


//DBへの接続を切断
mysql_close($dbHandle);

?>

簡単にやるならこんな感じに成ると思います。

トランザクション開始、コミット、ロールバックは必要ならば適宜。

/*

* PHPのバージョンを書いていただくと、より的確な回答が得られるかもですね。頑張ってください。

*/

http://phpspot.net/php/man/php/function.mysql-db-query.html

http://www.syboos.jp/database/doc/20071105160750227.html

id:xptree

回答ありがとうございます。

教えて頂いたとおりperiod.phpを作成したのですが

直接period.phpにアクセスするとperiodは1増えますが

cronでは増えません。

cronでは増えないのは何が考えられるでしょうか…?

2009/04/19 01:56:16
id:hijk05 No.3

hijk05回答回数1307ベストアンサー獲得回数232009/04/19 02:32:58

ポイント20pt

>cronでは増えないのは何が考えられるでしょうか…?

1.実際に指定したプログラムが動いていない

2.エラー終了して、DBがロールバックされている

3.明示的にcomitを発行しないとロールバックする仕様になっている

 #Webで実行する場合は、autocomitモードで、明示的に指定しなくてもcommitされる。

http://q.hatena.ne.jp/answer

id:nobuchiru No.4

ながの回答回数55ベストアンサー獲得回数32009/04/19 07:20:44

ポイント20pt

確認すべきは以下です。

A.cronが実行されているか?

B.period.phpが実行されているか?

C.SQLが発射されているか?

D.コミットされているか?


プログラム単体で起動するときはOKで、

cronで起動するとNGの場合。

経験上、大抵はBで、その原因は下記のいずれかです。

  1. crontabの起動間隔指定の書き方が間違い。
  2. 実行権限がない。
  3. period.phpの場所を書き間違っている。
  4. 環境変数が通っていない。

http://x68000.q-e-d.net/~68user/unix/pickup?crontab

ここにcronを書くと、よりよい回答が得られるかもです。

id:pahoo No.5

pahoo回答回数5960ベストアンサー獲得回数6332009/04/19 08:39:30

ポイント20pt

シェルスクリプトはCLI版(コマンドライン版)PHPとして実行していますか?

詳しくは「PHPのコマンドライン実行」をご覧ください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません