• 締切済み

指定日になったら自動で情報変更

各種イベントをホームページに掲載したいです。 更新記録CGIを改造して使いたいと思っているのですが、イベント終了時にそのデータを消さないといけないんですけど、忘れてしまいそうです。 そこで、イベント日付が過ぎたらその情報を非表示としたいのですが、そんなことできるのでしょうか? 今は、同じ名前のイベントを何度もすることがあるので、イベント名などをそのまま保持しておき、表示・非表示のチェックボックスをセットしてあります。また、日付は○月○日の形式で保存してます。(これは、必要であれば200○/○/○の形式に変更することは可能です) なので、イメージとしては 「もし、今日の日付よりイベントの日付が小さい場合、イベント表示チェックをはずす」 if($today>$event_day){$event_view=""}; こんな感じでしょうか? 今日の日付の取得方法や「$today>$event_day」の方法等がいまいち良くわかってないです。 また、これってどう設定したらいいのでしょうか? CGIって誰かが読み込まないと実行しないんですよね? どの部分で実行させるのがいいんでしょう? やっぱりデコード部分と一緒に記事を読み込んだ瞬間実施するってのが現実的なのでしょうか? CGIについてあまり理解できていないので、変な質問しているかもしれませんが、そのときは指摘してください。 お願いします。

  • Perl
  • 回答数3
  • ありがとう数1

みんなの回答

noname#21216
noname#21216
回答No.3

 スクリプトに一癖 あったので 場所をみつけるのに数分かかってしましました NO1さんの 回答にあるものを利用するといいかと思います。 とりあえず、 トップにはタイトルがでますけど 詳細に行くとおわりましたと表示させるだけコードです。 130行目付近の sub html_logのif ($in{'no'} == $no) の上あたりに 下記を入れてみてください。  とりあえず非表示になります。 日が31までしかないので月に100でもかけて 月日をたすと 月日の比較が簡単にできます。 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += 1900; $mon++; if (($in{'no'} == $no)&& (($year2<$year) ||(($year2==$year)&&($month2*100+$day2<$mon*100+$mday))) ) { print "$year1/$month1/$day1-$year2/$month2/$day2<br>"; print "[$sub]終了しました"; next; } # ここの上に   if ($in{'no'} == $no) { ---------------------------- 自動削除がおのぞみですよね? 内部をみるかぎり ファイル添付を削除もあるようなので sub usr_delをコピーして改造したものを呼び出した方が むだな読み込みがかかりますが、 そのほうがらくかもしれないです。 では、がんばって

master-3rd
質問者

補足

すみません。説明が悪かったかな… まずは、1つの情報丸々を削除ではないんです。他の項目は残しつつ非表示とするだけなので、「sub usr_del」は利用出来ません。 他の項目は残しつつ一部のみを非表示としたいので、"もし、チェックが入っていればこの項目を非表示"というようにしたいんです。 そのチェックを自動で入れたいというわけです。 なので、 「もし、入力された日付が今日の日付よりも小さかったら、変数"チェック"を空白にする」をすべての行で行う という物を作成したいんです。 で、現状は、"入力された日付が今日の日付よりも小さかったら"という部分はクリアしました。次の"「変数"チェック"を空白にする」をすべての行で行う"という部分が詰まっています。 当初の質問とずれているので、再度質問を出した方が良いかな…

noname#21216
noname#21216
回答No.2

 現在の時間取得はどうにでもかけるので 保存してあるときの 時間をどのように 保存してあるかが問題です。  どこかの提供のcgiでしたら それを示した方が解決できるとおもいますよ >日付は○月○日の形式で保存してます。 >(これは、必要であれば200○/○/○の形式に変更することは可能です) それともまだ できていないものですか? 200○/○/○なら splitなどで 3分割して 現在の時刻で 年 月 日 の順で単純比較でもいいかと思います

master-3rd
質問者

お礼

返答ありがとうございます。 多分ですが、その部分はクリアできました。 で、次の「変更」がうまく出来ていないようで… 物は「ROCO ALBUM v1.21」です。 http://rocomotion.jp 現在、以下のようなサブルーチンをみようみまねで書いてみました。 保存してある変数は必要な分だけ書いてます。消し間違えがあるかもしれないので、そこら辺はスルーしてください。 sub check{ &get_time; open(IN,"$logfile") || &error("Open Error : $logfile"); @lines = <IN>; close(IN);  foreach $lines (@lines) {   ($no,$year1,$month1,$day1,$name,~~$eview,$etitle,$elimit~~) = split(/<>/,$lines); ##解説 : $eviewは、チェックボックスの内容を保持。空白でチェック無し、1でチェック有りとする。で、1ならリスト画面で表示するというように設定。$elimitは、2000/00/00の形で終了日を保持   chomp; #日付チェック手順1 : 日付を変換   if($elimit){    $elimit2 = sprintf('%04d%02d%02d', split('/', $elimit)) ; #日付チェック手順2 : 日付を比較 if ($sysdate2 >= $elimit2) { ##解説 : $sysdate2 は20000000の形で終了日を保持  $eview2 = ""; $_ = "$no<>$year1<>$month1<>$day1<>$name<>~~<>$eview2<>$etitle<>$elimit<>~~<>\n"; push(@new,$_); print OUT @new; }#if閉じ }#if閉じ }#foreach閉じ close(OUT); } こんな感じですが、変更が保存されません。 どこが間違っていますか? すみませんが、よろしくお願いします。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

$date に YYYYMMDD の形式で入っている場合。 表示の時に日付をチェックして過去の日付だったら表示しないと言うようにすればいいと思います。 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year +=1900; $mon++; $date2 = $year .$mon .$mday; if ($date >= $date2) { # 表示する処理 }

master-3rd
質問者

補足

早速の返答ありがとうございます。 時間取得のサブルーチンの最後は以下のようになっていました。 # 日時のフォーマット $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d",  $year+1900,$mon2,$mday,$week[$wday],$hour,$min); これだとまずいですよね。もちろん、これは別のところで利用しているので、もう1つ変数を作ってしまおうと思いましたが、 $date2 = sprintf("%04d%02d%02d,  $year+1900,$mon2,$mday); これでOKですか? また、保存してある変数の数が結構多いので、「何番目だけを呼び出してそこだけ変える」的なことはできないでしょうか?

関連するQ&A

  • VBS 実行日付を取得(保持)

    VBSで日付をチェックし、起動する方法をおしえていただき 作成しました。 http://okwave.jp/qa/q8343260.html タスクに保存し、実行しているわけですが VBS内で実行した日付を取得(保持)できないでしょうか? 今日実行したなら、今日は実行しない等 プログラムでは組めますでしょうか? 変数に今日の日付を入れるのもありかと思ったのですが、 保持してくれるかどうか不明だったため、 質問させて頂きました。 回答よろしくお願い致します。

  • Excel2003 チェックすると日付が自動表示(日付をチェック日のままに)

    Excel2003で、町内回覧のチェック表を作成したとします。 その際、チェックボックスにチェックをすると、横の閲覧日に自動的に日付が表示されるようにしました。 しかし、エクセルの表を翌日に開くと日付も更新されて、常に「今日」(TODAY)が表示される状態です。 閲覧日=チェックした日の日付のままにする、具体的に教えて下さい。 こちらで検索したところVBAを使えばいいようですが・・・ ■エクセルでの、日付の自動入力について   http://okwave.jp/qa1211065.html

  • PHPでの日付について

    PHPとPostgreSQLを利用しています。 日付を取得して、現在の日付と比べて7日以内であれば、指定の文言を表示して、7日以上であれば表示しないようにしたいです。現時点では以下のように記述しています。 $today = date(Y-m-d); if($today - $update_day <= 7) { echo "表示"; } else { echo "非表示"; } ちなみに $todayも$update_dayも形式は2005-09-18のような形です。 ご教授願います。

    • ベストアンサー
    • PHP
  • 予定日までの日付までを自動入力するには?

    Excelで予定日までの日付を表に自動的に入力されるようにするには、どうしたら良いでしょうか? 例・ 今日の日付を「4月15日」とします。 A1 に予定日を入力とします。    A1 4月18日 ←TODAY()+3 で指定。プラスの日付は常に変更される。(+2,+10など)    B1 4月15日 ←今日の日付が入る。    B2 4月16日 ←以下、 A1 の日付まで続く。    B3 4月17日    B4 4月18日    B5  月 日 ←A1を超えると、数字を除いた「 月 日」の表示がされる。    B6  月 日    :    : A1で指定した日付が3日後なら、今日から4日間の日付。10日後なら、今日から11日間の日付という形で自動で入力されるようにしたいのです。 A1 のTODAY()+後の数のみの変更で、入力できたらと思っています。 ご協力、お願いします。

  • excelで入力日を保存したい

    エクセルでチェックボックスを作り、チェックボックスにチェックが入った日付を=IF(F8=TRUE,TODAY(),"")で表示させましたが、必要なのはその日付が自動入力されたうえで、保存されることなんです。TODAY関数ですと当然、ファイルを開いた日に更新されてしまいます。マクロでどうにかならないかと考えています。方法がありましたらご教示ください。 チェックボックスにチェックを入れ、日付を入力すべきセルにctrl+;にするのもいいのですが、何しろクリックするのがやっとの人たちに入力をお願いするのでその人たちにとっては、その作業は並大抵のことではなく、結果的には表に手書きで日付を記入するという方法になってしまい、なかなかパソコンで管理するという方向に進みません。 当方、基本操作ができる程度の者(パソコン教室で初心者に教える程度)で、このセクションの物品管理のIT化を進めるよう配属されました。教育するために仕事の時間を割くことはできません。 チェックボックスにチェックしたら、チェックした日付が表示され、その後いつみてもチェックのオンオフが変わらない限りその日の日付が表示されているようにしたいです。 いわゆる、1クリックで作業が完了するようにできないものでしょうか。 どうか、よろしくお願いいたします。

  • EXCELで現在の日付と時刻を表示したい

    EXCELで現在の日付と時刻を表示したい。 =Today() と入力し、表示形式を 2001/3/14 13:30 とすると 時刻の部分が 0:00 となってしまいます。 よろしくお願いします。

  • エクセルの自動日付入力

    エクセルで、=today()を使い日付が勝手に入るようにしています。 しかし、このtoday関数は、日付が翌日になると、その翌日の日付になるほか、後日そのファイルを開くとその開いた日で表示されてしまいます。 そこで、ファイル作成日の日付をそのまま残しておくためにどのような方法がありますか? 分かる方がいらっしゃいましたら、よろしくお願いいたします。

  • Excelのマクロで基準日から見た日付の前後を判定したい

    Excelのマクロについて質問です。 初歩的な内容かもしれませんが よろしくお願いします。 マクロで日付を扱おうとしたのですが うまくいきませんでした。 ある日付が基準日から見て前の日か後ろの日かを 判定しようとしたのです。 たとえば セルA1に入力した日付が 今日より先ならセルB1に「1」を 後なら「2」を表示しようとして If Range("A1") > "=TODAY()" Then Range("B1") = 1 Else Range("B1") = 2 End If このようにすると セルA1にどのような日付を入れても セルB1は「2」と表示されてしまうのです。 "=TODAY()" の部分に問題があるのでしょうね。 でも、確かこれで今日という日付を 表しているのではなかったでしょうか… 日付はどのように扱われているのでしょう。 回答をお待ちしております。

  • 今日より1週間後の日付を表示できるCGI

    はじめまして、ホームページを作っていて、今日より1週間後の日付を表示できるCGIを探しています。 利用方法としては、サンプル応募フォームで、そのページを見に来た方が『 ○日までの限定△△個!』と表示するのに○の日付部分が今日より1週間後の日付に自動的になるCGIを探しています。以上、すみませんが、ご連絡をお待ちしております。

    • 締切済み
    • CGI
  • grepの使用方法ミス?

    いつもお世話になっております。 下記のコードで配列の中で今日の日付と一致するものを表示したかったのですが、 全データが表示されてしまいます。 (最終的には今日と一致する配列とその次の配列を表示させたい) grepのところがうまくいってないようなのですが、コマンドプロンプトでは通ってしまい、何がミスなのかよくわかりません。 ご存知の方、ご指摘と正しい使用方法をお教えください。 よろしくお願いいたします。 ///////////////////////////////////// <中略> #***** サブルーチンの組み込み ***** require 'sub_today.pl'; #今日の日付を取り出します。 #********** ファイルを読み込む $in = "../days.txt"; #1ヶ月分の日付がサブルーチンの日付と同じ形式で1行ずつ入っています。 open( IN, "$in" ); @record = <IN>; @result = grep(&gettoday(), @record); close( IN ); print @result; exit;

    • ベストアンサー
    • CGI

専門家に質問してみよう