PHP 実用的なサンプル 0312006003 浅川 和久 2017/3/18 PHP 実用的なサンプル.

Slides:



Advertisements
Similar presentations
University of Electro-Communications Human Interface section 基礎プログラミングおよび演 習 第7回.
Advertisements

Jw_cad 基本操作( 5 ) 文字入力 2011/11/23 SystemKOMACO Jw_cad 基本操作( 5 ) Ver.1 1.
1 JSP の作成 JSF による Web アプリケーション 開発 第 4 回. 2 ここでの内容 JSF での JSP の作り方と動かし方につい て学ぶ。
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
第6回 JavaScript ゼミ セクション3-6 発表者 直江 宗紀. 組み込み関数  JavaScript に予め用意された関数  特定のオブジェクトに依存していない  単に関数名で呼び出すことが可能.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
情報理工学部 情報システム工学科 3年 H 井奈波 和也
パワーポイントの使い方 東京女子大学 情報処理センター 浅川伸一.
JavaScript プログラミング入門 2006/11/10 神津.
プログラミング演習(1組) 第7回
プログラミング基礎I(再) 山元進.
Struts1.xの脆弱性(CVE ) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開)
プログラミング言語としてのR 情報知能学科 白井 英俊.
PHPエディタによる 情報システム演習 01.
Struts1.xの脆弱性(CVE ) に対するSDEの対処:wrapタイプ (パッチのご提供)
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
エンタープライズアプリケーション II 第10回 / 2006年7月23日
Servlet入門(2) 入力フォームをつかったWebアプリ
PHP 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
ネットワーク情報活用 ILC Office / ILP KOBAYASHI Tomoko
情報理工学部 情報システム工学科 4年 H 亀窪祐太 H 纐纈琢真
Webコミュニケーショングループ ~PHPの基礎~ M1 宮崎 真.
第4回 個人の動画配信補足のためのWeb構築
Bottle/Pythonによる Webアプリ入門
Web App Semi 2008 #1 Web App Semi 2008 #1.
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
セッション管理 J2EE I 第9回 /
PHP 文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
平成22年度に実施を予定するインターネットを 用いた研修システムによる研修 ライブ配信受講手順書
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
PHP 概要 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
HTTPプロトコル J2EE I 第7回 /
Web上で管理・利用できる 面接予約データベースシステムの構築
EBSCOhost 詳細検索 チュートリアル support.ebsco.com.
JSPの作成 J2EE II 第3回 2005年4月10日.
個人情報入力の為に、外部WEBサービスにセキュアにsnsのユーザIDを渡す仕様(c_member_id)
データベース設計 第9回 Webインタフェースの作成(1)
第7回 条件による繰り返し.
第8章 Web技術とセキュリティ   岡本 好未.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
「ユーザー設定リスト」の作成と削除 ◎ 新しい「リスト」の作成法
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
制作技術ー4 アクセスカウンタ等付加機能 PHP と Javascript
プログラミング演習(2組) 第8回
アルゴリズムとプログラミング (Algorithms and Programming)
エクセル(6)の目次 「ユーザー設定リスト」の作成と削除 「入力規則」での「リスト」 ユーザー定義による表示形式
第7回JavaScriptゼミ セクション4-5 発表者 直江 宗紀.
制作技術ー3 双方向通信 : CGIシステムと環境変数
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
プログラミング基礎B 文字列の扱い.
JavaScript プログラミング演習 - じゃんけんゲーム - 「ホームページを動的に制御したい…」
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
コーパス言語学 ~バッチ処理~ 2013.10. 28.
北海道情報大学 情報メディア学部 情報メディア学科 新井山ゼミ 金子拓磨
C言語 はじめに 2016年 吉田研究室.
基礎プログラミング演習 第6回.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
ウェブデザイン演習 第6回.
C言語講座 制御(選択) 2006年 計算技術研究会.
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
C言語講座 四則演算  if ,  switch 制御文.
プログラミング 2 静的変数.
Presentation transcript:

PHP 実用的なサンプル 0312006003 浅川 和久 2017/3/18 PHP 実用的なサンプル

和暦変換プログラム 初期状態 実行中 2017/3/18 PHP 実用的なサンプル

和暦変換プログラム デバッグルーチン 年月日の入力 厳密な入力チェック 正確な和暦変換 実行履歴の表示 文字種や数値の範囲チェック、閏年判定、性格な妥当性チェック 正確な和暦変換 和暦の境界チェック、元号の変わり目の判定 実行履歴の表示 過去に表示された判定結果を逐次表示 2017/3/18 PHP 実用的なサンプル

デバッグルーチン HTMLコメント書式 <!-- と --> で囲む デバッグ表示 「表示」ー「ページのソース」 <? // printd.inc // デバッグ文の表示 function printd($msg) { printf("<!-- %s -->\n", $msg); } ?> HTMLコメント書式 <!-- と --> で囲む デバッグ表示 「表示」ー「ページのソース」 2017/3/18 PHP 実用的なサンプル

日付のチェック(1) <? // date_is_valid.inc // 入力値のチェック // 返り値:True 妥当な値 function date_is_valid($yyyy ,$mm, $dd){ printd("\$yyyy=$yyyy, \$mm=$mm, \$dd=$dd"); if(! ereg("^[0-9][0-9]+$", $yyyy)) return False; if(! ereg("^[0-9][0-9]*$", $mm)) return False; if(! ereg("^[0-9][0-9]*$", $dd)) return False; printd("date_is_valid(): check1"); if($mm < 1 || 12 < $mm) return False; printd("date_is_valid(): check2"); if($dd < 1 || 31 < $dd) return False; printd("date_is_valid(): check3"); 2017/3/18 PHP 実用的なサンプル

正規表現 [0-9][0-9]+$ [0-9][0-9]*$ if(! ereg("^[0-9][0-9]+$", $yyyy)) return False; [0-9][0-9]+$ 「0から9」の文字で始まり(^)、その直後に「0から9」までのいずれかの文字が1個以上の繰り返し(+) if(! ereg("^[0-9][0-9]*$", $mm)) return False; [0-9][0-9]*$ 「0から9」の文字で始まり(^)、その直後に「0から9」までのいずれかの文字が0個以上の繰り返し(*) 2017/3/18 PHP 実用的なサンプル

日付のチェック(2) if($dd==31){ if($mm==2 || $mm==4 || $mm==6 || $mm==9 || $mm==11){ printd("date_is_valid(): check4"); return False; } return True; if($dd==30){ if($mm==2){ printd("date_is_valid(): check5"); if($mm==2 && $dd==29){ if($yyyy % 4 == 0){ if($yyyy % 100 == 0){ if($yyyy % 400 == 0){ return True; } printd("date_is_valid(): check6"); return False; printd("date_is_valid(): check7"); ?> 2017/3/18 PHP 実用的なサンプル

和暦への変換(1) <? // calc_wareki.inc // 元号の計算 // 返り値:計算結果の文字列 function calc_wareki($yyyy, $mm, $dd) { printd("\$yyyy=$yyyy, \$mm=$mm, \$dd=$dd"); $border = array( array(開始日 => 18680908, 終了日 => 19120730, 元号 => 明治), array(開始日 => 19120730, 終了日 => 19261225, 元号 => 大正), array(開始日 => 19261225, 終了日 => 19890107, 元号 => 昭和), array(開始日 => 19890107, 終了日 => 20091231, 元号 => 平成) ); $target = sprintf("%04d%02d%02d", $yyyy, $mm, $dd); printd("\$target=$target"); 2017/3/18 PHP 実用的なサンプル

和暦への変換(2) if($target < $border[0][開始日]) return "計算対象外"; printd("calc_wareki(): check1"); for($i=0; $border[$i]; $i++){ printd("calc_wareki(): \$border[$i][元号]=" . $border[$i][元号]); if($border[$i][開始日] <= $target && $target <= $border[$i][終了日]){ $temp = ($yyyy - substr($border[$i][開始日], 0, 4) + 1); $wareki = $border[$i][元号].($temp == "1" ? "元" : $temp); break; } if($i > 3) return "計算対象外"; printd("calc_wareki(): check2"); return sprintf("%s年%d月%d日", $wareki, $mm, $dd); ?> 2017/3/18 PHP 実用的なサンプル

セッションの考え方 「履歴の表示」・・・履歴のデータをどこかに保存しておかねばならない Webページへのアクセスは毎回完結した処理 クライアント内のどこか サーバ内のどこか Webページへのアクセスは毎回完結した処理 情報を何らかな方法で持ちまわることで一連の処理を関連づけてやれば、見かけ上連続した処理を実現できる 論理的に連続した処理のことをセッションと呼ぶ これを実現することをセッション管理と呼ぶ 2017/3/18 PHP 実用的なサンプル

セッションの実現方法 クライアントが持ちまわる形式が一般的 サーバに情報を保存する場合でも、保存した情報を取り出すためのキーになる情報自体はクライアント側に持たせなければならない Webのしくみだけではサーバ側がクライアントを一意に識別することが困難 2017/3/18 PHP 実用的なサンプル

php.iniの編集 session_register /etc/php/apache2/php.ini を編集 現在のセッションに1つ以上の変数を登録する /etc/php/apache2/php.ini を編集 register_globals off → register_globals on 2017/3/18 PHP 実用的なサンプル

メインルーチン(1) <? // wareki_sample.php session_start(); // セッションを開始/復帰 if($button){ $hist = ""; session_destroy(); // セッションデータを破棄 } session_register(hist); // セッションへ変数を登録 include("printd.inc"); include("date_is_valid.inc"); include("calc_wareki.inc"); 2017/3/18 PHP 実用的なサンプル

<? echo session_name() . “=“ . session_id(); ?> メインルーチン(2) // // 入力画面の表示 function display_input_area($yyyy, $mm, $dd, $hist) { ?> <form action="wareki_sample.php?<?=SID?>"> 西暦 <input type=text name=yyyy size=5 value="<? echo $yyyy; ?>">年 <input type=text name=mm size=5 value="<? echo $mm; ?>">月 <input type=text name=dd size=5 value="<? echo $dd; ?>">日 <input type=submit value="送信"> <input type=submit name=button value="履歴のクリア"> </form> <? } <? echo session_name() . “=“ . session_id(); ?> 2017/3/18 PHP 実用的なサンプル

メインルーチン(3) 2017/3/18 PHP 実用的なサンプル // メイン printd("前回のセッション名=".session_name()); printd("前回のセッションID=".session_id()); printd("セッションモジュール名=".session_module_name()); printd("セッションデータ保存path名=".session_save_path()); printd("\$histがセッションに登録されているか=".(session_is_registered("hist") ? "True" : "False")); printd("前回の\$hist=".$hist); display_input_area($yyyy, $mm ,$dd, $hist); // 入力エリアの表示 if(empty($yyyy) && empty($mm) && empty($dd)) exit; if(date_is_valid($yyyy, $mm, $dd)){ // 入力のチェック $wareki = calc_wareki($yyyy, $mm, $dd); //元号の計算 $result = sprintf("西暦%d年%d月%d日は%sです。<br>\n",$yyyy, $mm, $dd, $wareki); echo $result; // 結果の表示 }else{ print("<font color=red>日付の入力が誤っています。</font>\n"); } if($hist){ print("<table border>\n<tr><td>\n$hist</table>\n"); // 履歴の表示 if($result){ $hist = date("Y/m/d H:i:s ") . $result . $hist; // 履歴の追加 printd("今回の\$hist=".$hist); ?> 2017/3/18 PHP 実用的なサンプル

PHP3 セッション管理 HTTPクッキーを使う URLの引数として指定する hidden属性を使う 2017/3/18

HTTPクッキー 変数の値をクライアント側にファイルとして保持する ブラウザによってはサポートされていない 設定で無効にできる 2017/3/18 PHP 実用的なサンプル

HTTPクッキー 2017/3/18 PHP 実用的なサンプル <? include("date_is_valid.inc"); include("calc_wareki.inc"); // デバッグ文の表示 function printd($msg){ //printf("<!-- %s -->\n", $msg); syslog(LOG_INFO, sprintf("<!-- %s -->\n", $msg));} // // 入力画面の表示 function display_input_area($yyyy, $mm, $dd, $hist){ ?> <form action="wareki_sample-cookie.php"> 西暦 <input type=text name=yyyy size=5 value=“<? echo $yyyy; ?>”>年 <input type=text name=mm size=5 value=“<? echo $mm; ?>”>月 <input type=text name=dd size=5 value=“<? echo $dd; ?>”>日 <input type=submit value="送信"><input type=submit name=button value="履歴のクリア"></form> 2017/3/18 PHP 実用的なサンプル

HTTPクッキー 2017/3/18 PHP 実用的なサンプル // // メイン if($buttin){ $hist =""; } printd("\$hist=$hist");if($yyyy && $mm && $dd){ if(date_is_valid($yyyy, $mm, $dd)){ // 入力のチェック $wareki = calc_wareki($yyyy, $mm, $dd); // 元号の計算 $result = sprintf("西暦%d年%d月%d日は%sです。<br>\n",$yyyy, $mm, $dd, $wareki); $errmsg = ""; }else{ $result = ""; $errmsg = "<font color=red>日付の入力が誤っています</font>\n"; }if($hist){ $history = "<table border>\n<tr><td>\n$hist</table>\n"; }if($result){ $hist = date(“Y/m/d H:i:s ”) . $result . $hist; // 履歴に追加 }setCookie(“hist”, $hist, time()+3600); // クッキーの設定 display_input_area($yyyy, $mm ,$dd, $hist); // 入力エリアの表示 echo $result; // 結果の表示 echo $errmsg; // エラー表示 echo $history; // 履歴の表示 ?> 2017/3/18 PHP 実用的なサンプル

URLの引数 クライアントの実装に依存しない URLを保存しておくと再利用できる URLが長くなって見づらい URLの長さ制限がある 2017/3/18 PHP 実用的なサンプル

URLの引数 2017/3/18 PHP 実用的なサンプル <? include("date_is_valid.inc"); include("calc_wareki.inc"); // デバッグ文の表示 function printd($msg){  //printf("<!-- %s -->\n", $msg); syslog(LOG_INFO, sprintf("<!-- %s -->\n", $msg)); } // // 入力画面の表示 function display_input_area($yyyy, $mm, $dd, $hist){ ?> <form method="post" action="wareki_sample-url.php?hist=<?echo urlencode($hist)?>"> 西暦 <input type=text name=yyyy size=5 value=“<? echo $yyyy; ?>”>年 <input type=text name=mm size=5 value=“<? echo $mm; ?>”>月 <input type=text name=dd size=5 value=“<? echo $dd; ?>”>日 <input type=submit value="送信"><input type=submit name=button value="履歴のクリア"></form> 2017/3/18 PHP 実用的なサンプル

URLの引数 2017/3/18 PHP 実用的なサンプル // // メイン if($buttin){ $hist =""; } printd("\$hist=$hist"); $hist = urldecode($hist); if($yyyy && $mm && $dd){ if(date_is_valid($yyyy, $mm, $dd)){ // 入力のチェック $wareki = calc_wareki($yyyy, $mm, $dd); // 元号の計算 $result = sprintf("西暦%d年%d月%d日は%sです。<br>\n",$yyyy, $mm, $dd, $wareki); $errmsg = ""; }else{ $result = ""; $errmsg = "<font color=red>日付の入力が誤っています</font>\n"; }if($hist){ $history = "<table border>\n<tr><td>\n$hist</table>\n"; }if($result){ $hist = date(“Y/m/d H:i:s ”) . $result . $hist; // 履歴に追加 }display_input_area($yyyy, $mm ,$dd, $hist); // 入力エリアの表示 echo $result; // 結果の表示 echo $errmsg; // エラー表示 echo $history; // 履歴の表示 ?> 2017/3/18 PHP 実用的なサンプル

hidden属性 クライアントに依存しない URLは変わらない ブラウザを終了すると変数を復元できない 2017/3/18 PHP 実用的なサンプル

hidden属性 2017/3/18 PHP 実用的なサンプル <? include("date_is_valid.inc"); include(“calc_wareki.inc”);// デバッグ文の表示 function printd($msg){  //printf("<!-- %s -->\n", $msg); syslog(LOG_INFO, sprintf("<!-- %s -->\n", $msg)); } // // 入力画面の表示 function display_input_area($yyyy, $mm, $dd, $hist){ ?> <form action="wareki_sample-hidden.php"> 西暦 <input type=text name=yyyy size=5 value=“<? echo $yyyy; ?>”>年 <input type=text name=mm size=5 value=“<? echo $mm; ?>”>月 <input type=text name=dd size=5 value=“<? echo $dd; ?>”>日 <input type=submit value="送信"><input type=submit name=button value="履歴のクリア"> <input type=hidden name=hist value="<? echo $hist; ?>"> </form> 2017/3/18 PHP 実用的なサンプル

hidden属性 2017/3/18 PHP 実用的なサンプル // // メイン if($buttin){ $hist =""; } printd("\$hist=$hist"); $hist = urldecode($hist); if($yyyy && $mm && $dd){ if(date_is_valid($yyyy, $mm, $dd)){ // 入力のチェック $wareki = calc_wareki($yyyy, $mm, $dd); // 元号の計算 $result = sprintf("西暦%d年%d月%d日は%sです。<br>\n",$yyyy, $mm, $dd, $wareki); $errmsg = ""; }else{ $result = ""; $errmsg = "<font color=red>日付の入力が誤っています</font>\n"; }if($hist){ $history = "<table border>\n<tr><td>\n$hist</table>\n"; }if($result){ $hist = date(“Y/m/d H:i:s ”) . $result . $hist; // 履歴に追加 display_input_area($yyyy, $mm ,$dd, $hist); // 入力エリアの表示 echo $result; // 結果の表示 echo $errmsg; // エラー表示 echo $history; // 履歴の表示 ?> 2017/3/18 PHP 実用的なサンプル