ページエディターをアップデート

久しぶりにページエディターをアップデートしました。

 

PHPのバージョンが7以降で使われることを想定した修正です。

 

ページエディター

http://oldhouse.php.xdomain.jp/service.html

 

1.エラー制御。

2.関数、isset emptyを利用。

 

としてあります。

 

ご活用ください。

 

 

スケジューラー、休日表示

最後にスケジューラーの休日ファイルを用意。

これで週間スケジューラーが完成。

是非お試しください。

<?php

### 説明 #############################
#休日

#休日ライブラリ
$hdnm = array(
"2020-12-31" => "年末",
"2020-12-30" => "年末",
"2020-11-23" => "勤労感謝の日",
"2020-11-03" => "文化の日",
"2020-09-22" => "秋分の日",
"2020-09-21" => "敬老の日",
"2020-08-10" => "山の日",
"2020-07-24" => "スポーツの日",
"2020-07-23" => "海の日",
"2020-05-06" => "振替休日",
"2020-05-05" => "こどもの日",
"2020-05-04" => "みどりの日",
"2020-05-03" => "憲法記念日",
"2020-04-29" => "昭和の日",
"2020-03-20" => "春分の日",
"2020-02-24" => "振替休日",
"2020-02-23" => "天皇誕生日",
"2020-02-11" => "建国記念の日",
"2020-01-13" => "成人の日",
"2020-01-03" => "正月",
"2020-01-02" => "正月",
"2020-01-01" => "元旦"
);


?>

スケジューラー、入力画面

入力画面を以下のようにします。

ファイル名は、edit.php とします。

<?php
/*修正
データインプット
*/

include("../login_pdo.php");

#ジャンプ先
$jump = "./index.php";

$ttt = "Weekly Schedule Input";

$ddd = $_GET['ddd'];
$user = $_GET['user'];
$role = $_GET['role'];

#日時
$now = date("Y-m-d H:i:s");

/////入力されたら///////////////////////////////////////////
if(isset($_POST['RUN'])){

	#入力簡易化
	extract($_POST);

	////削除判定
	//if($del == "YES" or strlen($com_c) < 3){$delrun = "GO"; } //削除する
	if($del == "YES" or (strlen($com_c) < 3 and $office_c == 0)){$delrun = "GO"; } //削除する
	else{$delrun = ""; } //削除しない


	///▼保存、新規(削除ではない)
	if($delrun == ""){
		
		////文字処理/////////////////
		$_POST[com_c] = trim($_POST[com_c]);

		#置換
		$_POST[com_c] = ereg_replace("<", "<", $_POST[com_c]); 
		$_POST[com_c] = ereg_replace(">", ">", $_POST[com_c]); 
		$_POST[com_c] = ereg_replace("\n", "<br>", $_POST[com_c]); 
		
		#エスケープ
		//$_POST[com_c] = mysql_real_escape_string($_POST[com_c]);
		////文字処理/////////////////

		if($_POST[office_c] ==""){$_POST[office_c] = 0;}
		
		$i = 0; 
		### SQL データチェック
		//SQLの準備
		$sql = "SELECT no_c,user_c,date_c,com_c,office_c FROM `weekly` WHERE date_c='$ddd_c' and user_c='$user_c'";

		//SQL実行
		$stmt = $dbh->query($sql);

		//SQL結果の取り出し
		while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
			extract($row);
			//$com_c = ereg_replace("<br>", "\n", $com_c); 
			$i++;
		}

		#処理1、保存------------------------------
		if ($i >= 1){

			$sql = "UPDATE `weekly` SET com_c = :com, office_c = :office, timestamp_c = :now WHERE no_c=:no";

			$pre = $dbh->prepare($sql);

			$pre->bindValue(':no',$no_c, PDO::PARAM_STR);
			$pre->bindValue(':com',$_POST[com_c], PDO::PARAM_STR);
			$pre->bindValue(':office',$_POST[office_c], PDO::PARAM_STR);
			$pre->bindValue(':now',$now, PDO::PARAM_STR);

			//SQL実行
			$result = $pre->execute();

			#エラーの場合
			if ($result == false) {
				{die("$msg = 保存データ処理が失敗しました。".mysql_error());}
			}
			else{
			$msg ="保存データ処理を実行しました。";
			}

		}

		#処理2、新規追加--------------------------
		elseif ($i == 0){

			$sql = "INSERT INTO `weekly`(`user_c`,`date_c`,`com_c`,`office_c`,`timestamp_c`) VALUE(:user,:ddd,:com,:office,:now)";

			$pre = $dbh->prepare($sql);

			$pre->bindValue(':user',$user_c, PDO::PARAM_STR);
			$pre->bindValue(':ddd',$ddd_c, PDO::PARAM_STR);
			$pre->bindValue(':com',$_POST[com_c], PDO::PARAM_STR);
			$pre->bindValue(':office',$_POST[office_c], PDO::PARAM_STR);
			$pre->bindValue(':now',$now, PDO::PARAM_STR);

			//SQL実行
			$result = $pre->execute();

			#エラーの場合
			if ($result == false) {
				{die("$msg = 新規データ処理が失敗しました。".mysql_error());}
			}
			else{
			$msg ="新規データ処理を実行しました。";
			}

		}
		
	}
	
	///▼削除
	elseif($delrun == "GO"){

		$sql = "DELETE FROM `weekly` WHERE no_c=:no";

			$pre = $dbh->prepare($sql);

			$pre->bindValue(':no',$no_c, PDO::PARAM_STR);

			//SQL実行
			$result = $pre->execute();

			#エラーの場合
			if ($result == false) {
				{die("$msg = 削除データ処理が失敗しました。".mysql_error());}
			}
			else{
			$msg ="削除データ処理を実行しました。";
			}
			
	}

	#ジャンプ
	header("Location: {$jump}?user={$user_c}&ddd={$ddd_c}&role={$role}&msg={$msg}");

}
/////入力されたら///////////////////////////////////////////

?>

<!DOCTYPE html>
<html lang="ja">

<head>
<meta charset="utf8">

<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css?family=Cherry+Swash|M+PLUS+1p&display=swap" rel="stylesheet">

<title><?php echo $ttt; ?></title>
</head>

<body>


<h1><?php echo $ttt; ?></h1>

<br><br>

<div id="cont">
<form name="form" method="POST" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">

<?php

$i = 0;

### SQL ddd user は、スケジュールページから取得
//SQLの準備
$sql = "SELECT no_c,user_c,date_c,com_c,office_c FROM `weekly` WHERE date_c='$ddd' and user_c='$user'";

//SQL実行
$stmt = $dbh->query($sql);

//SQL結果の取り出し
while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
	extract($row);
	
	$com_c = ereg_replace("<br>", "\n", $com_c); 
	$i++;
	$mode = "編集"; $modev = "SAVE";

}

if($i ==0){$mode = "新規"; $modev = "INS"; }


?>

モード<br>
<input type=text size=8 name=mode value='<?php echo $mode; ?>' readonly>
<br><br>

日付<br>
<input type="text" size="12" name="ddd_c" value="<?php echo $ddd; ?>" readonly>
<br><br>

内容:<br>
<textarea rows=23 cols=50 name='com_c'><?php echo $com_c; ?></textarea>
<br>

<input type=hidden size=8 name='no_c' value='<?php echo $no_c; ?>'>
<input type=hidden size=12 name='user_c' value='<?php echo $user; ?>'>
<input type=hidden size=12 name='role' value='<?php echo $role; ?>'>
<input type=hidden size=12 name='what' value='<?php echo $modev; ?>'>

<br>

<?php if($user <= 6): ?>
出勤数
<select name="office_c">
	<option value="0" <?php echo ($office_c == '0') ? 'selected' : ''; ?>>0</option>
	<option value="1" <?php echo ($office_c == '1') ? 'selected' : ''; ?>>1</option>
	<option value="2" <?php echo ($office_c == '2') ? 'selected' : ''; ?>>2</option>
	<option value="3" <?php echo ($office_c == '3') ? 'selected' : ''; ?>>3</option>
	<option value="4" <?php echo ($office_c == '4') ? 'selected' : ''; ?>>4</option>
	<option value="5" <?php echo ($office_c == '5') ? 'selected' : ''; ?>>5</option>
</select><br>
<?php endif; ?>

<br>

<input type="checkbox" name="del" value="YES"> <font color=red size=-1>削除する</font><br>
<br>
<input type=submit name="RUN" value="   実行する  ">

</form>
</div>

<br>

<?php echo $foot; ?><br>

</body>
</html>

スケジューラー、メイン画面

スケジューラーのメイン画面です。

1週間を表示します。

登録は、名前、部署、会議室など利用に合わせて設定します。

<?php
/*履歴
トップ画面
*/

include("./login_pdo.php");
include("./holiday.php"); #休日データ

#スクリプト名
$script = "index.php";

$ttt = "Weekly Schedule";

#編集ファイル
$edt = "./edit.php";

#入力簡易化
extract($_GET);

//名前・部署
$dept = array('名前1','名前2','名前3','名前4','名前5','名前6','会議室1','会議室2');

//入力文字。ペンアイコン<img src=img/pen1.png width=14 height=14 border=0>なども可
$pen = "./";

$memo = "入力するには画面右上からLOG IN。{$pen} をクリックします。";

if($user == ""){$user = $_GET['user']; }
if($role == ""){$role = $_GET['role']; }

//今日の日付
$kyo = date('Y/m/d');
$kyd = date('m/d');

//今週の日付を保持するための配列
$out_date = array();

//調整値
$week_start = array('0','-1','-2','-3','-4','-5','-6');
//曜日
$week_jp = array('日','月','火','水','木','金','土');

//初期値
if($role == ""){$role = 0;}

//翌週
$plus = $role + 1;
$minus = $role - 1;

//ロール日数
$rold = $role*7;

//date('w')で曜日のインデックスを取得する。
//例:今日が木曜日の場合、4を返す。
$week_index = $week_start[date('w')] + $rold;

?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf8">

<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="jquery.typetype.js"></script>

<script>
	//setTimeout関数でfadeOut()の実行を遅延させる
	setTimeout(function() {
		$('.msg').fadeOut();
	}, 5000);
</script>

<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css?family=Cherry+Swash|Kaushan+Script|M+PLUS+1p&display=swap" rel="stylesheet">

<title><?php echo $ttt; ?></title>
</head>

<body>

<?php

/*
echo "Today = $kyo<br>\n";
echo "Adjust = $week_index\n<br>------<br>\n";
echo "Role = $role / minus $minus : plus $plus<br>\n";
echo "Rold = $rold<br>\n";
*/

echo "<h1>{$ttt}</h1>";

echo "<div id=login>";
echo "<form name='form' method='GET' action={$_SERVER['SCRIPT_NAME']}>\n";

//ログイン
if($user == ""){
	echo "ログイン: ";
	echo "<SELECT name=user>\n";
	echo "<OPTION value=$user>$user</OPTION>\n";
		for ($i=0; $i<=7; $i++) {
			echo "<OPTION value={$i}>{$dept[$i]}</OPTION>\n";
		}
	echo "</SELECT> <input type=submit value='LOG IN'> ";
	echo "<input type=hidden name=role value='{$role}'>";
}
else{
	echo "<font color=red>{$dept[$user]} で、ログイン中</font> "; 
	echo "<input type=submit value='LOG OUT'>";
	echo "<input type=hidden name=user value=''>";
	echo "<input type=hidden name=role value='{$role}'>";
}

echo "</form>\n";
echo "</div>";

if($_GET['msg'] != ""){
echo "<div class=msg></div>";
}

?>

<!-- ★ジャンプバー -->
<table width="100%" align="center" border="0" cellpadding="0" cellspacing="1">
<tr bgcolor="#000000"><td>

<table width="98%" align="center" border="0">
<tr align="center">
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="GET"><td>
<select name="role">
<option value="-2">2週前
<option value="-3">3週前
<option value="-4">4週前
</select><input type=submit value="ジャンプ">
<input type="hidden" name="mode" value="view">
<input type="hidden" name="user" value="<?php echo $user; ?>">
</td></form>

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="GET"><td>
<input type="hidden" name="role" value="<?php echo $minus; ?>">
<input type="submit" value=" < 前  週  ">
<input type="hidden" name="user" value="<?php echo $user; ?>">
</td></form>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="GET"><td>
<input type="hidden" name="role" value="0">
<input type="submit" value="         今 週 に も ど る         ">
<input type="hidden" name="user" value="<?php echo $user; ?>">
</td></form>

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="GET"><td>
<input type="hidden" name="role" value="<?php echo $plus; ?>">
<input type="submit" value="  翌  週 > ">
<input type="hidden" name="mode" value="view">
<input type="hidden" name="user" value="<?php echo $user; ?>">
</td></form>

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="GET"><td>
<select name="role">
<option value="2">2週後
<option value="3">3週後
<option value="4">4週後
<option value="5">5週後
<option value="6">6週後
<option value="7">7週後
<option value="8">8週後
<option value="9">9週後
<option value="10">10週後
<option value="11">11週後
<option value="12">12週後
<option value="13">13週後
<option value="14">14週後
<option value="15">15週後
</select><input type=submit value="ジャンプ">
<input type="hidden" name="user" value="<?php echo $user; ?>">
</td></form>
</tr></table>
</td></tr></table>
<br>

<?php

//Week表示 日→土
echo "<table width=100% border=1 cellspacing=0 cellpadding=4 class=base>";
echo "<tr align=center bgcolor=#FFFFCC><td width=16% height=46>日付</td>";

for ($i=0; $i<7; $i++) {
     //今日が木曜日だとしたら、$week_indexが-4となるため、今日の日付から-4が日曜日。
     //そこから1週間分ループしながら表示する。
     $disp_date = strtotime(date('Y-m-d') . '+' . $week_index . 'days');
     $out_date = date('m/d', $disp_date); //表示用に日付
     $ful_date = date('Y-m-d', $disp_date); //表示用に日付
     
     $hol = $hdnm["$ful_date"]; //休日
     
     //今日の場合、背景に色つけ
     if($out_date == "$kyd"){$bcol = "bgcolor=#FFCC66"; }
     elseif($i == "0"){$bcol = "bgcolor=#ff6699";}
     elseif($i == "6"){$bcol = "bgcolor=#99ccff";}
     else{$bcol = ""; }
     
     //休日は赤表示
     if($hol !=""){$bcol = "bgcolor=#ff6699"; $hol = "<br><span class=hate>{$hol}</span>"; }

	echo "<td width=12% {$bcol} class=date>{$out_date}<span class=yobi>({$week_jp[$i]})</span>{$hol}</td>\n";

	//echo $week_index.": ";
	//echo $out_date."<br>\n";
	
	$days[] = $ful_date; //日~土までの日付を配列に入れる。
    $week_index++;
}
echo "</tr>\n\n";


////////////////////////////////////////////////////

### SQL
//SQLの準備
$sql = "SELECT user_c,date_c,com_c,office_c FROM `weekly` WHERE date_c between '$days[0]' and '$days[6]' ORDER BY user_c,date_c";

//SQL実行
$stmt = $dbh->query($sql);

//SQL結果の取り出し
while($row = $stmt -> fetch(PDO::FETCH_ASSOC)){
	extract($row);

		 if($date_c == "$days[0]"){$evt1 = "$com_c"; $evt[$user_c][0] = "$com_c"; $ofc[$user_c][0]= $office_c; }
		 if($date_c == "$days[1]"){$evt2 = "$com_c"; $evt[$user_c][1] = "$com_c"; $ofc[$user_c][1]= $office_c; }
		 if($date_c == "$days[2]"){$evt3 = "$com_c"; $evt[$user_c][2] = "$com_c"; $ofc[$user_c][2]= $office_c; }
		 if($date_c == "$days[3]"){$evt4 = "$com_c"; $evt[$user_c][3] = "$com_c"; $ofc[$user_c][3]= $office_c; }
		 if($date_c == "$days[4]"){$evt5 = "$com_c"; $evt[$user_c][4] = "$com_c"; $ofc[$user_c][4]= $office_c; }
		 if($date_c == "$days[5]"){$evt6 = "$com_c"; $evt[$user_c][5] = "$com_c"; $ofc[$user_c][5]= $office_c; }
		 if($date_c == "$days[6]"){$evt7 = "$com_c"; $evt[$user_c][6] = "$com_c"; $ofc[$user_c][6]= $office_c; }

		//echo "$user_c $date_c / $com_c<br>";
}
	

////////////////////////////////////////////////////


///ループ開始
for ($u=0; $u<=7; $u++) {

	//ユーザーカラー&入力リンク
	if($user != "" and $u == "$user"){
	$ucol = "<font color=red><strong>"; 
	$ip0 = "<a href={$edt}?user={$u}&ddd={$days[0]}&role={$role}>{$pen}</a>";
	$ip1 = "<a href={$edt}?user={$u}&ddd={$days[1]}&role={$role}>{$pen}</a>";
	$ip2 = "<a href={$edt}?user={$u}&ddd={$days[2]}&role={$role}>{$pen}</a>";
	$ip3 = "<a href={$edt}?user={$u}&ddd={$days[3]}&role={$role}>{$pen}</a>";
	$ip4 = "<a href={$edt}?user={$u}&ddd={$days[4]}&role={$role}>{$pen}</a>";
	$ip5 = "<a href={$edt}?user={$u}&ddd={$days[5]}&role={$role}>{$pen}</a>";
	$ip6 = "<a href={$edt}?user={$u}&ddd={$days[6]}&role={$role}>{$pen}</a>";
	}
	else{$ucol = ""; $ip0 = ""; $ip1 = ""; $ip2 = ""; $ip3 = ""; $ip4 = ""; $ip5 = ""; $ip6 = ""; }
	
	echo "<tr valign=top><td height=65>{$ucol}{$dept[$u]}</td>";

	if($ofc[$u][0] == ""){$ofc[$u][0] = 0; }
	if($ofc[$u][1] == ""){$ofc[$u][1] = 0; }
	if($ofc[$u][2] == ""){$ofc[$u][2] = 0; }
	if($ofc[$u][3] == ""){$ofc[$u][3] = 0; }
	if($ofc[$u][4] == ""){$ofc[$u][4] = 0; }
	if($ofc[$u][5] == ""){$ofc[$u][5] = 0; }
	if($ofc[$u][6] == ""){$ofc[$u][6] = 0; }
	
	//会議室・小会議室は、出席=空
	if($u >= 7){
	$ofc[$u][0] = "";
	$ofc[$u][1] = "";
	$ofc[$u][2] = "";
	$ofc[$u][3] = "";
	$ofc[$u][4] = "";
	$ofc[$u][5] = "";
	$ofc[$u][6] = "";
	}
	
	//出席スタイル
	$sty = "<div class=dkei>";
	
	//ゼロを表示しない場合のサンプル
	//if($ofc[$u][5] > 0){$n5 = $ofc[$u][5];} else{$n5 = ""; }
	
	echo "
	<td>{$ip0} {$sty}{$ofc[$u][0]}</div>{$evt[$u][0]}<br></td>
	<td>{$ip1} {$sty}{$ofc[$u][1]}</div>{$evt[$u][1]}<br></td>
	<td>{$ip2} {$sty}{$ofc[$u][2]}</div>{$evt[$u][2]}<br></td>
	<td>{$ip3} {$sty}{$ofc[$u][3]}</div>{$evt[$u][3]}<br></td>
	<td>{$ip4} {$sty}{$ofc[$u][4]}</div>{$evt[$u][4]}<br></td>
	<td>{$ip5} {$sty}{$ofc[$u][5]}</div>{$evt[$u][5]}<br></td>
	<td>{$ip6} {$sty}{$ofc[$u][6]}</div>{$evt[$u][6]}<br></td>";
	

}
///ループ終了

echo "</tr>";

//出勤数計算
$ok0 = $ofc[0][0] + $ofc[1][0] + $ofc[2][0] + $ofc[4][0] + $ofc[5][0] + $ofc[6][0]; 
$ok1 = $ofc[0][1] + $ofc[1][1] + $ofc[2][1] + $ofc[4][1] + $ofc[5][1] + $ofc[6][1]; 
$ok2 = $ofc[0][2] + $ofc[1][2] + $ofc[2][2] + $ofc[4][2] + $ofc[5][2] + $ofc[6][2]; 
$ok3 = $ofc[0][3] + $ofc[1][3] + $ofc[2][3] + $ofc[4][3] + $ofc[5][3] + $ofc[6][3]; 
$ok4 = $ofc[0][4] + $ofc[1][4] + $ofc[2][4] + $ofc[4][4] + $ofc[5][4] + $ofc[6][4]; 
$ok5 = $ofc[0][5] + $ofc[1][5] + $ofc[2][5] + $ofc[4][5] + $ofc[5][5] + $ofc[6][5]; 
$ok6 = $ofc[0][6] + $ofc[1][6] + $ofc[2][6] + $ofc[4][6] + $ofc[5][6] + $ofc[6][6]; 

echo "<tr height=65><td>出勤数<br></td>";
echo "<td align=center class=kei>$ok0</td>";
echo "<td align=center class=kei>$ok1</td>";
echo "<td align=center class=kei>$ok2</td>";
echo "<td align=center class=kei>$ok3</td>";
echo "<td align=center class=kei>$ok4</td>";
echo "<td align=center class=kei>$ok5</td>";
echo "<td align=center class=kei>$ok6</td>";

echo "</tr></table>";

echo "$okei";
echo "<div class=memo>{$memo}</div>";
echo $foot;


?>
<br>

<script>
$('.msg').typetype('<?php echo $_GET['msg']; ?>')
</script>

</body>
</html>

ログイン用ファイル

データベースを作ったら、ログイン用ファイルを用意します。


ファイル名は、login_pdo.php とします。

ユーザー名、パスワード、ホスト名、データベース名はそれぞれの環境に合わせます。

<?php
/*
ログイン用
*/

$usid = "username";  //ユーザー名 
$pass = "password";  //パスワード
$host = "ホスト名";  //ホスト名
$dbnm = "データベース名";  //データベース名


//通常処理
try{
	//PDOオブジェクトの作成
	$dbh = new PDO('mysql:host=$host;dbname=$dbnm;charset=utf8', $usid, $pass);
	//echo "接続成功"; #テスト時のみ表示
} 
//エラー処理
catch(PDOException $e) {
	echo "接続エラー". $e->getMessage() . "\n";
	exit();
}


$foot = '<hr color="#6B8E23" height="1"><center>
<font color="#6B8E23" size=2>- フッター - </font></center>';

?>

スケジューラーのテーブル作成

まずはスケジューラーのテーブルを作成します。

名前は、weeklyとしています。


MySQLで以下のようにして実行します。

CREATE TABLE `weekly` (
  `no_c` int(11) NOT NULL,
  `user_c` varchar(4) DEFAULT NULL,
  `date_c` date DEFAULT NULL,
  `com_c` text,
  `timestamp_c` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

スケジューラー

以前Perlで社内スケジューラーを作成し、Vectorで公開しました。

 

マイグループ

https://www.vector.co.jp/soft/win95/net/se320417.html

 

Perlのバージョンアップしていて、書き方も変わってしまいました。

 

以前はウェブではPerlくらいしか利用出来ないこともあり、Perlでプログラムを書き、データはテキスト保存としていました。

 

現在ではPHP + MySQL が使える環境が多くなったのでそちらで利用出来るほうが便利かと思います。

 

簡単なプログラムですが、公開予定です。