PHPを学ぼう!

▼PHPを学ぶチャプターです。


PHPプログラマ 緊急募集!

 

素材メニュー

 ◆Chapter 1

 ◆Chapter 2

 ◆Chapter 3

 ◆Chapter 4

 

制作ヒント

 ◆制作のヒント

 

レッスンメニュー

 ◆Chapter2 練習問題

 ◆Chapter3 DB練習問題

 

サイト運営者がPHPを学んだ
お勧めの書籍です!
これ一冊で基本的なPHPの仕組み、簡単なプログラムの作成、SQLiteを使ったデータベースなどかなり学べる要素が詰まっています!

↓↓↓ ↓↓↓

PHPレッスンブック―PHP5対応

新品価格
¥2,520から
(2013/2/24 04:38時点)

 

 

サイバーテロの技法について書かれた書籍です!
ハッカーの手法を知ることでご自身のサイトがハッカーに攻撃されたときそれを防ぐ手法を紹介しています。

↓↓↓ ↓↓↓

PHPサイバーテロの技法―攻撃と防御の実際

新品価格
¥1,890から
(2013/11/5 10:09時点)

 

 

★初年度100円! サブドメインやメールアカウントを無制限に設置できます。
PHPやCGIは勿論、WordPress、Movable Type Open Source、掲示板、ブログ、ショッピングサイトなどが簡単に導入できるので複数サイトを運営したい場合に便利なサービスです。

↓↓↓ ↓↓↓

 

PHPが動作するサーバー

 

はじめてのHP | 無料素材 | タグ辞典 | CSSガイドEX | PHPを学ぼう!

◆Chapter 4 - イベント日まで残数を計算する

イベントまであと何日かをカウントダウンするプログラムを作ります。
例えば東京オリンピックまであと何日とかいう使い方ができます。
イベント(主題)は、ご利用になる方の趣旨に合わせて変更してお使いになるといいでしょう。

 

プログラムの仕組みは大まかに次のとおりです。

  • 本日のタイムスタンプを修得
  • イベントのタイムスタンプを修得
  • 差を計算して残りをの日付を算出
  • 計算結果の書き出し

 

このプログラムのコードを参考例として用意しました。
このコードに従って説明していきます。

01|<?php
02|  $subjct = "東京オリンピック";
03|
04|  //タイムスタンプ
05|  $today = time();
06|  $yotei = strtotime("20200724");
07|  $int = $yotei - $today;
08|  $day = ceil($int / (24 * 60 * 60));
09|
10|  //メッセージの表示
11|  if($day > 0){
12|    echo $subjct."まであと、 <strong>{$day}日</strong> です。";
13|  }else{
14|    echo "カウントダウンは終了しました。";
15|  }
16|?>

 

このプログラムは、サンプルページで動作確認ができます。

 

参考例のコードを解説していきます。
5行目ではタイムスタンプを修得し、変数 $today に代入しています。

 

6行目では、strtotime 関数を使いイベントの開催日(予定)を指定して変数 $yotei に代入しています。
strtotime 関数は、文字列から日付となるタイムスタンプを修得する関数で次のように書いても修得が可能です。

strtotime("2020/7/24");
strtotime("20200724");

 

7行目は、イベント開催日から今日のタイムスタンプを差し引いて残りのタイムスタンプを算出し、(24 * 60 * 60)で割り変数 $int に代入しています。
(24 * 60 * 60)の合計値は、1日のタイムスタンプの値ですね。
ここで使っている ceil 関数は、端数を切り上げる処理をします。

 

11~15行目は、$day の計算結果によりメッセージを分岐しているわけです。
$dayの値が、"0" 以下になるとイベントが終了ということになります。

 

 

このコードでは、固定の日付を算出するものです。
余り用途は少ないかもしれませんが、イベントまでのあと何日かを知りたいときってありますよね。
例えば自動車保険の見積もりなどで更新日が90日以内でないとできなかったりすることがあります。

 

先のコードをイベントの日付を入力したら残り何日なのかを表示するプログラムに改変してみましょう!

 

新たに次の仕組みを考える必要があります。

  • イベントの値を取り組む
  • イベント日の値が日付として正しいかの判断
  • 各種メッセージの切り替え

 

次の参考例をみてください。

01|<html>
02|<body>
03|(記入例: 2014/1/1)<br />
04|<form action="<?= $_SERVER["PHP_SELF"]; ?>" method="POST">
05|<input type="text" name="date" size="18" maxlength="10">
06|<input type="submit" value="日数を確認する"><br />
07|</form>
08|<?php
09|  $subjct = "残り";
10|
11|  //タイムスタンプ
12|  $today = time();
13|  $yotei = isset($_POST['date']) ? trim($_POST['date']) : "";
14|
15|  //入力日が正しいか判定
16|  if(substr_count($yotei, "/") == 2){
17|    $date = explode("/", $yotei);
18|    if(checkdate($date[1], $date[2], $date[0])){
19|      $hantei = "True";
20|    }else{
21|      $hantei = "False";
22|    }
23|  }else{
24|    $hantei = "False";
25|  }
26|
27|  //メッセージの出力
28|  if($hantei == "True"){
29|    //日付の計算
30|    $yotei = strtotime($yotei);
31|    $int = $yotei - $today;
32|    $day = ceil($int / (24 * 60 * 60));
33|
34|    if($day == 0){
35|      echo $subjct."、<strong> 当日</strong> です。";
36|    }elseif($day > 0){
37|      echo $subjct."、<strong> {$day}日</strong> です。";
38|    }else{
39|      echo "イベントは終了しました。";
40|    }
41|  }else{
42|    if($yotei !=""){
43|      echo "日付が正しくありません。";
44|    }
45|  }
46|?>
47|</body>
48|</html>

 

このプログラムは、サンプルページで動作確認ができます。

 

4~7行目で form を使いイベントとなる起算日を入力し、値は POST 送信するようにしています。
13行目でPOSTの値が存在するかの判断し変数 $yotei に代入しています。
POST については、 Chapter2 の「GETとPOST」を参照ください。

 

16~25行目は、入力された値が日付かどうかを判断する処理です。
16行目の substr_count 関数は、値の中に "/" が2回含まれているかどうかを判断しています。
記入例に従って入力値を求めているわけです。
17行目では、その値を explode 関数を利用して "/" で分割し、変数 $date に Array 値で代入しています。
18行目の checkdate 関数で日付が存在するかの判断をし、その結果を変数 $hantei に代入しています。

 

28~45行目は、メッセージの入力された値が日付かどうかを判断する処理です。
30~32行目は、日付の計算です。
30行目のstrtotimeは、$yoteiの値からタイムスタンプに変換しています。
31行目で$yoteiのタイムスタンプから本日の値を引くことで残りの日数を計算させて34~40行目までの処理を分岐させています。

 

内容をご理解いただけたでしょうか。
プログラムを制作する上で日付の処理に関しては頻繁に関わってきます。処理の仕方は他にも存在しますので色々とチャレンジしてみてください。

 

尚、strtotime 関数は "2038/1/19" までしか使えません。
いずれ改善されるのだろうとは思いますが、注意が必要です。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ex-mode.net | ツールEX | 素材EX | アフィモール | 初級者向 初めてのホームページ作り | Htmlタグ辞典 | 初めてのプランター菜園 | リンク・ボード
気のみ気のままなブログ | CSSガイドEX | ホビ★コレ | 班長日記!

▲UP

Copyright (C) ex-mode.net 2017. All Rights Reserved.