2015 年 度 Webシステムプログラミング a PHPによるDB 操 作 (3)
講 義 内 容 ( 前 回 ) 提 出 課 題 の 解 答 例 PHPの 応 用 PHPからMySQLへのアクセス(レコードの 新 規 登 録 ) 2
( 前 回 ) 提 出 課 題 課 題 1( 提 出 課 題 ):データベースからデータを 読 み 込 み,その データを 表 示 するWebページ 作 成 してみましょう user テーブルから 書 籍 のデータを 一 覧 表 示 する. 手 順 1:PHPのファイルを user_list.php という 名 前 で 作 業 フォルダに 作 成 する. プログラムは 自 分 で 考 える. 手 順 2:Webブラウザで 手 順 1で 作 成 したページにアクセスし 確 認 する. http://localhost/php04/user_list.php 3
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 利 用 者 一 覧 </title> </head> <body> <h2> 利 用 者 一 覧 </h2> 解 答 <?php try { データベース // 処 理 の 例 外 範 囲 始 まり // データベースへの 接 続 $db = new PDO('mysql:host=localhost:63306;dbname= j01234_db ;charset=utf8',' j01234 ','hogehoge '); $db->setattribute(pdo::attr_errmode, エラー 時 PDO::ERRMODE_EXCEPTION); に 例 外 発 生 させるように 設 定 / // SQL 文 の 準 備 と 実 行 $sql = $db->prepare("select user ;"); * FROM $sql->execute(); // レコードごとの 処 理 while( $row = $sql->fetch() ) { echo $row[' user_id ']. " "; echo $row[' name ']. " "; echo $row[' address ']. " "; echo $row[' tel']. " "; echo $row[' birth ']. " "; echo $row[' reg_date ']. "<br>"; } } catch( PDOException データベース $e 処 理 の ){ 例 外 キャッチ // exit(' データベース 処 理 失 敗 :'.$e->getmessage()); }?> </body> </html> user_list.php
( 前 回 ) 提 出 課 題 課 題 2( 提 出 課 題 ): 検 索 キーワードを 入 力 し 検 索 ボタンを 押 すと, 入 力 されたキーワードを 氏 名 に 含 む 利 用 者 の 一 覧 を 表 示 するWebページを 作 り ましょう. 手 順 1:HTMLのファイル( キーワード 入 Webページ)を 力 input_keyword_user.html という 名 前 で 作 業 フォルダに 作 成 する. 手 順 2:PHPプログラムのファイルを search_user.php という 名 前 で 作 業 フォル ダに 作 成 する( 前 回 の 資 料 を 参 考 にすること). 手 順 3:Webブラウザで 手 順 1で 作 成 したページにアクセスし 確 認 する. http://localhost/php04/input_keyword_user.html 田 keyword input_keyword_user.html search_user.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> ユーザ 検 索 </title> </head> <body> <h2> ユーザ 検 索 </h2> 解 答 <form action="search_user.php" method="get"> <p> 氏 名 キーワード:<input type="text" name="keyword"> </p> <p> <input type="submit" 検 索 "> value=" </p> </form> </body> </html> input_keyword_user.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 利 用 者 一 覧 </title> </head> <body> <h2> 利 用 者 一 覧 </h2> <?php 解 答 $keyword = $_GET["keyword"]; フォームデータ"keyword" の 取 得 // echo 検 "<p> 索 キーワード: {$keyword}</p>"; try { データベース // 処 理 の 例 外 範 囲 始 まり // データベースへの 接 続 $db = new PDO('mysql:host=localhost:63306;dbname=j01234_db;char $db->setattribute(pdo::attr_errmode, エラー 時 PDO::ERRMODE_EXCEPTION); に 例 外 発 生 させるように 設 定 / // SQL 文 の 準 備 と 実 行 $sql = $db->prepare("select * FROM user WHERE name LIKE?"); $sql->bindvalue(1,"%{$keyword}%"); $sql->execute(); 次 につづく search_user.php
echo "<table>"; echo "<tr bgcolor='#99ff99'><th> ユーザ 番 号 </th><th> 氏 名 </th><th> 住 所 </th><th> 電 話 番 号 </th><th> 生 年 月 日 </th><th> 登 録 年 月 日 </th></tr>"; // レコードごとの 処 理 while( $row = $sql->fetch() ) { echo "<tr bgcolor='#eeeeee'>"; echo "<td>". $row['user_id']. "</td>"; echo "<td>". $row['name']. "</td>"; echo "<td>". $row['address']. "</td>"; echo "<td>". $row['tel']. "</td>"; echo "<td>". $row['birth']. "</td>"; echo "<td>". $row['reg_date']. "</td>"; echo "</tr>"; } echo "</table>"; } catch( PDOException データベース $e 処 理 の ){ 例 外 キャッチ // exit(' データベース 処 理 失 敗 :'.$e->getmessage()); }?> </body> </html> 解 答 search_user.php
( 前 回 ) 提 出 課 題 課 題 3( 提 出 課 題 ): 検 索 キーワードを 入 力 し 検 索 ボタンを 押 すと, 入 力 されたキーワードを 書 名 (タイトル) または 著 者 に 含 む 書 籍 の 一 覧 を 表 示 す るWebページを 作 りましょう. 手 順 1: 実 習 3で 作 成 した input_keyword_book.php をコピーして, 名 前 を input_keyword_book2.php に 変 えるする. 手 順 2: input_keyword_book2.php について 適 宜 プログラムを 変 更 する. 手 順 3: 実 習 3で 作 成 した search_book.php をコピーして, 名 前 を search_book2.php する. 手 順 4: search_book2.php について 適 宜 プログラムを 変 更 する. 手 順 5:Webブラウザで 手 順 1で 作 成 したページにアクセスし 確 認 する. http://localhost/php04/input_keyword_book2.html 産 業 keyword input_keyword_book2.html search_book2.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 書 籍 検 索 </title> </head> <body> <h2> 書 籍 検 索 </h2> 解 答 <form action="search_book2.php" method="get"> <p> 書 名 著 者 名 キーワード:<input type="text" name="keyword"> </p> <p> <input type="submit" 検 索 "> value=" </p> </form> </body> </html> input_keyword_book2.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 書 籍 一 覧 </title> </head> <body> <h2> 書 籍 一 覧 </h2> <?php $keyword = $_GET["keyword"]; フォームデータ"keyword" の 取 得 // echo 検 "<p> 索 キーワード: {$keyword}</p>"; try { データベース // 処 理 の 例 外 範 囲 始 まり 解 答 // データベースへの 接 続 $db = new PDO('mysql:host=localhost:63306;dbname=j01234_db;char $db->setattribute(pdo::attr_errmode, エラー PDO::ERRMODE_EXCEPTION); 時 に 例 外 発 生 させるように 設 定 // SQL 文 の 準 備 と 実 行 $sql = $db->prepare("select * FROM book WHERE title LIKE? OR a $sql->bindvalue(1,"%{$keyword}%"); $sql->bindvalue(2,"%{$keyword}%"); $sql->execute(); 次 につづく search_book2.php
echo "<table>"; echo "<tr bgcolor='#99ff99'><th>isbn</th><th> タイトル</th><th> 著 者 </th><th> 出 版 社 </th><th> 発 行 日 </th><th> 価 格 </th></tr>"; // レコードごとの 処 理 while( $row = $sql->fetch() ) { echo "<tr bgcolor='#eeeeee'>"; echo "<td>". $row['isbn']. "</td>"; echo "<td>". $row['title']. "</td>"; echo "<td>". $row['author']. "</td>"; echo "<td>". $row['publisher']. "</td>"; echo "<td>". $row['pub_date']. "</td>"; echo "<td>". $row['price']. "</td>"; echo "</tr>"; } echo "</table>"; } catch( PDOException データベース $e 処 理 の ){ 例 外 キャッチ // exit(' データベース 処 理 失 敗 :'.$e->getmessage()); }?> </body> </html> 解 答 search_book2.php
ヒ ン ト は 次 ペ ー ジ ( 前 回 ) 提 出 課 題 課 題 4(オプション 課 題 ): 検 索 キーワードを 入 力 し 検 索 ボタンを 押 すと, 入 力 されたキーワードを 書 名 (タイトル) または 著 者 に 含 む 書 籍 の 一 覧 を 表 示 し,キーワードを 黄 色 でハイライトするWebページを 作 りましょう. 手 順 1: 課 題 3で 作 成 した input_keyword_book2.php をコピーして, 名 前 を input_keyword_book3.php に 変 えるする. 手 順 2: input_keyword_book3.php について 適 宜 プログラムを 変 更 する. 手 順 3: 課 題 3で 作 成 した search_book2.php をコピーして, 名 前 を search_book3.php する. 手 順 4: search_book3.php について 適 宜 プログラムを 変 更 する. 手 順 5:Webブラウザで 手 順 1で 作 成 したページにアクセスし 確 認 する. http://localhost/php04/input_keyword_book3.html 産 業 keyword search_book3.php input_keyword_book3.html
( 前 回 ) 提 出 課 題 課 題 4(オプション 課 題 )のヒント ハイライトするHTMLタグ <mark> ハイライトしたい 文 字 </mark> 列 経 済 <mark> 産 業 </mark> 省 PHPでの 文 字 列 の 置 換 対 象 文 字 列 の 中 から, 検 索 文 字 列 を 探 し, 当 該 部 分 を 指 定 した 置 換 後 文 字 列 に 置 き 換 える. str_replace( 検 索 文 字 列, 置 換 後 文 字 列, 対 象 文 字 列 ) $val = " 山 田 さんと 卓 球 をした. 山 田 さんは 卓 球 がうまい."; 山 田 さんと 卓 球 をした. 山 田 さんは 卓 球 がうまい. echo $val; 城 之 内 さんと 卓 球 をした. 城 之 内 さんは 卓 球 がうまい. echo str_replace (" 山 田 ", 城 之 " 内 ", $val );
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 書 籍 検 索 </title> </head> <body> <h2> 書 籍 検 索 </h2> 解 答 <form action="search_book3.php" method="get"> <p> 書 名 著 者 名 キーワード:<input type="text" name="keyword"> </p> <p> <input type="submit" 検 索 "> value=" </p> </form> </body> </html> input_keyword_book3.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 書 籍 一 覧 </title> </head> <body> <h2> 書 籍 一 覧 </h2> <?php $keyword = $_GET["keyword"]; フォームデータ"keyword" の 取 得 // echo 検 "<p> 索 キーワード: {$keyword}</p>"; try { データベース // 処 理 の 例 外 範 囲 始 まり 解 答 // データベースへの 接 続 $db = new PDO('mysql:host=localhost:63306;dbname=j01234_db;char $db->setattribute(pdo::attr_errmode, エラー PDO::ERRMODE_EXCEPTION); 時 に 例 外 発 生 させるように 設 定 // SQL 文 の 準 備 と 実 行 $sql = $db->prepare("select * FROM book WHERE title LIKE? OR a $sql->bindvalue(1,"%{$keyword}%"); $sql->bindvalue(2,"%{$keyword}%"); $sql->execute(); 次 につづく search_book3.php
echo "<table>"; echo "<tr bgcolor='#99ff99'><th>isbn</th><th> タイトル</th><th> 著 者 </th><th> 出 版 社 </th><th> 発 行 日 </th><th> 価 格 </th></tr>"; // レコードごとの 処 理 while( $row = $sql->fetch() ) { echo "<tr bgcolor='#eeeeee'>"; echo "<td>". $row['isbn']. "</td>"; echo "<td>" str_replace($keyword,"<mark>{$keyword}</mark>",$row['ti.. "</td>"; echo "<td>" str_replace($keyword,"<mark>{$keyword}</mark>",$row['au.. "</td>"; echo "<td>". $row['publisher']. "</td>"; echo "<td>". $row['pub_date']. "</td>"; echo "<td>". $row['price']. "</td>"; echo "</tr>"; } echo "</table>"; } catch( PDOException データベース $e 処 理 の ){ 例 外 キャッチ // exit(' データベース 処 理 失 敗 :'.$e->getmessage()); }?> </body> </html> 解 答 search_book3.php
PHPの 応 用 (1) 変 数 が 存 在 するか 調 べる(isset 関 数 ) isset ( 調 べたい 変 数 の 名 前 ) 指 定 した 変 数 が 存 在 している 場 合 はTRUE を 返 す. 指 定 した 変 数 が 存 在 していない 場 合 ( 存 在 していても NULL の 場 合 )はFALSE を 返 す. 連 想 配 列 にも 使 える(ある 連 想 配 列 の 指 定 したキーの 要 素 が 存 在 するかどうか). 主 に if 文 の 条 件 式 に 用 いる. 特 にフォームデータの 入 力 チェックに 使 われる. if( isset ( $hoge ) ){ // 変 数 $hoge が 存 在 しているときの 処 理 } if(!isset ( $hoge ) ){ // 変 数 $hoge が 存 在 していないときの 処 理 } if( isset ( $_GET[' hoge ']) && $_GET[' hoge ']!="" ){ // フォームデータhoge が 存 在 していて,かつ, 何 か 入 力 されているとき の 処 理 } 18
演 習 の 準 備 実 習 0: 本 日 の 演 習 用 作 業 フォルダを 作 成 しましょう. 手 順 1: 以 下 のフォルダの 中 に, 新 規 フォルダ php05 を 作 成 する. Z: xampp htdocs 以 下, 本 日 の 演 習 でのファイルはすべてこの php05 フォルダに 作 成 する こと.
PHPの 応 用 (2) 実 習 1: 書 籍 検 索 結 果 ページを 書 籍 一 覧 ページとしても 使 えるようにしま しょう.まずは 現 状 でエラーが 表 示 されることを 確 認 してみます. 手 順 1: 前 回 の 作 業 フォルダ( PHP04 )から 書 籍 検 索 結 果 を 表 示 する PHPプロ グラム( search_book2.php )を, 今 回 の 作 業 フォルダ( PHP05 )にコピーする ( 作 成 していない 場 合 はこの 資 料 の( 前 回 ) 課 題 3 解 答 を 参 照 し 作 成 ). 手 順 2:Webブラウザで 手 順 1で 作 成 したページに( 直 接 )アクセスする. http://localhost/php05/search_book2.php 手 順 3:エラーメッセージが 表 示 されていることを 確 認 する. search_book2. 直 接 アクセス フォームデータ 無 し エラーメッセージ ( 存 在 しないフォームデータkeyword を 参 照 した) フォームデータ 有 り 経 済 keyword input_search_book2.php
search_book2.p PHPの 応 用 (3) <?php 実 習 2: 書 籍 検 索 結 果 ページを 書 籍 一 覧 ページとしても 使 えるようにしま しょう(= 検 索 キーワードの フォームデータがない 場 合 は, 全 書 籍 の 一 覧 表 示 を 行 う). 手 順 1: 作 業 フォルダ( PHP05 )の 書 籍 検 索 結 果 を 表 示 する PHPプログラム ( search_book2.php )において, 以 下 の 部 分 を 変 更 する(???の 部 分 は 自 分 で 考 える). $keyword = $_GET["keyword"]; フォームデータ"keyword" の 取 得 // echo 検 "<p> 索 キーワード: {$keyword}</p>"; try { データベース // 処 理 の 例 外 範 囲 始 まり <?php // フォームデータkeyword が 存 在 し,かつ, 空 文 字 でないかチェック if(???($_get["???"])???$_get["keyword"]!="" ){ $keyword = $_GET["keyword"]; フォームデータ"keyword" の 取 得 // echo 検 "<p> 索 キーワード: {$keyword}</p>"; } else { $keyword = ""; } try { データベース // 処 理 の 例 外 範 囲 始 まり 手 順 2:Webブラウザで 手 順 1で 作 成 したページに( 直 接 )アクセスする. http://localhost/php05/search_book2.php 手 順 3:エラーメッセージが 表 示 されないことを 確 認 する. 直 接 アクセス フォームデータ 無 し
復 習 PHPからMySQLへのアクセス(1) データベース 管 理 システムへの 接 続 $db = PDO("mysql:host= new IPアドレスまたはホスト :ポート 名 番 号 ;dbname= 選 択 するデータベース 名 ;charset= 文 字 コード", "DBMS でのユーザ 名 ", パスワード"); " PHPでDBへアクセスするにはPDO(PHP Data ) Object クラスを 使 用 する( PDOはDBへのさ まざまな 処 理 をまとめたクラス. MySQL 以 外 にも 対 応 ). 以 降 変 数 $db(=pdo オブジェクト) を 通 してデータベースにアクセスできる. 例 外 PDOException クラスが 発 生 する 可 能 性 あり( 以 降 のPDOに 対 する 各 メソッドも). もちろん 変 数 $dbは 違 う 名 前 でもよい. <?php try { $db new = PDO('mysql:host= localhost:63306 ;dbname= j01234_db ;charset= utf8 ',' j01234 ',' hogehoge '); } catch (PDOException $e) { exit('データベース 接 続 失 敗 :'.$e->getmessage()); }?> 関 数 exit() はそれ 以 降 のスクリプトの 処 理 を 停 止 する 関 数 ( 引 数 は 表 示 メッセージ). 22
復 習 PHPからMySQLへのアクセス(2) SQLオブジェクトの 準 備 $sql = prepare $db-> ("SQL 文 "); SQLの 実 行 $sql-> execute (); 変 数 $dbはpdoオブジェクト 変 数 $sql は 違 う 名 前 でもよい 変 数 $sql はSQLオブジェクト <?php $sql = prepare $db-> ("SELECT * FROM "); book; $sql-> execute ();?> 23
復 習 PHPからMySQLへのアクセス(3) SQLの 実 行 結 果 からレコードを 取 得 $row = fetch $sql-> (); 変 数 $sql はSQLオブジェクト. fetch() メソッドを 呼 び 出 すたびに 実 行 結 果 から 1レコードずつ 取 得 (もうレコードが 無 い 場 合 はFALSE を 返 す). 変 数 $row に1 行 分 のレコードが 連 想 配 列 として 代 入 される(キーはフィールド 名 ). 変 数 $row は 違 う 名 前 でもよい. レコードからフィールド 値 の 取 得 $row[' フィールド 名 '] $row は fetch() メソッドの 戻 り 値 注 意 : 条 件 式 が 代 入 文 条 件 式 が 代 入 文 である 場 合 は, 先 に 代 入 文 が 実 行 され る(= 変 数 に 値 が 代 入 される). 条 件 式 のチェックはその 変 数 の 中 身 について 行 われる. この 例 の 場 合 はレコードが 取 得 できた 場 合 に 繰 り 返 す( メソッドfetch() がFALSE を 返 すまで). 24 他 のプログラミング 言 語 でもよく 使 われる. <?php while( $row = fetch $sql-> ()) { echo $row['name'] ; echo $row['address'] ; }?>
復 習 PHPからMySQLへのアクセス (+ユーザからの 入 力 )(1) SQLインジェクション <html> <form action=" search.php " methoc="get"> 検 索 する 書 籍 タイトル:<br> <input tyoe="text" title "> name="?> ユーザからの 入 力 データをSQL 文 の 条 件 値 として 利 用 した 場 合 に, 入 力 データによって 意 図 しない 不 正 な 実 行 が 行 われること. book_search.html http://www.hoge.jp/book_search.html <?php $val= $_GET[' title ']; $sql = $db->prepare(" SELECT * FROM book " $val. WHERE. "'"); title= $sql ->execute();?> search.php 検 索 する 書 籍 タイトル: データベース 入 門 SELECT * FROM book データベース WHERE 入 門 ' title=' http://www.hoge.jp/book_search.html 検 索 する 書 籍 タイトル: ';DELETE FROM book;# SELECT * FROM book ';DELETE WHERE title=' FROM bo
復 習 PHPからMySQLへのアクセス (+ユーザからの 入 力 )(2) SQLオブジェクトの 準 備 (プレースホルダ 付 き) $sql = prepare $db-> ("プレースホルダを 含 むSQL 文 "); インジェクション 対 として,ユーザの 策 入 力 データをSQL 文 の 値 として 使 用 する 場 合 にはプレースホルダを 使 う. プレースホルダとは 後 で( 以 下 のbindValue 実 行 時 ) 具 体 的 な 値 に 置 換 される 部 分.? で 記 述 する. SQL 文 の 中 でプレースホルダは 複 数 記 述 可 能. $dbはpdo オブジェクト.$sql は 他 の 名 前 でもよい. プレーホルダへの 値 の 設 定 (=バインド) $sql-> bindvalue (プレースホルダ 番 号, 設 定 したい 値 ); ブレースホルダ 番 号 はSQL 文 の 中 での どのプレースホルダか を 指 定 する 番 SQL 号 文 ( 内 での 記 述 順 に1,2,3.). <?php $val1 = $_GET[' title ']; $val2 = $_GET[' author ']; $sql = $db->prepare(" SELECT * FROM book?or WHERE author=?"); title= $sql-> bindvalue ( 1, $val1 ); // 1 番 目 のプレースホルダに$val1 $sql-> bindvalue ( 2, $val2 ); // 2 番 目 のプレースホルダに$val2 $$sql->execute(); 26 $sql = $db->prepare( );?> と 書 いてはいけない( SQLインジェクションの 危 険 性 ) "SELECT * FROM book WHERE title='". $val1. "' O
PHPからMySQLへのアクセス (レコードの 新 規 登 録 )(1) 実 習 3: 書 籍 の 情 報 を 入 力 し 登 録 ボタンを 押 すと, 入 力 されたデータで 書 籍 テーブルにレコードを 新 規 登 録 するWebページを 作 りましょう. 手 順 1:HTMLのファイル( 書 籍 情 報 の 入 力 Webページ)を input_regist_book.html という 名 前 で 作 業 フォルダに 作 成 する. 手 順 2:PHPプログラムのファイルを regist_book.php という 名 前 で 作 業 フォル ダに 作 成 する. 手 順 3:Webブラウザで 手 順 1で 作 成 したページにアクセスする. http://localhost/php05/input_regist_book.html 手 順 4: 以 下 の 書 籍 情 報 を 入 力 し, 登 録 ボタンを 押 す. ISBN: 4320123190 書 名 : Webシステムの 開 発 技 術 と 活 用 方 法 著 者 名 : 速 水 治 夫 他 出 版 社 : 共 立 出 版 発 行 日 :2013/3/9 価 格 : 2800 手 順 5: 登 録 処 理 ページから 書 籍 一 覧 へ のリンクへ 飛 び, 新 規 登 録 した 書 籍 情 報 が 一 覧 にあることを 確 認 する.
PHPからMySQLへのアクセス (レコードの 新 規 登 録 )(1) 実 習 3: 書 籍 の 情 報 を 入 力 し 登 録 ボタンを 押 すと, 入 力 されたデータで 書 籍 テーブルにレコードを 新 規 登 録 するWebページを 作 りましょう. 4320123190 ISBN Webシステムの 開 発 技 術 と 活 用 方 法 title 速 水 治 夫 他 出 版 社 author publisher input_regist_book.html 2800 2013/3/9 price pub_date regist_book.php search_book2.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 書 籍 登 録 </title> </head> <body> <h2> 書 籍 登 録 </h2> <form action="regist_book.php" method="get"> <p> ISBN :<input type="text" name="isbn"> <br> 書 名 :<input type="text" name="title"> <br> 著 者 名 :<input type="text" name="author"> <br> 出 版 社 :<input type="text" name="publisher"> <br> 発 行 日 :<input type="text" name="pub_date"> <br> 価 格 :<input type="text" name="price"> </p> <p> <input type="submit" 登 録 "> value=" </p> </form> </body> </html> input_regist_book.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> 書 籍 登 録 </title> </head> <body> <h2> 書 籍 登 録 </h2> <?php // フォームデータの 取 得 $ISBN = $_GET["ISBN"]; $title = $_GET["title"]; $author = $_GET["author"]; $publisher = $_GET["publisher"]; $pub_date = $_GET["pub_date"]; $price = $_GET["price"]; try { データベース // 処 理 の 例 外 範 囲 始 まり // データベースへの 接 続 $db = new PDO('mysql:host=localhost:63306;dbname=???;charset=utf8','???','???'); $db->setattribute(pdo::attr_errmode, エラー PDO::ERRMODE_EXCEPTION); 時 に 例 外 発 生 させるように 設 定 ( 次 ページにつづく) regist_book.php
// 文 SQL の 準 備 と 実 行 $sql = $db->prepare("??? INTO???(ISBN,???,author,publisher,pub_date,price)???(?,?,?,?,?,?)"); $sql->bindvalue(???,???); $sql->bindvalue(???,???); $sql->bindvalue(???,???); $sql->bindvalue(???,???); $sql->bindvalue(???,???); $sql->bindvalue(6, $price); $sql->execute(); } catch( PDOException データベース $e 処 理 の ){ 例 外 キャッチ // exit(' データベース 処 理 失 敗 :'.$e->getmessage()); } echo データベースに " 以 下 の 書 籍 情 報 を 登 録 しました "; echo "<p>"; echo "ISBN: {$ISBN}<br>"; echo 書 名 :" {$title}<br>"; echo 著 者 名 ": {$author}<br>"; echo 出 版 社 ": {$publisher}<br>"; echo 発 行 日 ": {$pub_date}<br>"; echo 価 格 :" {$price}"; echo "</p>"; echo "<a href='search_book2.php'> 書 籍 一 覧 ページへ</a>";?> </body> </html> regist_book.php
提 出 課 題 課 題 1( 提 出 課 題 ): 利 用 者 の 情 報 を 入 力 し 登 録 ボタンを 押 すと, 入 力 さ れたデータで 利 用 者 (user)テーブルにレコードを 新 規 登 録 するWebページ を 作 りましょう. 手 順 1:HTMLのファイル( 利 用 者 情 報 の 入 力 Webページ)を input_regist_user.html とい う 名 前 で 作 業 フォルダに 作 成 する. 手 順 2:DBに 登 録 処 理 を 行 うPHPプログラムのファイルを regist_user.php という 名 前 で 作 業 フォルダに 作 成 する. 手 順 3: 前 回 の 作 業 フォルダ( PHP04 )から 利 用 者 検 索 結 果 一 覧 を 表 示 する PHPプログ ラム( search_user.php )を, 今 回 の 作 業 フォルダ( PHP05 )にコピーする( 前 回 作 成 して いない 場 合 はこの 資 料 の 前 回 課 題 2 解 答 を 参 照 し 作 成 ). 手 順 4: 手 順 3のPHPプログラム( search_user.php )の 変 更 し,フォームデータ( keyword) が 無 い 場 合 でもエラーが 表 示 されないようにする. 手 順 5:Webブラウザで 手 順 1で 作 成 したページにアクセスする. http://localhost/php05/input_regist_user.html 手 順 6: 以 下 の 利 用 者 情 報 を 入 力 し, 登 録 ボタンを 押 す. 利 用 者 番 号 : U000021 氏 名 : ( 自 分 の 氏 名 ) 住 所 : ( 自 分 の 住 所 ) 電 話 番 号 : ( 自 分 の 電 話 番 号 ) 生 年 月 日 : ( 自 分 の 生 年 月 日 ) 登 録 年 月 日 : ( 作 業 時 の 年 月 日 ) 手 順 7: 登 録 処 理 ページから 利 用 者 一 覧 へ のリンクへ 飛 び, 新 規 登 録 した 利 用 者 情 報 が 一 覧 にあることを 確 認 する.
提 出 課 題 課 題 1( 提 出 課 題 ) : 利 用 者 の 情 報 を 入 力 し 登 録 ボタンを 押 すと, 入 力 されたデータで 利 用 者 (user)テーブルにレコードを 新 規 登 録 するWebペー ジを 作 りましょう. U000021 user_id 情 報 太 郎 name 千 葉 県 千 葉 市 若 葉 区 御 成 台 4-1 043-236-XXXX address tel input_regist_user.html 1988/4/1 2015/7/19 birth reg_date regist_user.php search_user.php
提 出 課 題 課 題 2( 提 出 課 題 ): 書 籍 の 情 報 を 入 力 し 登 録 ボタンを 押 すと, 入 力 され たデータで 書 籍 テーブルにレコードを 新 規 登 録 するWebページを 作 りましょ う.ただし, 入 力 されていないデータがあった 場 合 はDBに 登 録 せずに, 警 告 のメッセージを 表 示 します. データ 形 式 のチェックは 行 いません ( 例 : 価 格 に あああ を 入 力 など) 手 順 1: 実 習 3で 作 成 した 書 籍 情 報 入 の力 Webページ ( input_regist_book.html )をコピーし,ファイル input_regist_book2.html 名 を に 変 更 する. 手 順 2: 手 順 1のHTMLファイル( input_regist_book2.html )を 変 更 する (regist_book2.phpに 飛 ぶように). 手 順 3: 実 習 3で 作 成 した 登 録 処 理 PHPプログラム( regist_book.php )をコ の ピーし,ファイル 名 regist_book2.php に を 変 更 する. 手 順 4: 手 順 3のPHPプログラムを 変 更 する( 各 項 目 のデータが 入 力 されていな い 場 合 はそれぞれ 警 告 メッセージを 表 示 する.その 場 合 DBへの は 登 録 はしな い) 手 順 5:Webブラウザで 手 順 2で 作 成 したページにアクセスする. http://localhost/php05/input_regist_book2.html 手 順 6: 書 籍 情 報 の 入 力 で,( 適 当 に) 入 力 しない 項 目 がある 状 態 で 登 録 ボタ ンを 押 し, 警 告 メッセージが 表 示 されることを 確 認 する.
提 出 課 題 課 題 2( 提 出 課 題 ): 書 籍 の 情 報 を 入 力 し 登 録 ボタンを 押 すと, 入 力 され たデータで 書 籍 テーブルにレコードを 新 規 登 録 するWebページを 作 りましょ う.ただし, 入 力 されていないデータがあった 場 DBに 合 は登 録 せずに, 警 告 のメッセージを 表 示 します. データ 形 式 のチェックは 行 いません ( 例 : 価 格 に あああ を 入 力 など) input_regist_book2.php regist_book2.php