<学習する内容>
配列を使って4章の月毎の売上集計を作成しながら理解します。
配列に慣れるまでは混乱するかもしれませんが、配列の中身をprint_r()関数を使って繰り返し、
一つひとつ確認しながら理解を進めて下さい。理解には数をこなして慣れるしかありません。
3)売上一覧の作成
下記のサンプルプログラムをコピーもしくはダウンロードし指定のフォルダーに配置してください。
ファイル名:saleslist5_2.php
配置先URL:
http://localhost/saleslist5_2.php
<?php
//DBへの接続
include('/xampp/data/conn.php');
//POSTの受信
$fnc = filter_input(INPUT_POST, 'fnc');
$select_id = filter_input(INPUT_POST, 'select_id');
$select_date = filter_input(INPUT_POST, 'select_date');
$select_sectionCode = filter_input(INPUT_POST, 'select_sectionCode');
$select_staffCode = filter_input(INPUT_POST, 'select_staffCode');
//年度option
$day = date("Y-m-01"); //当月1日
$day = '2024-04-01'; //デモ用のデータ(2024年度)を表示のため記述
$num = 10; //表示期数
$opt_date = null; //初期化
for ($i = 0;$i <= $num;$i++) {
$s = $i * 6; //半期6か月毎
$FY = date("Y",strtotime("-$s month",strtotime($day)));
$month = date("n",strtotime("-$s month",strtotime($day)));
$date = date("Y-m-d",strtotime("-$s month",strtotime($day)));
if ($month >= 4 and $month < 10){
$opt_date .= '<option value="'.$date.'" >'.$FY.'上期';
} else {
$opt_date .= '<option value="'.$date.'" >'.$FY.'下期';
}
}
//年度表示と検索用データ生成
if (empty($select_date)){
$select_date = $day;
}
$selectFY = date("Y",strtotime($select_date));
$n = date("n",strtotime($select_date)); //1桁月
if ($n >= 4 and $n < 10) {
$startDate = $selectFY.'-04-01';
$endDate = $selectFY.'-10-01';
$term = '上期';
$select_date_display = $selectFY.$term;
} else {
$selectFY1 = $selectFY + 1;
$startDate = $selectFY.'-10-01';
$endDate = $selectFY1.'-04-01';
$term = '下期';
$select_date_display = $selectFY.$term;
}
for ($i = 0;$i <= 6;$i++) {
$ARY_MONTH[$i] = date("Ym",strtotime("+$i month",strtotime($select_date)));
$ARY_MONTH_INDEX[$i] = date("Y年n月",strtotime("+$i month",strtotime($select_date)));
if ($i == 6) { //半期計値用
$ARY_MONTH[$i] = 'sum';
$ARY_MONTH_INDEX[$i] = $term.'計';
}
}
//部署option
$sql = "SELECT sectionCode,sectionName FROM Msection;";
$res = mysqli_query($conn,$sql) or die("error $sql");
$OPTION_SECTION = '<option style="color:#2E2E2E;" value="">解除';
while($row = mysqli_fetch_array($res)){
$sectionCode_opt = $row["sectionCode"];
$sectionName_opt = $row["sectionName"];
$OPTION_SECTION .= '<option style="color:#2E2E2E;" value="'.$sectionCode_opt.'">'.$sectionName_opt;
}
//部署option
$sql = "SELECT sectionCode,sectionName FROM Msection;";
$res = mysqli_query($conn,$sql) or die("error $sql");
$OPTION_SECTION = '
<解説>
プログラムの構成は、検索データの受信やselect文のoption生成、検索実行です。
111行目からはHTML表示用データ抽出やHTML文生成、173行目からはHTML文を記述しております。
4章のsaleslist.phpに比べプログラムの行数が320行→236行に減りプログラムの読みやすくなっている(配列に慣れれば)と思います。
47行目for文
for文により利用する年月データ、項目表示用年月データを生成しております。
for文の$i <= 6 の6は6か月と半期計表示として6としております。0から始まるので6を半期としてます。
$ARY_MONTH これは年月毎の売上データ識別用として実績のキーとして利用します。
$ARY_MONTH_INDEX これはテーブル年月表示用として利用します。
121行目for文
$i < count($ARY_MONTH); count($ARY_MONTH)が7要素なので0~6で回している、
142行目GROUP BY srtaffCode,salesMonth
月別担当者毎に合計値を抽出
148行目$sales[$staffCode][$month]
月別担当者毎の合計値を担当者コードと売上年月をキーとして配列$salesに代入
同様に149行目利益と150行目明細ポップアップも代入
176行目for文
161行目のSQL文により担当者コードを抽出。この担当者コードとfor文による順番(年月)キーとしたデータを取出し
$HTML文に代入します。
255行$HTMLの表示
$HTMLに代入されたHTMLを表示させます。
※この$HTMLがどう代入されて表示されるか、ブラウザにてソースを表示させて確認しながら学習してください。