4-5 PHP 演習問題 演習 1 フォルダ \data\dbserver\php のPHPスクリプト randamu.php を使い, データベース testdb のテーブル table1 を取り込み, ランダムにデータを表示させるWebサーバを構築し, クライアント( Windows 側 ) のブラウザURL epc**.cen.hic.ac.jp/randamu.php を入力し, 確認する ( 図 1) 図 1 データのランダム表示 演習 1 解答 /home/wwwadmin/www/ 内に randamu.php を作成する <html> <head> <title> 会員一覧をランダムに一件表示する </title> </head> <body> <h3> 会員一覧をランダムに一件表示する </h3> <?php // データベースに接続 $conn=pg_connect("","","","","testdb"); if (!$conn) { echo " 接続エラーが発生しました\ n"; exit; // データ数を取得 $sql = "SELECT COUNT(*) AS cnt FROM table1;"; $row = pg_fetch_array($res, 0, PGSQL_ASSOC); $dtcnt = $row["cnt"] - 1; 1 if ($dtcnt < 0) { 2 die(" データが存在しません "); -1-
// データを取り出す // 取り出すデータの位置をランダムに生成 mt_srand((double)microtime()*100000); $st = mt_rand(0, $dtcnt); 3 4 // 取り出すデータ数 1 $lim = 1; // データを取り出す $sql = "SELECT id, nam, pre, ag FROM table1 LIMIT $lim OFFSET $st"; 5 // 取り出したデータを表示 echo "<table border= \"20\">"; echo "<td> 会員番号 </td>"; echo "<td> 氏名 </td>"; echo "<td> 住所 </td>"; echo "<td> 年令 </td>"; for ($i = 0; $i < pg_numrows($res); $i++) { $row = pg_fetch_array($res, $i, PGSQL_ASSOC); 6 7 echo "<td>"; echo pg_result($res,$i,"id"); echo "<td>"; echo pg_result($res,$i,"nam"); echo "<td>"; echo pg_result($res,$i,"pre"); echo "<td>"; echo pg_result($res,$i,"ag"); echo "</table>"; // 接続を解除 pg_close($conn);?> </body> </html> 各 PHPスクリプトの意味は, 次のとおりである 1 レコード数から1 引いて $dtcnt に格納する 2 $dtcntが0より小さければ ( データが存在しません ) と表示する 3 mt_srandでランダムの精度を決定する microtime() は秒数のマイクロ秒以下で, これを100000 倍したもので乱数のもととなる (double) は実行するコンピュータの倍精度実数の範囲内でのみ値を処理するもの 4 データ数分をランダムに決定し,$stに格納する 5 データの表示位置は $st より始まり $lim のに格納されている数字の分だけ取得す -2-
る 6 $i=0 から, データベースのレコード数分繰り返す 7 $i 行目を配列として取得する 演習 2 フォルダ \data\dbserver\php のPHPスクリプト kousin.php を使い, データベース testdb のテーブル table1 を取り込み, 指定したデータの内容を変更するWebサーバを構築し, クライアント (Windows 側 ) のブラウザURL epc**.cen.hic.ac.jp/kousin.php を入力し, 確認する ( 図 2) ただし, 氏名, 住所, 年令のどこか1カ所以上変更し変更ボタンを押すとデータベースの内容を変更するようにする 図 2 データの変更 演習 2 解答 /home/wwwadmin/www/ 内に kousin.php を作成する <html> <head> <title> データを変更する </title> </head> <body> <h3> データを変更する </h3> <?php // データベースに接続 $conn=pg_connect("","","","","testdb"); if (!$conn) { echo " 接続エラーが発生しました\ n"; exit; -3-
// 変換するデータを取得 if (count($_post) > 0) { $id = $_POST["id"]; $nam = $_POST["nam"]; $pre = $_POST["pre"]; $ag = $_POST["ag"]; // データが送信されたときはデータを変更 if (strlen($id) and strlen($nam) and strlen($pre) and strlen($ag)) { // データを変更 $sql = "UPDATE table1 SET nam = '".$nam."', pre = '".$pre."', ag = ".$ag." WHERE (id = ".$id.");"; 1 2 3 $res = pg_query($conn, $sql) or die(" データ変更エラー "); // データを取り出す $sql = "SELECT id, nam, pre, ag FROM table1 ORDER BY id"; 4 // 取り出したデータを表示 echo "<table border= \"20\">"; echo "<td> </td>"; echo "<td> 会員番号 </td>"; echo "<td> 氏名 </td>"; echo "<td> 住所 </td>"; echo "<td> 年令 </td>"; for ($i = 0; $i < pg_numrows($res); $i++) { $row = pg_fetch_array($res, $i, PGSQL_ASSOC); echo "<form method= \"POST\" action= \"".$_SERVER["PHP_SELF"]."\">"; 5 echo "<td><input type= \"submit\" value= \" 変更 \" name= \"sub1\"></td>"; echo "<input type= \"hidden\" value= \"".$row["id"]."\" name= \"id\">"; echo "<td>".$row["id"]."</td>"; echo "<td><input type= \"text\" name= \"nam\" value= \"".$row["nam"]."\"></td>"; echo "<td><input type= \"text\" name= \"pre\" value= \"".$row["pre"]."\"></td>"; echo "<td><input type= \"text\" name= \"ag\" -4-
value= \"".$row["ag"]."\"></td>"; echo "</form>"; echo "</table>"; // 接続を解除 pg_close($conn);?> </body> </html> 各 PHPスクリプトの意味は, 次のとおりである 1 table1 をアップデートする 2 $nam をnam に追加する 3 id 番号については変更しない 4 実行 5 変更したときの文字をフォームに表示する 演習 3 フォルダ \data\dbserver\php のPHPスクリプト taikai.php を使い, データベース testdb のテーブル table1 を取り込み, 指定したデータを削除するWebサーバを構築し, クライアント (Windows 側 ) のブラウザURL epc**.cen.hic.ac.jp/taikai.php を入力し, 確認する ( 図 3) 図 3 データの削除 -5-
演習 3 解答 /home/wwwadmin/www/ 内に taikai.php を作成する <html> <head> <title> 退会データを削除する </title> </head> <body> <h3> 退会データを削除する </h3> <?php // データベースに接続 $conn=pg_connect("","","","","testdb"); if (!$conn) { echo " 接続エラーが発生しました\ n"; exit; // 削除するデータを取得 if (count($_post) > 0) { $id = $_POST["id"]; // データが送信されたときはデータを削除 if (strlen($_post["id"]) > 0) { // データを削除 $sql = "DELETE FROM table1 WHERE (id = ".$id.");"; pg_query($conn, $sql) or die(" データ削除エラー "); 1 2 // データを取り出す $sql = "SELECT id, nam, pre, ag FROM table1 ORDER BY id"; 3 // 取り出したデータを表示 echo "<table border= \"20\">"; echo "<td> </td>"; echo "<td> 会員番号 </td>"; echo "<td> 氏名 </td>"; echo "<td> 住所 </td>"; echo "<td> 年令 </td>"; for ($i = 0; $i < pg_numrows($res); $i++) { $row = pg_fetch_array($res, $i, PGSQL_ASSOC); echo "<form method= \"POST\" action= \"".$_SERVER["PHP_SELF"]."\">"; echo "<td><input type= \"submit\" value= \" 削除 \" name= \"sub1\"></td>"; echo "<input type= \"hidden\" value= \"".$row["id"]."\" name= \"id\">"; echo "<td>".$row["id"]."</td>"; echo "<td>".$row["nam"]."</td>"; echo "<td>".$row["pre"]."</td>"; echo "<td>".$row["ag"]."</td>"; -6-
echo "</form>"; echo "</table>"; // 接続を解除 pg_close($conn);?> </body> </html> 各 HTMLの意味は, 次のとおりである 1 $_POST["id"] に文字が一つ以上あれば2へ進む 2 id 番号のtable1データを削除する 3 SELECT でid 番号順にデータを並べ,$sql に格納する -7-