Webプログラミングの 基 礎 PHPの 基 礎 (7) (2011/06/29) 政 策 情 報 学 部 渡 辺 恭 人 riho-m@cuc.ac.jp メーリングリスト:riho-m-rg11@cuc.ac.jp: 資 料 ページ: http://www.cuc.ac.jp/~riho-m/rg11/
前 回 の 課 題 おみくじのプログラムを 参 考 にして 生 まれた 年 ( 西 暦 )を 入 力 すると 干 支 を 表 示 するプロ グラムを 作 ってください 2
基 本 的 な 流 れ 生 まれた 年 を 入 力 生 まれた 年 から 干 支 を 計 算 する 干 支 を 表 示 する 3
Webプログラムでの 流 れ 1 最 初 の 実 行 受 信 データ 無 し 2 POSTで 自 分 に 生 まれた 年 を 送 信 データ 名 year PHP 部 分 : 受 信 データ( 生 まれた 年 )から 干 支 を 算 出 受 信 データがなければスルー HTMLフォーム 部 分 : 生 まれた 年 を 入 力 し 送 信 4
干 支 0 子 ね 鼠 1 丑 うし 牛 2 寅 とら 虎 3 卯 う 兎 4 辰 たつ 竜 5 巳 み 蛇 6 午 うま 馬 7 未 ひつじ 羊 8 申 さる 猿 9 酉 とり 鶏 10 戌 いぬ 犬 11 亥 い 猪 これらを 配 列 変 数 に 代 入 する 例 eto_data[0]= ねずみ 2008 年 は ねずみ なので 12で 割 った 余 りが0になるように 調 整 する 2008から4を 引 いた2004を12で 割 ると 余 りが0になるので 計 算 式 は ( 年 -4) % 12 となる 5
プログラム 前 半 <?php if (isset($_post["start"])) { $year = $_POST["year"]; $eto_data[] = "ねずみ"; $eto_data[] = "うし"; $eto_data[] = "とら"; $eto_data[] = "うさぎ"; $eto_data[] = "たつ"; $eto_data[] = "へび"; $eto_data[] = "うま"; $eto_data[] = "ひつじ"; $eto_data[] = "さる"; $eto_data[] = "とり"; $eto_data[] = "いぬ"; $eto_data[] = "いのしし"; 6
プログラム 後 半 $result = ($year-4) % 12; $message = "あなたの 干 支 は ". $eto_data[$result]. " です"; } else { $message = "あなたの 生 まれた 年 の 干 支 を 調 べましょう"; }?> <html> <body> <?php print $message;?> <br> <form method="post"> <input type="text" name="year" value=""><br /> <br> <input type="submit" name="start" value=" 変 換 する"> </form> </body> </html> 7
実 行 画 面 8
自 分 で 関 数 を 作 る ユーザ 定 義 関 数 ユーザが 独 自 に 定 義 した 関 数 のこと 書 式 引 数 の 数 は 任 意 function 関 数 名 ( 引 数 1, 引 数 2, 引 数 3,.){ 処 理 内 容 return 戻 り 値 ; } 戻 り 値 がある 場 合 は return 文 で 記 述 9
関 数 を 記 述 する 場 所 ユーザ 定 義 関 数 を 記 述 する 場 所 関 数 を 呼 び 出 す 位 置 の 前 関 数 を 呼 び 出 す 位 置 の 後 どちらでもよい 10
関 数 の 引 数 のタイプ 値 渡 しと 参 照 渡 し 値 渡 し 通 常 のタイプ 関 数 への 引 数 の 値 を 直 接 渡 す 関 数 内 でその 値 を 変 更 しても 呼 び 出 し 元 の 変 数 の 値 に 影 響 を 与 えない 参 照 渡 し 引 数 で 変 数 の 前 に&をつける 関 数 内 でその 値 を 変 更 すると 呼 び 出 し 元 の 変 数 の 値 に 影 響 を 与 える 11
参 照 渡 しの 例 <?php $sum = 1000; kaimono($sum,100); kaimono($sum,50); print $sum; function kaimono (&$sum, $nedan){ $sum = $sum - $nedan; }?> 12
値 渡 しのユーザ 定 義 関 数 ( 前 半 ) <?php // ユーザー 定 義 関 数 function user_sum($a,$b) { $a = $a + $b; print " 合 計 は". $a. "です<br>"; }?> 13
値 渡 しのユーザ 定 義 関 数 ( 後 半 ) <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <?php $a = 15; $b = 30; user_sum($a,$b); print " 変 数 の 値 は". $a. " と ". $b. "です<br>";?> </body> </html> 14
参 照 渡 しのユーザ 定 義 関 数 ( 前 半 ) <?php function user_sum(&$a,&$b) { $a = $a + $b; print " 合 計 は". $a. "です<br>"; }?> 15
参 照 渡 しのユーザ 定 義 関 数 ( 後 半 ) <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <?php $a = 15; $b = 30; user_sum($a,$b); print " 変 数 の 値 は". $a. " と ". $b. "です<br>";?> </body> </html> 16
Webアプリケーションにおける アルゴリズム アルゴリズムを 考 える プログラムに 取 り 掛 かる 前 どのような 機 能 や 仕 様 が 必 要 となるのか その 手 順 はどのようにするのかを 考 える 重 要 なこと プログラムを 作 る 前 に アルゴリズムについて 検 討 する わからないことなどを 自 分 で 調 べることができる 17
素 数 を 求 めるアルゴリズム ある 数 が 素 数 であるかどうかを 出 力 する 素 数 とは 1とその 数 自 身 以 外 のどんな 自 然 数 によっても 割 り 切 れない 値 で 1より 大 きな 数 定 番 アルゴリズム エラトステネスのふるい 定 義 に 従 った 馬 鹿 正 直 な 手 順 判 定 したい 数 より 小 さい 全 ての 数 で 割 ってみる 18
エラトステネスのふるい 基 本 的 な 考 え 方 判 定 したい 数 より 小 さい 全 ての 数 で 割 ってみる 91が 素 数 かどうかを 判 定 するには 2から90で 割 ってみればよい 割 り 切 れる= 余 りが0 途 中 一 度 でも 割 り 切 れたら 素 数 ではない どんなに 面 倒 な 手 順 でも 明 確 で 機 械 的 なら 立 派 なアルゴリズムである 2から90までの 数 で91を 割 る 処 理 なんて 一 瞬! 19
エラトステネスのふるい 始 め 判 定 したい 数 mを 入 力 判 定 したい 数 を 割 る 数 n=2 m は nで 割 り 切 れない? Yes n に1を 加 える n > m -1? Yes m は 素 数 である と 表 示 終 わり No No m は 素 数 ではない と 表 示 20
プログラム(sosu1.php) <?php sosu_check(); function sosu_check(){ $a = 91; $s = "は 素 数 です"; }?> for ($i = 2; $i <= ($a - 1); $i++){ if ($a % $i == 0) { $s = "は 素 数 ではありません"; break; } } print $a. $s; 21
文 字 化 けについて Webアプリケーションでよく 起 きるトラブル データの 入 出 力 メール 送 信 などの 個 所 で 起 きる Webブラウザ Webサーバ PHP データベースサ ーバなどの 間 で 文 字 コードが 正 しく 設 定 されてい ないときに 起 こりうる 文 字 化 けの 原 因 文 字 にはコードが 多 数 ある( 日 本 語 にも 数 種 類 ) 使 う 文 字 コードを 統 一 するのも 一 つの 方 法 PHPでどのように 設 定 されているかを 確 認 する Phpinfo()の 表 示 のうち mbstringカテゴリ 22
文 字 コード JIS(ISO-2022JP) 電 子 メールでの 日 本 語 の 文 字 コード SJIS(Shift JIS) WindowsやMS-DOS 等 で 普 及 した 日 本 語 の 文 字 コード EUC( Extended UNIX Code) UNIXシステムで 普 及 UTF-8 コンピュータ 上 で 多 言 語 の 文 字 を 単 一 の 文 字 コ ードで 取 り 扱 うために 1980 年 代 に 提 唱 された 文 字 コードである Unicodeの 一 つ 23
PHPでの 設 定 方 法 3つ php.iniを 設 定 一 般 ユーザにはできない.htaccessを 設 定 使 えないレンタルサーバもある PHPのスクリプト 内 で 設 定 24
PHPスクリプトの 中 で 設 定 する <?php mb_internal_encoding ("UTF-8"); mb_http_output("utf-8"); ob_start("mb_output_handler"); header("content-type: text/html; charset=utf-8");?> print " 日 本 語 を 出 力 する"; EmEditorで 保 存 するときに 文 字 コードをUTF-8に 設 定 するのを 忘 れないように!( 設 定 した 文 字 コードと 同 じにする ) 25
.htaccessファイルで 設 定 する.htaccessファイル WebサーバのApacheの 設 定 やPHPの 設 定 ユー ザの 認 証 を 設 定 する Windowsでは ドット. で 始 まるファイル 名 はつく れないので ドットのないファイル 名 で 作 成 し www2に 転 送 してから 変 更 する 次 の1 行 をhtaccessというファイル 名 で 作 成 す る php_value default_charset UTF-8 WinSCPで 転 送 して ファイル 名 を.htaccessに 変 更 26
文 字 コードの 確 認 以 下 のプログラムを 入 力 保 存 し WinSCPで www2に 転 送 してください Internet Explorerで 実 行 する default_charsetの 欄 を 見 る <?php phpinfo();?> 27
課 題 スライド21のプログラムの 改 良 関 数 の 定 義 を 変 更 して 引 数 にチェックしたい 数 値 を 入 れられるようにしてください プログラムで$aの 値 をいちいち 変 更 しなくても フォームを 使 って ブラウザから 値 を 入 力 で きるようにしてください 以 上 作 ったプログラムと 実 行 結 果 をWordに まとめ メーリングリストに 提 出 してください ファイル 名 例 : kadai-0629- 学 籍 番 号.doc 締 切 : 7/5 23:59 28