システムデザイン
(→データベースシステム概要) |
(→サーバ変数 $_SERVER) |
||
| (1人の利用者による、間の62版が非表示) | |||
| 7行: | 7行: | ||
*サイボウズ[http://cb6.media.t-kougei.ac.jp/cgi-bin/ag.cgi?page=BulletinView&bid=25502&gid=0&cid=1164&cp=bw& (システムデザイン) ] / [http://www.media.t-kougei.ac.jp/~kuha/tutorial0/ チュートリアルwww.media版] | *サイボウズ[http://cb6.media.t-kougei.ac.jp/cgi-bin/ag.cgi?page=BulletinView&bid=25502&gid=0&cid=1164&cp=bw& (システムデザイン) ] / [http://www.media.t-kougei.ac.jp/~kuha/tutorial0/ チュートリアルwww.media版] | ||
*HTMLの知識を持っていることを前提とします。 | *HTMLの知識を持っていることを前提とします。 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Schedule == | == Schedule == | ||
| 21行: | 13行: | ||
# 4/16(火) '''久原''' データベースシステム概要 | # 4/16(火) '''久原''' データベースシステム概要 | ||
# 4/23(火) '''久原''' PHPサーバーサイドプログラミング | # 4/23(火) '''久原''' PHPサーバーサイドプログラミング | ||
| − | # 4/30(火) '''久原''' | + | # 4/30(火) '''久原''' [http://www.kuhalabo.net/kxoops/modules/pico/index.php?content_id=29 課題制作日] |
# 5/7(火) '''久原''' PHPのスクリプト, PHPサーバーサイドプログラミング | # 5/7(火) '''久原''' PHPのスクリプト, PHPサーバーサイドプログラミング | ||
# 5/14(火) '''久原''' phpMyAdminによるデータベースの作成,SQLコマンド | # 5/14(火) '''久原''' phpMyAdminによるデータベースの作成,SQLコマンド | ||
# 5/21(火) '''久原''' MySQLのINSERT, SELECT | # 5/21(火) '''久原''' MySQLのINSERT, SELECT | ||
# 5/28(火) '''久原''' MySQLのLIMIT, WHERE, LIKE, DELETE, サーバ変数など、カスタマイズ。 | # 5/28(火) '''久原''' MySQLのLIMIT, WHERE, LIKE, DELETE, サーバ変数など、カスタマイズ。 | ||
| − | # 6/4(火) ''' | + | # 6/4(火) '''久原''' 課題について |
# 6/11(火) '''永江''' | # 6/11(火) '''永江''' | ||
# 6/18(火) '''永江''' | # 6/18(火) '''永江''' | ||
| 33行: | 25行: | ||
# 7/9(火) '''永江''' | # 7/9(火) '''永江''' | ||
# 7/16(火) '''永江''' | # 7/16(火) '''永江''' | ||
| − | # 7/23(火) | + | # 7/23(火) '''永江''' |
| 141行: | 133行: | ||
== データベースシステム概要 == | == データベースシステム概要 == | ||
* [http://blossom.media.t-kougei.ac.jp/~kuha/easybbs/easy_bbs4klb2.php 簡単BBS]によく使うブラウザを書いてみよう。 | * [http://blossom.media.t-kougei.ac.jp/~kuha/easybbs/easy_bbs4klb2.php 簡単BBS]によく使うブラウザを書いてみよう。 | ||
| − | |||
| − | |||
* WWWサーバとクライアント | * WWWサーバとクライアント | ||
| − | ** [http://news.netcraft.com/archives/web_server_survey.html サーバのシェア調査](Webなど),[http://www.w3counter.com/trends | + | ** [http://news.netcraft.com/archives/web_server_survey.html サーバのシェア調査](Webなど),[http://www.w3counter.com/trends クライアントのシェア調査](OS,ブラウザなど) |
* CGIによるサーバサイドスクリプト例(電子掲示板):[http://www.media.t-kougei.ac.jp/kanon/cgi-bin/bbs10/bbs10.cgi renKanon board]<br> | * CGIによるサーバサイドスクリプト例(電子掲示板):[http://www.media.t-kougei.ac.jp/kanon/cgi-bin/bbs10/bbs10.cgi renKanon board]<br> | ||
* PHPによるサーバサイドスクリプト例(アクセス解析):[http://www.media.t-kougei.ac.jp/~kuha/etud/tradselect/analy.php MIDI作品アクセス解析]<br> | * PHPによるサーバサイドスクリプト例(アクセス解析):[http://www.media.t-kougei.ac.jp/~kuha/etud/tradselect/analy.php MIDI作品アクセス解析]<br> | ||
| 152行: | 142行: | ||
;インターネット上のデータベースを使ったアート | ;インターネット上のデータベースを使ったアート | ||
:データベース上の情報にアクセスしてFlashやWebスクリプトでヴィジュアライズした作品が多い。 | :データベース上の情報にアクセスしてFlashやWebスクリプトでヴィジュアライズした作品が多い。 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
*[http://www.pachube.jp/ Pachube] | *[http://www.pachube.jp/ Pachube] | ||
| + | |||
| + | ;クラウドソーシング | ||
| + | *不特定多数の人からなる素材で構成される作品。ネット時代の可能性を秘めた表現 | ||
| + | *[http://www.nhk.or.jp/bijutsu/techne/id_content.html#fragment-10 テクネ 映像の教室「クラウドソーシング」] | ||
| + | *[http://www.youtube.com/playlist?list=PLNIsEwnmyFPx8JZXWD5WQkzkmDBEjhtrG テクネ 3-3 クラウドソーシング] | ||
| + | |||
| + | ;ビッグデータ | ||
| + | *[http://itpro.nikkeibp.co.jp/article/COLUMN/20111226/377417/ ビッグデータ革命-人を超えた判断力・知性が身近に] | ||
== サーバーサイドプログラミング実習Apache/Linux == | == サーバーサイドプログラミング実習Apache/Linux == | ||
* 実習のための準備 | * 実習のための準備 | ||
| − | ** [http:// | + | ** [http://www.kuhalabo.net/kxoops/modules/pico/index.php?content_id=27 サーバ情報] |
** WinSCPでサーバとローカルPCとの間でファイル転送する。 | ** WinSCPでサーバとローカルPCとの間でファイル転送する。 | ||
*** [http://winscp.net/eng/index.php WinSCPのサイト]:自分のHDDにインストール | *** [http://winscp.net/eng/index.php WinSCPのサイト]:自分のHDDにインストール | ||
| 266行: | 259行: | ||
'''<?php''' と '''?>''' で囲まれた部分がPHPのスクリプト | '''<?php''' と '''?>''' で囲まれた部分がPHPのスクリプト | ||
<pre> | <pre> | ||
| − | http://blossom.media.t-kougei.ac.jp/~ | + | http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/phpinfo.php |
</pre> | </pre> | ||
URLは上記のとおり。 | URLは上記のとおり。 | ||
| 305行: | 298行: | ||
<pre> | <pre> | ||
<html> | <html> | ||
| − | <head><title>PHP test page</title | + | <head> |
| + | <title>PHP test page</title> | ||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| + | </head> | ||
<body> | <body> | ||
<h2>PHPのテストページ:現在時刻,ファイルの最終更新日時,アクセスカウンタの表示</h2> | <h2>PHPのテストページ:現在時刻,ファイルの最終更新日時,アクセスカウンタの表示</h2> | ||
| 415行: | 410行: | ||
# phpMyAdminにログイン | # phpMyAdminにログイン | ||
| − | #* [http:// | + | #* [http://www.kuhalabo.net/kxoops/modules/pico/index.php?content_id=28 ログイン情報] |
# 左のカラムにある自分の学籍番号に基づいて作られたデータベースを選択 | # 左のカラムにある自分の学籍番号に基づいて作られたデータベースを選択 | ||
# 新しいテーブルを作成 | # 新しいテーブルを作成 | ||
| 435行: | 430行: | ||
*データベースにテーブルdata01が作成されていることを確認する。 | *データベースにテーブルdata01が作成されていることを確認する。 | ||
[[画像:Phpmyadmindata01.jpg]] | [[画像:Phpmyadmindata01.jpg]] | ||
| + | |||
| + | === 文字化け対処方法 === | ||
| + | phpmyadminで、テーブルの照合順序を'''utf8_general_ci'''にする。 | ||
| + | # phpmyadminにログインする。 | ||
| + | # '''data01'''などのテーブルを選択する。 | ||
| + | # 「構造」タブを選択する。 | ||
| + | # 「照合順序」をが「'''latin1_swedish_ci'''」になっているカラムを「'''utf8_general_ci'''」に変更する。 | ||
| + | #* 鉛筆マークの「変更」ボタンをクリックすると変更できます。 | ||
| + | |||
=== アンケートをとるページ === | === アンケートをとるページ === | ||
| − | |||
==== update_table01.html ==== | ==== update_table01.html ==== | ||
| 447行: | 450行: | ||
**'''sysd'''というフォルダに保存した場合は,http://blossom.media.t-kougei.ac.jp/~user10_000/sysd/update_table01.html | **'''sysd'''というフォルダに保存した場合は,http://blossom.media.t-kougei.ac.jp/~user10_000/sysd/update_table01.html | ||
*'''データ追加エラー'''や'''Table unLock Error'''が出るときは、phpMyAdminで作成したテーブル名、フィールド名が正しいか確認するしてください。 | *'''データ追加エラー'''や'''Table unLock Error'''が出るときは、phpMyAdminで作成したテーブル名、フィールド名が正しいか確認するしてください。 | ||
| + | |||
| + | http://blossom.media.t-kougei.ac.jp/~kuha/sysd/update_table01.html | ||
| + | |||
<pre> | <pre> | ||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| 464行: | 470行: | ||
<option value="17">17</option> | <option value="17">17</option> | ||
<option value="18">18</option> | <option value="18">18</option> | ||
| − | <option value="19" selected | + | <option value="19" selected>19</option> |
<option value="20">20</option> | <option value="20">20</option> | ||
<option value="21">21</option> | <option value="21">21</option> | ||
| 571行: | 577行: | ||
echo "<p>アンケートご協力ありがとうございました。</p>"; | echo "<p>アンケートご協力ありがとうございました。</p>"; | ||
?> | ?> | ||
| + | </body> | ||
| + | </html> | ||
| + | </pre> | ||
| + | |||
| + | 次のように書いても同じ。 | ||
| + | $sqlの組み方に注意。 | ||
| + | |||
| + | http://blossom.media.t-kougei.ac.jp/~kuha/sysd/update_table02.html | ||
| + | |||
| + | <pre> | ||
| + | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| + | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> | ||
| + | <head> | ||
| + | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| + | <title>update table01</title> | ||
| + | <link href="./style00.css" rel="stylesheet" type="text/css" /> | ||
| + | </head> | ||
| + | <body> | ||
| + | |||
| + | <?php | ||
| + | $namae = $_POST["namae"]; | ||
| + | $age = $_POST["age"]; | ||
| + | $gender = $_POST["gender"]; | ||
| + | $prog = $_POST["prog"]; | ||
| + | $comment = $_POST["comment"]; | ||
| + | |||
| + | $namae = htmlspecialchars($namae); | ||
| + | if (!get_magic_quotes_gpc()){ | ||
| + | $namae = addslashes($namae); | ||
| + | } | ||
| + | $comment = htmlspecialchars($comment); | ||
| + | if (!get_magic_quotes_gpc()){ | ||
| + | $comment = addslashes($comment); | ||
| + | } | ||
| + | |||
| + | $time00 = date("Y/m/d H:i:s"); //現在時刻の取得 | ||
| + | |||
| + | ?> | ||
| + | <p>名前 : <?php echo $namae ?><br> | ||
| + | <p>年齢 : <?php $age ?><br> | ||
| + | 性別 : <?php $gender ?><br> | ||
| + | プログラミング : <?php $prog ?><br> | ||
| + | コメント : <?php $comment ?><br></p> | ||
| + | |||
| + | <?php | ||
| + | // DBに接続 | ||
| + | if( $con=mysql_connect("localhost","ユーザ名","パスワード") ){ //ユーザ名とパスワードは各自で設定 | ||
| + | echo "DB接続完了<br>"; | ||
| + | } | ||
| + | else{ | ||
| + | echo "接続エラー"; | ||
| + | exit; | ||
| + | } | ||
| + | // DBを選択 | ||
| + | if( mysql_select_db("データベース名",$con) ){ | ||
| + | echo "DB選択完了<br>"; | ||
| + | } | ||
| + | else{ | ||
| + | echo "データベース選択エラー<br>"; | ||
| + | exit; | ||
| + | } | ||
| + | // フォームで送られてきたデータでINSERT文を作成 | ||
| + | $sql = "INSERT INTO data01(date_time, namae, age, gender, prog, comment) "; | ||
| + | $sql .= " VALUES('$time00', '$namae', '$age', '$gender', '$prog', '$comment');"; | ||
| + | echo $sql; // コメントアウトをはずすと、実行されたSQLが表示される。 | ||
| + | // テーブルロック | ||
| + | $sql4lock = "LOCK TABLES data01 WRITE;"; | ||
| + | $res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data01]</p>"); | ||
| + | //テーブルロックが成功したら$sqlを実行する | ||
| + | if($res4lock) | ||
| + | { | ||
| + | $res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>"); | ||
| + | } | ||
| + | // テーブルアンロック | ||
| + | $sql4unlock = "UNLOCK TABLES;"; | ||
| + | $res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data01]</p>"); | ||
| + | // DBから切断 | ||
| + | mysql_close($con); | ||
| + | ?> | ||
| + | <p>送信完了</p> | ||
| + | <p>アンケートご協力ありがとうございました。</p> | ||
</body> | </body> | ||
</html> | </html> | ||
| 620行: | 707行: | ||
=== アンケートを見るページ === | === アンケートを見るページ === | ||
| − | + | サンプルURL | |
| + | http://blossom.media.t-kougei.ac.jp/~kuha/sysd/show_table01.php | ||
==== ファイル名 show_table01.php ==== | ==== ファイル名 show_table01.php ==== | ||
*文字コードは'''utf-8'''で保存する。 | *文字コードは'''utf-8'''で保存する。 | ||
* データベースからデータを読み取り,表示する。 | * データベースからデータを読み取り,表示する。 | ||
| − | **'''sysd'''というフォルダに保存した場合は,http://blossom.media.t-kougei.ac.jp/~ | + | **'''sysd'''というフォルダに保存した場合は,http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/show_table01.php でアクセスできるはず。 |
<pre> | <pre> | ||
| 651行: | 739行: | ||
// SELECT文を設定 | // SELECT文を設定 | ||
$sql = "SELECT * FROM data01 ORDER BY date_time DESC"; | $sql = "SELECT * FROM data01 ORDER BY date_time DESC"; | ||
| − | |||
// SELECT文実行 | // SELECT文実行 | ||
if(!$res=mysql_query($sql)){ | if(!$res=mysql_query($sql)){ | ||
| − | |||
echo "SQL失敗<BR>"; | echo "SQL失敗<BR>"; | ||
exit; | exit; | ||
} | } | ||
| − | + | ?> | |
| − | + | 検索結果表示 | |
| − | + | <table border=1> | |
| − | + | <tr><td>id</td><td>date_time</td><td>name</td><td>age</td><td>gender</td> | |
| − | + | <td>programing</td> | |
| − | + | <td>comment</td> | |
| − | + | </tr> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | <?php while( $row=mysql_fetch_array($res) ){ ?> | ||
| + | <tr> | ||
| + | <td><?php echo $row["id"] ?> </td> | ||
| + | <td><?php echo $row["date_time"] ?></td> | ||
| + | <td><?php echo $row["namae"] ?></td> | ||
| + | <td><?php echo $row["age"] ?></td> | ||
| + | <td><?php echo $row["gender"] ?></td> | ||
| + | <td><?php echo $row["prog"] ?></td> | ||
| + | <td><?php echo nl2br($row["comment"]) ?></td> | ||
| + | </tr> | ||
| + | <?php } ?> | ||
| + | |||
| + | </table> | ||
| + | |||
| + | <?php | ||
// 結果セットの解放 | // 結果セットの解放 | ||
mysql_free_result($res); | mysql_free_result($res); | ||
| 700行: | 790行: | ||
</pre> | </pre> | ||
'''while($row=mysql_fetch_array($res))'''は'''$res'''内に読み取るレコードがなくなるまでループを繰り返す。 | '''while($row=mysql_fetch_array($res))'''は'''$res'''内に読み取るレコードがなくなるまでループを繰り返す。 | ||
| + | |||
| + | * '''nl2br(文字列)''' | ||
| + | ** 文字列内の改行コード文字の前に HTML の改行タグを挿入する。 | ||
| + | ** 改行コードとは、もともとタイプライターの「CR」(Carriage Return : 行頭復帰)と「LF」(Line Feed : 行送り)の2つのコードに由来しており、WindowsではCR+LF(\r\n)、Mac OSではCR(\r)、UNIXではLF(\n)が使われている。 | ||
==== SQL解説 ==== | ==== SQL解説 ==== | ||
| 719行: | 813行: | ||
== 作成例2 簡単BBS == | == 作成例2 簡単BBS == | ||
=== 書き込みと表示の一体型ページ === | === 書き込みと表示の一体型ページ === | ||
| − | |||
* テーブル名:'''data02''' フィールド数:'''4''' | * テーブル名:'''data02''' フィールド数:'''4''' | ||
<table border="1" class="wiki"> | <table border="1" class="wiki"> | ||
| 733行: | 826行: | ||
* 役割 データ入力フォーム,データベースへの書込み,データの表示 | * 役割 データ入力フォーム,データベースへの書込み,データの表示 | ||
* 上記のアンケートの例を1つのページにまとまたもの。 | * 上記のアンケートの例を1つのページにまとまたもの。 | ||
| − | * '''$_SERVER[' | + | * '''$_SERVER['SCRIPT_NAME']'''は,'''サーバ変数'''の1つで、自分のファイル名を取得する。 この場合は、'''easy_bbs01.php'''になる。 |
* '''if'''文の条件判定の括弧内にある'''and'''は[http://php.benscom.com/manual/ja/language.operators.logical.php 論理演算子]の論理積。'''および'''を意味する。'''&&'''とも書く。 | * '''if'''文の条件判定の括弧内にある'''and'''は[http://php.benscom.com/manual/ja/language.operators.logical.php 論理演算子]の論理積。'''および'''を意味する。'''&&'''とも書く。 | ||
| + | |||
| + | |||
| + | サンプルURL: http://blossom.media.t-kougei.ac.jp/~kuha/sysd/easy_bbs01.php | ||
<pre> | <pre> | ||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| 767行: | 863行: | ||
$comment = addslashes($comment); | $comment = addslashes($comment); | ||
} | } | ||
| + | // 現在日付、時刻の取得 | ||
| + | $time00 = date("Y/m/d H:i:s"); | ||
| + | |||
// POSTデータが存在するときINSERT文を作成、DB更新 | // POSTデータが存在するときINSERT文を作成、DB更新 | ||
if(!empty($namae) and !empty($comment)) | if(!empty($namae) and !empty($comment)) | ||
{ | { | ||
| − | + | $sql = " INSERT INTO data02( date_time, namae, comment) VALUES( '$time00','$namae','$comment');"; | |
| − | + | echo $sql; | |
| − | + | ||
| − | + | ||
// テーブルロック | // テーブルロック | ||
| − | + | $sql4lock = "LOCK TABLES data02 WRITE;"; | |
| − | $ | + | if( mysql_query($sql4lock, $con) ){ |
| − | + | $res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>"); //INSERT文 実行 | |
| − | + | } | |
| − | + | else{ | |
| − | + | echo "<p>Table Lock Error[Insert data02]</p>"; | |
| + | } | ||
// テーブルアンロック | // テーブルアンロック | ||
| − | + | $sql4unlock = "UNLOCK TABLES;"; | |
| − | + | $res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>"); | |
} | } | ||
//データ入力フォーム | //データ入力フォーム | ||
| 806行: | 904行: | ||
exit; | exit; | ||
} | } | ||
| − | / | + | ?> |
| − | + | ||
| − | + | <h2>検索結果表示</h2> | |
| − | + | ||
| − | + | <table> | |
| − | + | <?php while($row=mysql_fetch_array($res)){ ?> | |
| − | + | <tr><td><hr></td></tr> | |
| − | + | <tr><td><?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?></td></tr> | |
| − | + | <tr><td><?php echo nl2br($row['comment']) ?></td></tr> | |
| + | </tr> | ||
| + | <?php } ?> | ||
| + | </table> | ||
| + | <?php | ||
// 結果セットの解放 | // 結果セットの解放 | ||
mysql_free_result($res); | mysql_free_result($res); | ||
| 882行: | 984行: | ||
プログラミングスキル値が | プログラミングスキル値が | ||
<select name="prog_st"> | <select name="prog_st"> | ||
| − | <option value="1" <?php if($prog_st == 1) echo "selected | + | <option value="1" <?php if($prog_st == 1) echo "selected" ?>>1</option> |
| − | <option value="2" <?php if($prog_st == 2) echo "selected | + | <option value="2" <?php if($prog_st == 2) echo "selected" ?>>2</option> |
| − | <option value="3" <?php if($prog_st == 3) echo "selected | + | <option value="3" <?php if($prog_st == 3) echo "selected" ?>>3</option> |
| − | <option value="4" <?php if($prog_st == 4) echo "selected | + | <option value="4" <?php if($prog_st == 4) echo "selected" ?>>4</option> |
| − | <option value="5" <?php if($prog_st == 5) echo "selected | + | <option value="5" <?php if($prog_st == 5) echo "selected" ?>>5</option> |
</select> | </select> | ||
以上のレコードを表示 | 以上のレコードを表示 | ||
| 894行: | 996行: | ||
登録日時降順 | 登録日時降順 | ||
</p> | </p> | ||
| + | 検索結果表示 | ||
| + | <table border=1> | ||
| + | <tr><td>通し番</td><td>回答日時</td><td>名前</td><td>年齢</td><td>性別</td> | ||
| + | <td>スキル</td><td>コメント</td> | ||
| + | </tr> | ||
| + | <?php while( $row=mysql_fetch_array($res) ){ ?> | ||
| + | <tr> | ||
| + | <td><?php echo $row["id"] ?> </td> | ||
| + | <td><?php echo $row["date_time"] ?></td> | ||
| + | <td><?php echo $row["namae"] ?></td> | ||
| + | <td><?php echo $row["age"] ?></td> | ||
| + | <td><?php echo $row["gender"] ?></td> | ||
| + | <td><?php echo $row["prog"] ?></td> | ||
| + | <td><?php echo nl2br($row["comment"]) ?></td> | ||
| + | </tr> | ||
| + | <?php } ?> | ||
| + | </table> | ||
<?php | <?php | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
// 結果セットの解放 | // 結果セットの解放 | ||
mysql_free_result($res); | mysql_free_result($res); | ||
| 973行: | 1,074行: | ||
$kword = addslashes($kword); | $kword = addslashes($kword); | ||
} | } | ||
| + | $time00 = date("Y/m/d H:i:s"); | ||
| + | |||
// POSTデータが存在するときINSERT文を作成、DB更新 | // POSTデータが存在するときINSERT文を作成、DB更新 | ||
if(!empty($namae) and !empty($comment)) | if(!empty($namae) and !empty($comment)) | ||
{ | { | ||
| − | + | $date00 = date("Y/m/d H:i:s"); | |
| − | + | $sql = "INSERT INTO data02(date_time, namae, comment) VALUES('$time00','$namae','$comment');"; | |
| − | + | // echo $sql; | |
| − | // | + | |
// テーブルロック | // テーブルロック | ||
| − | + | $sql4lock = "LOCK TABLES data02 WRITE;"; | |
| − | + | $res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data02]</p>"); | |
| − | + | if($res4lock) | |
| − | + | { | |
| − | + | $res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>"); | |
| − | + | } | |
// テーブルアンロック | // テーブルアンロック | ||
| − | + | $sql4unlock = "UNLOCK TABLES;"; | |
| − | + | $res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>"); | |
} | } | ||
//データ入力フォーム | //データ入力フォーム | ||
| 1,017行: | 1,119行: | ||
exit; | exit; | ||
} | } | ||
| − | / | + | ?> |
| − | + | ||
| − | + | <h2>検索結果表示</h2> | |
| − | + | ||
| − | + | <table> | |
| − | + | <?php while($row=mysql_fetch_array($res)){ ?> | |
| − | + | <tr><td><hr></td></tr> | |
| − | + | <tr><td><?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?></td></tr> | |
| − | + | <tr><td><?php echo nl2br($row['comment']) ?></td></tr> | |
| + | </tr> | ||
| + | <?php } ?> | ||
| + | </table> | ||
| + | |||
| + | <?php | ||
// 結果セットの解放 | // 結果セットの解放 | ||
mysql_free_result($res); | mysql_free_result($res); | ||
| 1,100行: | 1,207行: | ||
プログラミングスキル値が | プログラミングスキル値が | ||
<select name="prog_st"> | <select name="prog_st"> | ||
| − | <option value="1" <?php if($prog_st == 1) echo "selected | + | <option value="1" <?php if($prog_st == 1) echo "selected" ?>>1</option> |
| − | <option value="2" <?php if($prog_st == 2) echo "selected | + | <option value="2" <?php if($prog_st == 2) echo "selected" ?>>2</option> |
| − | <option value="3" <?php if($prog_st == 3) echo "selected | + | <option value="3" <?php if($prog_st == 3) echo "selected" ?>>3</option> |
| − | <option value="4" <?php if($prog_st == 4) echo "selected | + | <option value="4" <?php if($prog_st == 4) echo "selected" ?>>4</option> |
| − | <option value="5" <?php if($prog_st == 5) echo "selected | + | <option value="5" <?php if($prog_st == 5) echo "selected" ?>>5</option> |
</select> | </select> | ||
以上のレコードを表示 | 以上のレコードを表示 | ||
| 1,112行: | 1,219行: | ||
登録日時降順 | 登録日時降順 | ||
</p> | </p> | ||
| + | <h2>検索表示</h2> | ||
| + | <table border=1> | ||
| + | <tr><td>id</td><td>delete</td><td>date_time</td><td>name</td><td>age</td><td>gender</td> | ||
| + | <td>programing</td> | ||
| + | <td>comment</td> | ||
| + | </tr> | ||
<?php | <?php | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
while($row=mysql_fetch_array($res)){ | while($row=mysql_fetch_array($res)){ | ||
| − | $Nr = $row["id"]; | + | $Nr = $row["id"]; |
| − | + | ?> | |
| − | + | <tr> | |
| − | + | <td><?php echo $Nr ?></td> | |
| − | + | <td> | |
| − | + | <!-- 削除するレコードを選択する FORM --> | |
| − | + | <form method=post action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"> | |
| − | / | + | <input type=hidden name=del_rec value="<?php echo $Nr ?>"> |
| − | + | <input type=submit name=submit value=Del></form> | |
| − | + | <!-- form ここまで --> | |
| − | + | </td> | |
| − | + | <td> <?php echo $row["date_time"] ?></td> | |
| − | + | <td> <?php echo $row["namae"] ?></td> | |
| − | + | <td> <?php echo $row["age"] ?></td> | |
| − | + | <td> <?php echo $row["gender"] ?></td> | |
| − | } | + | <td> <?php echo $row["prog"] ?></td> |
| − | + | <td> <?php echo nl2br($row["comment"]) ?></td> | |
| + | </tr> | ||
| + | <?php } ?> | ||
| + | </table> | ||
| + | <?php | ||
// 結果セットの解放 | // 結果セットの解放 | ||
mysql_free_result($res); | mysql_free_result($res); | ||
| 1,185行: | 1,296行: | ||
$kword = addslashes($kword); | $kword = addslashes($kword); | ||
} | } | ||
| + | $time00 = date("Y/m/d H:i:s"); | ||
// 削除するレコードがある場合、DELETE文を実行 | // 削除するレコードがある場合、DELETE文を実行 | ||
$del_rec = $_POST["del_rec"]; | $del_rec = $_POST["del_rec"]; | ||
| 1,200行: | 1,312行: | ||
if(!empty($namae) and !empty($comment)) | if(!empty($namae) and !empty($comment)) | ||
{ | { | ||
| − | $ | + | $time00 = date("Y/m/d H:i:s"); |
$sql = "INSERT INTO data02( date_time, namae, comment) "; | $sql = "INSERT INTO data02( date_time, namae, comment) "; | ||
| − | $sql .= "VALUES('$ | + | $sql .= "VALUES('$time00','$namae','$comment');"; |
// echo $sql; | // echo $sql; | ||
// テーブルロック | // テーブルロック | ||
| 1,241行: | 1,353行: | ||
exit; | exit; | ||
} | } | ||
| − | / | + | ?> |
| − | while($row=mysql_fetch_array($res)){ | + | |
| − | + | <h2>検索表示</h2> | |
| − | + | <table> | |
| + | <?php while($row=mysql_fetch_array($res)){ | ||
$Nr = $row["id"]; | $Nr = $row["id"]; | ||
| − | + | ?> | |
| − | + | <tr><td><hr></td></tr> | |
| − | + | <tr><td> | |
| − | + | <!-- 削除するレコードを選択するFORM --> | |
| − | + | <form method=post action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"> | |
| − | + | <input type=hidden name=del_rec value=<?php echo $Nr ?>> | |
| − | echo $row["namae"] | + | <input type=submit name=submit value=Del></form> |
| − | + | <!-- FORM ここまで --> | |
| − | + | <?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?> | |
| − | + | </td></tr> | |
| − | + | <tr><td><?php echo nl2br($row["comment"]) ?></td></tr> | |
| + | </tr> | ||
| + | <?php } ?> | ||
| + | </table> | ||
| + | <?php | ||
// 結果セットの解放 | // 結果セットの解放 | ||
mysql_free_result($res); | mysql_free_result($res); | ||
| 1,279行: | 1,396行: | ||
* 以下の例は、「'''簡単BBS'''」において、'''INSERT'''文で、リファラーを追加する例。事前に、'''phpMyAdmin'''でテーブル'''data02'''にリファラー保存用のフィールド'''referer'''を作成しておく必要がある。 | * 以下の例は、「'''簡単BBS'''」において、'''INSERT'''文で、リファラーを追加する例。事前に、'''phpMyAdmin'''でテーブル'''data02'''にリファラー保存用のフィールド'''referer'''を作成しておく必要がある。 | ||
<pre> | <pre> | ||
| − | $sql = "INSERT INTO data02( | + | $sql = "INSERT INTO data02(date_time, namae, comment, referer) VALUES('$time00','$namae','$commen','$_SERVER['HTTP_REFERER']'); |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | $ | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
</pre> | </pre> | ||
| 1,295行: | 1,402行: | ||
<pre> | <pre> | ||
gethostbyaddr($_SERVER['REMOTE_ADDR']); | gethostbyaddr($_SERVER['REMOTE_ADDR']); | ||
| + | </pre> | ||
| + | |||
| + | ユーザのIPアドレスを取得して、IPアドレスとhost名を取得する例。 | ||
| + | <pre> | ||
| + | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| + | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> | ||
| + | <head> | ||
| + | <title>easy bbs</title> | ||
| + | <link href="./style00.css" rel="stylesheet" type="text/css" /> | ||
| + | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| + | </head> | ||
| + | <body> | ||
| + | <h2>簡単BBS03</h2> | ||
| + | <?php | ||
| + | // DBに接続 | ||
| + | if(!$con=mysql_connect("localhost","アカウント名","パスワード")){ | ||
| + | echo"接続失敗"; | ||
| + | exit; | ||
| + | } | ||
| + | // DBを選択 | ||
| + | if(!mysql_select_db("データベース名",$con)){ | ||
| + | echo"データベース選択失敗"; | ||
| + | exit; | ||
| + | } | ||
| + | // POSTデータ取得 | ||
| + | $namae = $_POST["namae"]; | ||
| + | $comment = $_POST["comment"]; | ||
| + | $kword = $_POST["kword"]; | ||
| + | $namae = htmlspecialchars($namae); | ||
| + | if (!get_magic_quotes_gpc()){ | ||
| + | $namae = addslashes($namae); | ||
| + | } | ||
| + | $comment = htmlspecialchars($comment); | ||
| + | if (!get_magic_quotes_gpc()){ | ||
| + | $comment = addslashes($comment); | ||
| + | } | ||
| + | $kword = htmlspecialchars($kword); | ||
| + | if (!get_magic_quotes_gpc()){ | ||
| + | $kword = addslashes($kword); | ||
| + | } | ||
| + | $time00 = date("Y/m/d H:i:s"); | ||
| + | // $hostn = $_SERVER['REMOTE_HOST']; | ||
| + | $ip = $_SERVER['REMOTE_ADDR']; | ||
| + | $hostn = gethostbyaddr($_SERVER["REMOTE_ADDR"]) | ||
| + | |||
| + | ; | ||
| + | |||
| + | // 削除するレコードがある場合、DELETE文を実行 | ||
| + | $del_rec = $_POST["del_rec"]; | ||
| + | if( $del_rec > 0 ){ | ||
| + | $sql_d = "DELETE FROM data02 WHERE id = $del_rec "; | ||
| + | // SQLの表示。デバック用。運用時にはコメントアウトする。 | ||
| + | echo "$sql_d <br>"; | ||
| + | if(!$res=mysql_query($sql_d)){ | ||
| + | echo "SQL DELETE失敗<BR>"; | ||
| + | exit; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // POSTデータが存在するときINSERT文を作成、DB更新 | ||
| + | if(!empty($namae) and !empty($comment)) | ||
| + | { | ||
| + | $sql = "INSERT INTO data02( date_time, namae, comment, hostn, ip) "; | ||
| + | $sql .= "VALUES('$time00','$namae','$comment','$hostn','$ip');"; | ||
| + | echo $sql; | ||
| + | // テーブルロック | ||
| + | $sql4lock = "LOCK TABLES data02 WRITE;"; | ||
| + | $res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data02]</p>"); | ||
| + | if($res4lock) | ||
| + | { | ||
| + | $res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>"); | ||
| + | } | ||
| + | // テーブルアンロック | ||
| + | $sql4unlock = "UNLOCK TABLES;"; | ||
| + | $res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>"); | ||
| + | } | ||
| + | //データ入力フォーム | ||
| + | ?> | ||
| + | <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post"> | ||
| + | <p> | ||
| + | 名前:<input type="text" name="namae"><br> | ||
| + | 書込み内容<br> | ||
| + | <textarea rows="5" cols="40" name="comment"></textarea> | ||
| + | <br> | ||
| + | 検索キーワード:<input type="text" name="kword"> | ||
| + | </p> | ||
| + | <input type="submit" name="exec1" value="送信"> | ||
| + | <input type="reset" name="exec2" value="リセット"> | ||
| + | </form> | ||
| + | |||
| + | <?php | ||
| + | // SQLのSELECT文作成 | ||
| + | $sql = "SELECT * FROM data02 "; | ||
| + | $where = "WHERE comment LIKE '%$kword%' "; | ||
| + | $order = "ORDER BY date_time DESC"; | ||
| + | $sql .= $where.$order; | ||
| + | // echo $sql; | ||
| + | // SELECT文実行 | ||
| + | if(!$res=mysql_query($sql)){ | ||
| + | echo "<p>SQL失敗</p>"; | ||
| + | exit; | ||
| + | } | ||
| + | ?> | ||
| + | |||
| + | <h2>検索表示</h2> | ||
| + | <table> | ||
| + | <?php while($row=mysql_fetch_array($res)){ | ||
| + | $Nr = $row["id"]; | ||
| + | ?> | ||
| + | <tr><td><hr></td></tr> | ||
| + | <tr><td> | ||
| + | <!-- 削除するレコードを選択するFORM --> | ||
| + | <form method=post action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"> | ||
| + | <input type=hidden name=del_rec value=<?php echo $Nr ?>> | ||
| + | <input type=submit name=submit value=Del></form> | ||
| + | <!-- FORM ここまで --> | ||
| + | <?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?> from <?php echo gethostbyaddr($row["ip"]); ?> ip = <?php echo $row["ip"] ?> | ||
| + | </td></tr> | ||
| + | <tr><td><?php echo nl2br($row["comment"]) ?></td></tr> | ||
| + | </tr> | ||
| + | <?php } ?> | ||
| + | |||
| + | </table> | ||
| + | <?php | ||
| + | // 結果セットの解放 | ||
| + | mysql_free_result($res); | ||
| + | // データベースから切断 | ||
| + | mysql_close($con); | ||
| + | ?> | ||
| + | </body> | ||
| + | </html> | ||
</pre> | </pre> | ||
| 1,306行: | 1,544行: | ||
例題をそのまま使うのではなく、各自でカスタマイズしてください。 | 例題をそのまま使うのではなく、各自でカスタマイズしてください。 | ||
| − | 各自の'''public_html''' | + | 各自の'''public_html'''の下の'''sysd'''という名前のフォルダの中に '''index.html''' を作り、課題のページをリンクしてください。 |
| − | + | ||
| − | アカウントが''' | + | アカウントが'''i1224000'''の学生の場合、URLは以下の通りです。 |
<pre> | <pre> | ||
| − | http://blossom.media.t-kougei.ac.jp/~ | + | http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/index.html |
</pre> | </pre> | ||
| − | [http://blossom.media.t-kougei.ac.jp/~ | + | [http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/index.html i1224000のindex.htmlの例] |
| + | *文字コードは、utf-8にしてください。 | ||
<pre> | <pre> | ||
<html> | <html> | ||
<body> | <body> | ||
| − | + | ここは1224000のコーゲータローのシステムデザインの課題のページです。<br> | |
<h4>システムデザイン課題</h4> | <h4>システムデザイン課題</h4> | ||
<ul> | <ul> | ||
| 1,324行: | 1,563行: | ||
<li><a href="show_table01.php">アンケート結果を見る</a></li> | <li><a href="show_table01.php">アンケート結果を見る</a></li> | ||
<li><a href="easy_bbs01.php">簡単BBS</a></li> | <li><a href="easy_bbs01.php">簡単BBS</a></li> | ||
| − | </ | + | </ul> |
</body> | </body> | ||
| 1,330行: | 1,569行: | ||
</pre> | </pre> | ||
以下の一覧から課題のページが参照できることを確認すること。 | 以下の一覧から課題のページが参照できることを確認すること。 | ||
| − | ;締め切りは、''' | + | ;締め切りは、'''2013/6/25(火)'''です。 |
| + | ===2013年度=== | ||
| + | [http://www.kuhalabo.net/~web/examination/sysd2013.html 2013年度の課題のページ] / | ||
===2012年度=== | ===2012年度=== | ||
2013年6月4日 (火) 02:55時点における最新版
目次 |
[編集] Information
- 成績評価
- 出席:出席管理システム(学生証持参)+PC教室ログイン状況+Minutes paper
- 課題:システムプログラミング
- 小テスト:小テストのハイスコア / 旧バージョンのハイスコア /
- サイボウズ(システムデザイン) / チュートリアルwww.media版
- HTMLの知識を持っていることを前提とします。
[編集] Schedule
- 2013年前期
- 4/16(火) 久原 データベースシステム概要
- 4/23(火) 久原 PHPサーバーサイドプログラミング
- 4/30(火) 久原 課題制作日
- 5/7(火) 久原 PHPのスクリプト, PHPサーバーサイドプログラミング
- 5/14(火) 久原 phpMyAdminによるデータベースの作成,SQLコマンド
- 5/21(火) 久原 MySQLのINSERT, SELECT
- 5/28(火) 久原 MySQLのLIMIT, WHERE, LIKE, DELETE, サーバ変数など、カスタマイズ。
- 6/4(火) 久原 課題について
- 6/11(火) 永江
- 6/18(火) 永江
- 6/25(火) 永江
- 7/2(火) 永江
- 7/9(火) 永江
- 7/16(火) 永江
- 7/23(火) 永江
- 2012年前期
- 4/17(火) 久原 データベースシステム概要
- 4/24(火) 久原 PHPサーバーサイドプログラミング
- 5/1(火) 久原 PHPのスクリプト, PHPサーバーサイドプログラミング
- 5/8(火) 久原 phpMyAdminによるデータベースの作成,SQLコマンド
- 5/15(火) 久原 MySQLのINSERT, SELECT
- 5/22(火) 久原 制作日
- 5/29(火) 久原 MySQLのLIMIT, WHERE, LIKE, DELETE, サーバ変数など、カスタマイズ。
- 6/5(火) 永江 jqueryの基礎
- 6/12(火) 永江 jquery form入力、日付処理
- 6/19(火) 永江 jqueryイベント処理
- 6/26(火) 永江 イベント処理の続き
- 7/3(火) 永江 jquery-ui
- 7/10(火) 永江 twitter api + json
- 7/17(火) 予備(課題制作・自習)日
- 7/31(火) 永江 twitter api + json + jquery + jquery-ui 課題制作・提出・講評
- 2011年前期
- 4/12(火) 久原 データベースシステム概要
- 4/19(火) 久原 PHPサーバーサイドプログラミング
- 4/26(火) 久原 PHPのスクリプト, PHPサーバーサイドプログラミング
- 5/10(火) 久原 phpMyAdminによるデータベースの作成,SQLコマンド
- 5/17(火) 久原 LIMIT, WHERE, LIKE, DELETE, サーバ変数$_SERVERなど、カスタマイズ。
- 5/24(火) 久原 DELETE,検索機能など。カスタマイズ。
- 5/31(火) 久原、森山 小テスト。課題の締め切りは、6/14(火)までです。
- 6/7(火) 永江 php おさらい
- 6/14(火) 永江 php + mysql 復習
- 6/21(火) 永江 php + xml
- 6/28(火) 永江
- 7/5(火) 永江
- 7/12(火) 永江 Twitter API 勉強会
- 7/19(火) 節電休講
- 7/26(火) 節電休講
- 2010年前期
- 4/12(月)授業の概要,アートとテクノロジー
- 今日の質問:カメラをどのように使っているか書いてください。
- 4/19(月)コンテンツと著作権
- 今日の質問:自分の好きなキャラクターを書いてください。
- 4/26(月)メディアの革命,創造のサイクルの実例
- 今日の質問:自分がよく利用しているネットのサービスついて説明してください。
- 5/10(月)著作物の自由とコピーレフト
- 今日の質問:自分が使うフリーのコンテンツについて説明してください。
- ここまでにHTMLは復習しておくこと。以下の週はPC実習
- 5/17(月)データベースシステム概要
- 今日の質問:Linuxのようなテキストでコマンドを打って操作するインターフェイスの利点を述べてください。
- 5/24(月)PHPサーバーサイドプログラミング
- 今日の質問:666とは?
- 5/31(月)phpMyAdminによるデータベースの作成, PHPサーバーサイドプログラミング
- 今日の質問:データベースとは?table, record, fieldの語を使って説明してください。
- 6/7(月)PHPサーバーサイドプログラミング
- 今日の質問:今日のSQLについて説明してください。
- 6/14(月)PHPのスクリプト,SQLコマンド
- 今日の質問:SELECTについて説明してください。
- 6/21(月)PHPのスクリプト,SQLコマンド
- 今日の質問:課題でどんなサイトを作りたいか?
- 6/28(月)LIMIT, WHERE, LIKE, DELETE, $_SERVERなど、カスタマイズ。検索機能など。
- 今日の質問:ホームページを作る時に使うソフトは?
- 7/5(月)カスタマイズ。DELETEなど。
- 7/12(月)カスタマイズ
- 7/17(土)(月曜振替日)自由演習日。
- 7/26(月)小テスト
- 2009年前期
- 4/13(月) 授業の概要,アートとテクノロジー
- 今日の質問:テクノロジーがアートのリテラシー(「読み」「書き」のどちらでも)に貢献した例をあげてください。
- 4/20(月) コンテンツと著作権
- 今日の質問:音楽コンテンツをどのように入手しているか書いてください。
- 4/27(月) メディアの革命,創造のサイクルの実例
- 今日の質問:自分の好きなキャラクターについて説明してください。
- 5/11(月) 著作物の自由とコピーレフト
- 今日の質問:ブログ、動画投稿サイト、SNSなどで自分が最も利用しているサービスついて説明してください。
- ここまでにHTMLは復習しておくこと。
- 5/18(月) データベースシステム概要,Linux/Apache/htaccessの設定(実習)
- 今日の質問:Linuxのようなテキストでコマンドを打って操作するインターフェイスの利点を述べてください。
- 5/25(月) PHPサーバーサイドプログラミング(実習)
- 今日の質問:やぶられにくいパスワードとは?
- 6/1(月) PHPサーバーサイドプログラミング(実習)
- 今日の質問:書き込み権限が必要になるファイルにはどんなものがある?
- 6/8(月) 休講
- 6/15(月) phpMyAdminによるデータベースの作成。サンプルHTML,PHPの動作確認
- 6/22(月) PHPのスクリプト,SQLコマンドの説明
- 今日の質問:SQLのSELECT文で何ができますか?
- 6/29(月) PHPのスクリプト,SQLコマンドの説明
- 7/6(月) LIMIT, WHERE, LIKE, DELETE, $_SERVERなど、カスタマイズ。検索機能など。
- 7/13(月) 予備
- 7/20(月) 祝日(オープンキャンパス)
- 7/27(月) 小テスト
- 2008年前期
- 4/14(月) 授業の概要,アートとテクノロジー
- 4/21(月) コンテンツと著作権,創造のサイクルの実例
- 4/28(月) メディアの革命
- 5/12(月) 著作物の自由とコピーレフト
- 5/19(月) データベースシステム概要(実習)
- 5/26(月) Linux/Apache/htaccessの設定(実習)
- 6/2(月) PHPサーバーサイドプログラミング(実習)
- 6/9(月) 休講
- 6/16(月) phpMyAdminによるデータベースの作成。サンプルHTML,PHPの動作確認
- 6/23(月) PHPのスクリプト,SQLコマンドの説明
- 6/30(月) PHPのスクリプト,SQLコマンドの説明
- 7/7(月) カスタマイズ
- 7/14(月) 小テスト
[編集] データベースシステム概要
- 簡単BBSによく使うブラウザを書いてみよう。
- WWWサーバとクライアント
- サーバのシェア調査(Webなど),クライアントのシェア調査(OS,ブラウザなど)
- CGIによるサーバサイドスクリプト例(電子掲示板):renKanon board
- PHPによるサーバサイドスクリプト例(アクセス解析):MIDI作品アクセス解析
- ASPによるサーバサイドスクリプト例(Webデータベース):Media Art 作品データベースシステム
- ColdFusionによるサーバサイドスクリプト例:COOKPAD
- インターネット上のデータベースを使ったアート
- データベース上の情報にアクセスしてFlashやWebスクリプトでヴィジュアライズした作品が多い。
- クラウドソーシング
- 不特定多数の人からなる素材で構成される作品。ネット時代の可能性を秘めた表現
- テクネ 映像の教室「クラウドソーシング」
- テクネ 3-3 クラウドソーシング
- ビッグデータ
[編集] サーバーサイドプログラミング実習Apache/Linux
- 実習のための準備
- サーバ情報
- WinSCPでサーバとローカルPCとの間でファイル転送する。
- WinSCPのサイト:自分のHDDにインストール
- teratermやPuTTYでサーバにログインし,Unixのコマンドを操作する。
- 今、自分はどこで作業しているのか。サーバ側かローカルPC側か
[編集] よく使うUnixの基本的なコマンド
[編集] passwdコマンド パスワードの変更
[i0724000@sandbox ~]$ passwd Changing password for user i0724000. Changing password for i0724000. (current) UNIX password: 現在のパスワードを入力(画面には何も表示されない) New UNIX password: 新しいパスワードを入力 BAD PASSWORD: it does not contain enough DIFFERENT characters バスワードの文字が少ないとエラーになる。 New UNIX password: 新しいパスワードを入力 Retype new UNIX password: 新しいパスワードを再入力 passwd: all authentication tokens updated successfully. [i0724000@sandbox ~]$
[編集] ls, ls -alコマンド ディレクトリ内のファイルの一覧表示(list -all long)
[i0724000@sandbox ~]$ ls public_html [i0724000@sandbox ~]$ ls -al total 92 drwxr-xr-x 4 i0724000 i0724000 4096 2008-05-25 16:45 . drwxr-xr-x 436 root root 16384 2008-05-25 14:33 .. -rw------- 1 i0724000 i0724000 162 2008-05-25 17:29 .bash_history -rw-r--r-- 1 i0724000 i0724000 33 2008-05-25 12:06 .bash_logout -rw-r--r-- 1 i0724000 i0724000 176 2008-05-25 12:06 .bash_profile -rw-r--r-- 1 i0724000 i0724000 124 2008-05-25 12:06 .bashrc -rw-r--r-- 1 i0724000 i0724000 500 2008-05-25 12:06 .emacs drwxr-xr-x 2 i0724000 i0724000 4096 2008-05-25 12:07 public_html -rw------- 1 i0724000 i0724000 705 2008-05-25 12:08 .viminfo drwxr-xr-x 2 i0724000 i0724000 4096 2008-05-25 12:06 .xemacs [i0724000@sandbox ~]$
[編集] cdコマンド ディレクトリの移動(change directory)
[i0724000@sandbox ~]$ cd public_html/ public_htmlディレクトリへ移動 [i0724000@sandbox public_html]$ cd .. 親(ホーム)ディレクトリへ移動 [i0724000@sandbox ~]$
[編集] mkdirコマンド ディレクトリの作成(make directory)
[i0724000@sandbox ~]$ mkdir conf ディレクトリconfの作成 [i0724000@sandbox ~]$ cd conf ディレクトリconfへ移動 [i0724000@sandbox conf]$ cd .. [i0724000@sandbox ~]$ ls 現ディレクトリのリスト表示 conf public_html [i0724000@sandbox ~]$
[編集] catコマンド ファイルの中身を表示(catenate)
[i0724000@sandbox public_html]$ cat conf ファイルindex.htmlの表示 i0724000 [i0724000@sandbox public_html]$
[編集] exitコマンド ログアウトする
[i0724000@sandbox]$ exit または [i0724000@sandbox]$ logout
[編集] 注記
- ~(チルダ)はホームディレクトリを意味する。..(ドットドット)は1つ上の親ディレクトリを意味する。
- cdをカラで打つと、ホームディレクトリに戻る。
- TABキーで,ファイル名を補完してくれる。
- 上・下矢印キーで,過去に使用したコマンドを表示してくれる。
- その他のコマンド
- pwd 現在のディレクトリ(カレントディレクトリ)の表示
- cp ファイルのコピー
- mv ファイルの移動、名前の変更
- rm ファイルの削除
- vi テキストエディタ
- xemacs テキストエディタ
[編集] アクセス制御
- htaccessによるアクセス制御
- アカウントとパスワードによって、特定のユーザだけにアクセスを許可する仕組み。ディレクトリごとにアカウントを設定することができる。(Apacheのみ)
[編集] PHPによるサーバサイドスクリプト実習
システムデザインの授業用のフォルダsysdを作り、サーバのpublic_htmlの下に、アップする。
http://blossom.media.t-kougei.ac.jp/~user10_000/sysd/
- この授業の課題は上記のURLからリンクを張って見れるようにする。
- 10_000の部分は自分のアカウントに変更する。
[編集] サーバ上のPHPに関する情報を表示
ローカルPC上で、以下の1行だけからなるphpinfo.phpという名前のファイルを作成する。
- 保存場所は、public_html/sysdの中。
<?php phpinfo(); ?>
<?php と ?> で囲まれた部分がPHPのスクリプト
http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/phpinfo.php
URLは上記のとおり。
[編集] 現在日付,ファイル更新日付,アクセスカウンタ
- test.php
- アクセスカウンタの仕組み
- カウント数を保存するファイルとしてcount.txtを使用している。count.txtはサーバ上に保存されなければならない。
- ローカルPC上でメモ帳などで、count.txtを作成し、初期値として半角数字の1だけを記述する。
- WinSCPでcount.txtをサーバに転送する。
- サーバ上のcount.txtのパーミッション(ファイルアクセス権限)を666(rw-rw-rw-)にする。
- r:read, w:write, x:execute
| rwx | binary | octal |
|---|---|---|
| --- | 000 | 0 |
| --x | 001 | 1 |
| -w- | 010 | 2 |
| -wx | 011 | 3 |
| r-- | 100 | 4 |
| r-x | 101 | 5 |
| rw- | 110 | 6 |
| rwx | 111 | 7 |
| owner | group | others |
|---|---|---|
| rwx | rwx | rwx |
| 110 | 110 | 110 |
| 6 | 6 | 6 |
ownerもgroupもothersもread/wirteが可能でexecuteが不可
- 以下のソースコード例。<?php と ?> で囲まれた部分がPHPのスクリプト
- このソースのファイル名は,test.phpの場合なので,filemtime()関数内の./test.phpは,自分のつけたファイル名に応じて適宜変更すること。
- ソースファイルtest.phpは、文字コードをUTF-8にしての保存すること。
<html>
<head>
<title>PHP test page</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>PHPのテストページ:現在時刻,ファイルの最終更新日時,アクセスカウンタの表示</h2>
<p>
現在の時刻は<?php echo date("Y/m/d(D) H:i:s", time()); ?>です。<br>
最後にこのファイルが修正されたのは,<?php print date("Y年m月d日H時i分s秒", filemtime("./test.php") ); ?> です。<br>
</p>
<p>
<i>アクセスカウント : <b>
<?php
// 前もってカウント数を保存するファイルcount.txtを作成しておく。
$countlog = "./count.txt";
// データを読む
$count = file_get_contents($countlog);
// カウンタをひとつ増やす
$count++;
// カウンタの値をブラウザに表示する
print "$count";
// count.txtを書き込み可能な状態でオープンする
$fp = fopen($countlog, "w");
// count.txtにロックをかける
flock($fp, LOCK_EX);
// カウンタをcount.txtに保存する
fputs($fp, $count, strlen($count));
// count.txtにロックを解除する
flock($fp, LOCK_UN);
// count.txtをクローズする
fclose($fp);
?>
</b></i>
</p>
</body>
</html>
[編集] PHPスクリプト解説
- 変数は$で始まる文字列
- $countlogには、カウンターのファイル名が入る
- $countには、現在のカウンタの数が入る
- printやechoは文字列を表示する。
- 日付は,time()関数で日付情報を獲得し,date()関数で表示フォーマットする日付関数のマニュアル。
- filemtime(), file_get_contents(), fopen(), flock(), fputs(), fclose()などはPHPのファイルシステム関数
- PHPは強力な関数がたくさん準備されていて,かなりのことができてしまう。
[編集] 指定したURLにリダイレクト
- HTMLのmetaタグによる方法
- 10秒後に指定したURLにジャンプするようにするには以下のようにheaderを指定する。
- 10を0に変更すれば、瞬時にジャンプする。
<head> <meta http-equiv="refresh" content="10;URL=http://example.jp/***/***.html"> </head>
- PHPを使った方法
- 無条件にリダイレクトする。
- if文を使えば条件に応じて違うところにリダイレクトすること可能。
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://example.jp/***/***.html");
?>
- 2秒後にリダイレクトする。
<?php
header("Refresh: 2; URL=http://example.jp/***/***.html");
?>
[編集] Webデータベースプログラミング実習PHP+MySQL
- 作成環境
- Webサーバは,Apache 2.2.8 on Linux Fedoracore
- ページ記述言語はHTML, CSS。TeraPadなどのテキストエディタで作成。
- ページ内埋め込みスクリプトは,PHP 5.2.4。テキストエディタまたはDreamweaverなどで作成。
- データベースは,MySQL 5.0.45。PHP内で記述。
- データベース管理は,phpMyAdmin 2.11.6で操作。
- 文字セットはutf8を使用。
- 概念図
[編集] 作成例1 アンケート収集・結果表示
[編集] データベース上のテーブルを作成
アンケートの収集結果は、データベース内でテーブルという形式で保存される。また、PHPからアンケートの内容をいつでも参照できる。
- phpMyAdminにログイン
- 左のカラムにある自分の学籍番号に基づいて作られたデータベースを選択
- 新しいテーブルを作成
- 「データベース i**24*** に新しいテーブルを作成する」の項目に下記の情報を入力
- テーブルの名前:data01 フィールド数:7
- テーブル名のスペルを間違えないように。たとえば、dataをdateと間違えるなど。
- テーブルの構造は以下の通り。各フィールドを入力し終えたら、[保存する]をクリック。
| テーブル data01 | |||||||
|---|---|---|---|---|---|---|---|
| フィールド | 種別 | 長さ | 照合順序 | その他 | 説明 | ||
| id | int | 11 | auto_increment | 自動的に割り振られるID | |||
| date_time | datetime | 回答をとった日時 | |||||
| namae | varchar | 50 | utf8_general_ci | 回答者の名前 | |||
| age | int | 11 | 回答者の年齢 | ||||
| gender | varchar | 5 | utf8_general_ci | 回答者の性別 | |||
| prog | varchar | 2 | utf8_general_ci | 回答内容(プログラミングの経験) | |||
| comment | text | utf8_general_ci | 補足の回答項目 | ||||
- データベースにテーブルdata01が作成されていることを確認する。
[編集] 文字化け対処方法
phpmyadminで、テーブルの照合順序をutf8_general_ciにする。
- phpmyadminにログインする。
- data01などのテーブルを選択する。
- 「構造」タブを選択する。
- 「照合順序」をが「latin1_swedish_ci」になっているカラムを「utf8_general_ci」に変更する。
- 鉛筆マークの「変更」ボタンをクリックすると変更できます。
[編集] アンケートをとるページ
[編集] update_table01.html
- 文字コードはutf-8で保存する。
- HTMLのフォームでデータを入力し,PHPスクリプトへ渡す。
- ローカルPCのエディタで作成して、ソースファイルを作成して、WinSCPでサーバにアップロードする。
- アップロードする場所は、/home/user09_***/public_html/以下のディレクトリ
- 本授業用にフォルダ(たとえばsysd)を作っておくとよい。
- sysdというフォルダに保存した場合は,http://blossom.media.t-kougei.ac.jp/~user10_000/sysd/update_table01.html
- データ追加エラーやTable unLock Errorが出るときは、phpMyAdminで作成したテーブル名、フィールド名が正しいか確認するしてください。
http://blossom.media.t-kougei.ac.jp/~kuha/sysd/update_table01.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>update table</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>アンケート</h2>
<form action="update_table01.php" method="post">
<p>
名前:<input type="text" name="namae">
年齢:
<select name="age">
<option value="17">17</option>
<option value="18">18</option>
<option value="19" selected>19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
</select>
</p>
<p>
性別:
<input type="radio" name="gender" value="m" /> 男
<input type="radio" name="gender" value="f" /> 女
</p>
<p>
あなたはプログラミングは?:
<select name="prog">
<option value="1">まったくできない</option>
<option value="2">すこしはできる</option>
<option value="3">まあまあできるほう</option>
<option value="4">かなりできる</option>
<option value="5">プロ級</option>
</select>
</p>
<p>
自由に記述してください<br>
<textarea rows="5" cols="80" name="comment"></textarea>
<br>
</p>
<input type="submit" name="exec1" value="送信">
<input type="reset" name="exec2" value="リセット">
</form>
</body>
</html>
[編集] update_table01.php
- 文字コードはutf-8で保存する。
- 役割 入力フォームのデータを受け取り,データベースに書き込む。
- ユーザ名、パスワード、データベース名は自分のものに変更すること。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>update table01</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
$namae = $_POST["namae"];
$age = $_POST["age"];
$gender = $_POST["gender"];
$prog = $_POST["prog"];
$comment = $_POST["comment"];
$namae = htmlspecialchars($namae);
if (!get_magic_quotes_gpc()){
$namae = addslashes($namae);
}
$comment = htmlspecialchars($comment);
if (!get_magic_quotes_gpc()){
$comment = addslashes($comment);
}
echo "<p>名前 : $namae <br>";
echo "<p>年齢 : $age <br>";
echo "性別 : $gender <br>";
echo "プログラミング : $prog <br>";
echo "コメント : $comment <br></p>";
// DBに接続
if(!$con=mysql_connect("localhost","ユーザ名","パスワード")){ //ユーザ名とパスワードは各自で設定
echo "接続エラー";
exit;
}
else{
echo "DB接続完了<br>";
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo "データベース選択エラー<br>";
exit;
}
else{
echo "DB選択完了<br>";
}
// フォームで送られてきたデータでINSERT文を作成
$sql = "INSERT INTO data01(date_time, namae, age, gender, prog, comment) ";
$sql .= " VALUES('" . date("Y/m/d H:i:s") . "', '$namae', '$age', '$gender', '$prog', '$comment');";
echo $sql; // コメントアウトをはずすと、実行されたSQLが表示される。
// テーブルロック
$sql4lock = "LOCK TABLES data01 WRITE;";
$res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data01]</p>");
//テーブルロックが成功したら$sqlを実行する
if($res4lock)
{
$res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>");
}
// テーブルアンロック
$sql4unlock = "UNLOCK TABLES;";
$res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data01]</p>");
// DBから切断
mysql_close($con);
// メッセージ出力
echo "<p>送信完了</p>";
echo "<p>アンケートご協力ありがとうございました。</p>";
?>
</body>
</html>
次のように書いても同じ。 $sqlの組み方に注意。
http://blossom.media.t-kougei.ac.jp/~kuha/sysd/update_table02.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>update table01</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
$namae = $_POST["namae"];
$age = $_POST["age"];
$gender = $_POST["gender"];
$prog = $_POST["prog"];
$comment = $_POST["comment"];
$namae = htmlspecialchars($namae);
if (!get_magic_quotes_gpc()){
$namae = addslashes($namae);
}
$comment = htmlspecialchars($comment);
if (!get_magic_quotes_gpc()){
$comment = addslashes($comment);
}
$time00 = date("Y/m/d H:i:s"); //現在時刻の取得
?>
<p>名前 : <?php echo $namae ?><br>
<p>年齢 : <?php $age ?><br>
性別 : <?php $gender ?><br>
プログラミング : <?php $prog ?><br>
コメント : <?php $comment ?><br></p>
<?php
// DBに接続
if( $con=mysql_connect("localhost","ユーザ名","パスワード") ){ //ユーザ名とパスワードは各自で設定
echo "DB接続完了<br>";
}
else{
echo "接続エラー";
exit;
}
// DBを選択
if( mysql_select_db("データベース名",$con) ){
echo "DB選択完了<br>";
}
else{
echo "データベース選択エラー<br>";
exit;
}
// フォームで送られてきたデータでINSERT文を作成
$sql = "INSERT INTO data01(date_time, namae, age, gender, prog, comment) ";
$sql .= " VALUES('$time00', '$namae', '$age', '$gender', '$prog', '$comment');";
echo $sql; // コメントアウトをはずすと、実行されたSQLが表示される。
// テーブルロック
$sql4lock = "LOCK TABLES data01 WRITE;";
$res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data01]</p>");
//テーブルロックが成功したら$sqlを実行する
if($res4lock)
{
$res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>");
}
// テーブルアンロック
$sql4unlock = "UNLOCK TABLES;";
$res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data01]</p>");
// DBから切断
mysql_close($con);
?>
<p>送信完了</p>
<p>アンケートご協力ありがとうございました。</p>
</body>
</html>
[編集] PHPスクリプト解説
- 変数は$で始まる文字列
- POSTとGETの変数渡し
- $namae = $_POST["namae"];で変数namaeの値をPOSTで受け取る。
- htmlspecialchars()でHTMLの特殊文字を HTMLの表示形式に変換する。
- get_magic_quotes_gpc()の値がOFFのとき、addslashes() で「"」と「'」などをエスケープする。
- echoで画面表示。"(ダブルクォーテーション)で文字列を囲む。
- if else文で条件分岐
if(条件){
条件が真の場合,実行される文;
}
else{
条件が偽の場合,実行される文;
}
- if文の条件内の!(感嘆符)は論理演算子の1つで、否定を意味する。
- .(ピリオド)は文字列の連結
- mysql_query()の()の中にSQLを記述する。
- \n はアスキーコードの改行を意味する。このコードが来るとテキストエディター上で改行される。
たとえば以下の文字列は
今日は、いい天気\n明日は晴れ
テキストエディター上で以下のように表示される
今日は、いい天気 明日は晴れ
[編集] SQL解説
- INSERT文でテーブルにレコードを追加する。構文解説
- INSERT文の構文例
INSERT INTO テーブル名(フィールド名1, フィールド名2, ..... , フィールド名n) VALUES('フィールドの値1','フィールドの値2', ..... ,'フィールドの値n');
- INSERT文の実行例
INSERT INTO data01(date_time, namae, age, gender, prog, comment) VALUES('$date_time','$namae','$age','$gender','$prog','$comment');
INSERT INTO data01(date_time, namae, age, gender, prog, comment) VALUES('2008/06/30 06:50:43','太郎','19','m','3','データーベースプログラミングをマスターしたいです。');
[編集] アンケートを見るページ
サンプルURL http://blossom.media.t-kougei.ac.jp/~kuha/sysd/show_table01.php
[編集] ファイル名 show_table01.php
- 文字コードはutf-8で保存する。
- データベースからデータを読み取り,表示する。
- sysdというフォルダに保存した場合は,http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/show_table01.php でアクセスできるはず。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>show table</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>テーブルの中身</h2>
登録日時降順
<?php
// DBに接続
if(!$con=mysql_connect("localhost","ユーザ名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// SELECT文を設定
$sql = "SELECT * FROM data01 ORDER BY date_time DESC";
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "SQL失敗<BR>";
exit;
}
?>
検索結果表示
<table border=1>
<tr><td>id</td><td>date_time</td><td>name</td><td>age</td><td>gender</td>
<td>programing</td>
<td>comment</td>
</tr>
<?php while( $row=mysql_fetch_array($res) ){ ?>
<tr>
<td><?php echo $row["id"] ?> </td>
<td><?php echo $row["date_time"] ?></td>
<td><?php echo $row["namae"] ?></td>
<td><?php echo $row["age"] ?></td>
<td><?php echo $row["gender"] ?></td>
<td><?php echo $row["prog"] ?></td>
<td><?php echo nl2br($row["comment"]) ?></td>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
[編集] PHPスクリプト解説
- $res = mysql_query("SELECT ...")
- SQLのSELECT文を実行して,データベースから条件に合致するレコードを取得する。検索結果をすべて$resに格納する。検索に失敗したら,0(偽)を返す。
- $row=mysql_fetch_array($res)
- 検索結果が格納された$resから,先頭から順番に1レコード文のデータを配列$rowに入れる。レコードがなくなったら0(偽)を返す。
- $row["フィールド名"]で,レコードのフィールドの値を参照できる。
- while文で繰り返しループ処理。(条件)が真の間,繰り返し実行される。偽になったらループを抜ける。
while(条件){
条件が真の間,実行される文;
}
while($row=mysql_fetch_array($res))は$res内に読み取るレコードがなくなるまでループを繰り返す。
- nl2br(文字列)
- 文字列内の改行コード文字の前に HTML の改行タグを挿入する。
- 改行コードとは、もともとタイプライターの「CR」(Carriage Return : 行頭復帰)と「LF」(Line Feed : 行送り)の2つのコードに由来しており、WindowsではCR+LF(\r\n)、Mac OSではCR(\r)、UNIXではLF(\n)が使われている。
[編集] SQL解説
- SELECT文でテーブから条件に合致するコードを検索する。構文解説
- SELECT文の構文例
SELECT フィールド名 FROM テーブル名 検索条件
- INSERT文の実行例
SELECT * FROM data01 ORDER BY date_time DESC
- テーブルdata01から,すべてのフィールド(*)を取り出す。検索は,日時(date_time)の降順(ORDER BY ... DESC)で取り出す。
- WHEREを使って,検索条件を絞り込む。以下の例は,フィールドageの値が21未満のレコードのみを検索する。
SELECT * FROM data01 WHERE age < 21 ORDER BY date_time DESC
[編集] 作成例2 簡単BBS
[編集] 書き込みと表示の一体型ページ
- テーブル名:data02 フィールド数:4
| テーブル data02 | ||||
|---|---|---|---|---|
| フィールド | 種別 | 長さ | 照合順序 | その他 |
| id | int | 11 | auto_increment | |
| date_time | datetime | |||
| namae | varchar | 50 | utf8_general_ci | |
| comment | text | utf8_general_ci | ||
[編集] ファイル名 easy_bbs01.php
- 文字コードはutf-8で保存する。
- 役割 データ入力フォーム,データベースへの書込み,データの表示
- 上記のアンケートの例を1つのページにまとまたもの。
- $_SERVER['SCRIPT_NAME']は,サーバ変数の1つで、自分のファイル名を取得する。 この場合は、easy_bbs01.phpになる。
- if文の条件判定の括弧内にあるandは論理演算子の論理積。およびを意味する。&&とも書く。
サンプルURL: http://blossom.media.t-kougei.ac.jp/~kuha/sysd/easy_bbs01.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>easy bbs</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>簡単BBS</h2>
<?php
// DBに接続
if(!$con=mysql_connect("localhost","ユーザ名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// POSTデータ取得
$namae = $_POST["namae"];
$comment = $_POST["comment"];
$namae = htmlspecialchars($namae);
if (!get_magic_quotes_gpc()){
$namae = addslashes($namae);
}
$comment = htmlspecialchars($comment);
if (!get_magic_quotes_gpc()){
$comment = addslashes($comment);
}
// 現在日付、時刻の取得
$time00 = date("Y/m/d H:i:s");
// POSTデータが存在するときINSERT文を作成、DB更新
if(!empty($namae) and !empty($comment))
{
$sql = " INSERT INTO data02( date_time, namae, comment) VALUES( '$time00','$namae','$comment');";
echo $sql;
// テーブルロック
$sql4lock = "LOCK TABLES data02 WRITE;";
if( mysql_query($sql4lock, $con) ){
$res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>"); //INSERT文 実行
}
else{
echo "<p>Table Lock Error[Insert data02]</p>";
}
// テーブルアンロック
$sql4unlock = "UNLOCK TABLES;";
$res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>");
}
//データ入力フォーム
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<p>
名前:<input type="text" name="namae"><br>
書込み内容<br>
<textarea rows="5" cols="40" name="comment"></textarea>
<br>
</p>
<input type="submit" name="exec1" value="送信">
<input type="reset" name="exec2" value="リセット">
</form>
<?php
// SQLのSELECT文作成
$sql = "SELECT * FROM data02 ORDER BY date_time DESC";
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "SQL失敗<BR>";
exit;
}
?>
<h2>検索結果表示</h2>
<table>
<?php while($row=mysql_fetch_array($res)){ ?>
<tr><td><hr></td></tr>
<tr><td><?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?></td></tr>
<tr><td><?php echo nl2br($row['comment']) ?></td></tr>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
[編集] SQLの応用
[編集] 抽出データ数の制限 LIMIT
- SELECT文で抽出データ数を制限する。
- 以下の例は、簡単BBSで、時間の新しい順に最新の10件だけを抽出する例。
SELECT * FROM data02 ORDER BY date_time DESC LIMIT 10
[編集] 抽出レコードの条件設定 WHERE
- SELECT文で抽出レコードの条件を指定する。
- 以下の例は、「アンケートを見るページ」で、プログラミング経験が「2」以下のレコードだけを抽出するSQLの例。
SELECT * FROM data01 WHERE prog <= 2 ORDER BY date_time DESC
- 以下の例は、「アンケートを見るページ」で、プログラミングスキル値をメニューから選択して、選択した値以上のレコードだけを抽出するPHPスクリプトの例。ファイル名「show_table02.php」
- サンプルURL : http://blossom.media.t-kougei.ac.jp/~kuha/sysd/show_table02.php
- 基準となるプログラミングスキル値を入れる変数として$prog_stが追加されている。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>show table</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>テーブルの中身</h2>
<?php
// DBに接続
if(!$con=mysql_connect("localhost","ユーザ名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// POSTデータ取得
$prog_st = $_POST["prog_st"];
if( empty($prog_st) ) $prog_st = 0;
// SELECT文を設定
$sql = "SELECT * FROM data01 WHERE prog >= $prog_st ORDER BY date_time DESC";
// SQLの表示。デバック用。運用時にはコメントアウトする。
echo $sql;
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "SQL失敗<BR>";
exit;
}
//データ入力フォーム
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<p>
プログラミングスキル値が
<select name="prog_st">
<option value="1" <?php if($prog_st == 1) echo "selected" ?>>1</option>
<option value="2" <?php if($prog_st == 2) echo "selected" ?>>2</option>
<option value="3" <?php if($prog_st == 3) echo "selected" ?>>3</option>
<option value="4" <?php if($prog_st == 4) echo "selected" ?>>4</option>
<option value="5" <?php if($prog_st == 5) echo "selected" ?>>5</option>
</select>
以上のレコードを表示
<input type="submit" name="exec1" value="実行">
</form>
<br />
登録日時降順
</p>
検索結果表示
<table border=1>
<tr><td>通し番</td><td>回答日時</td><td>名前</td><td>年齢</td><td>性別</td>
<td>スキル</td><td>コメント</td>
</tr>
<?php while( $row=mysql_fetch_array($res) ){ ?>
<tr>
<td><?php echo $row["id"] ?> </td>
<td><?php echo $row["date_time"] ?></td>
<td><?php echo $row["namae"] ?></td>
<td><?php echo $row["age"] ?></td>
<td><?php echo $row["gender"] ?></td>
<td><?php echo $row["prog"] ?></td>
<td><?php echo nl2br($row["comment"]) ?></td>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
[編集] WHEREとLIKEでキーワード検索
- 以下の例は、「簡単BBS」で、検索キーワード「abc」をコメント(comment)に含むレコードだけを抽出するSQLの例。
SELECT * FROM data02 WHERE comment LIKE '%abc%'
- 以下の例は、「簡単BBS」で、検索キーワードを指定して、コメントにキーワードを含むレコードだけを抽出するPHPスクリプトの例。ファイル名「easy_bbs02.php」
- サンプルURL : http://blossom.media.t-kougei.ac.jp/~kuha/sysd/easy_bbs02.php
- キーワードを入れる変数として$kwordが追加されている。
- SQLは、$sql,$where,$orderの3つの文字列を連結して作成している。
- $whereで、WHERE句の条件を指定
- $orderで、ORDERの昇順・降順を指定
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>easy bbs</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>簡単BBS</h2>
<?php
// DBに接続
if(!$con=mysql_connect("localhost","ユーザ名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// POSTデータ取得
$namae = $_POST["namae"];
$comment = $_POST["comment"];
$kword = $_POST["kword"];
$namae = htmlspecialchars($namae);
if (!get_magic_quotes_gpc()){
$namae = addslashes($namae);
}
$comment = htmlspecialchars($comment);
if (!get_magic_quotes_gpc()){
$comment = addslashes($comment);
}
$kword = htmlspecialchars($kword);
if (!get_magic_quotes_gpc()){
$kword = addslashes($kword);
}
$time00 = date("Y/m/d H:i:s");
// POSTデータが存在するときINSERT文を作成、DB更新
if(!empty($namae) and !empty($comment))
{
$date00 = date("Y/m/d H:i:s");
$sql = "INSERT INTO data02(date_time, namae, comment) VALUES('$time00','$namae','$comment');";
// echo $sql;
// テーブルロック
$sql4lock = "LOCK TABLES data02 WRITE;";
$res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data02]</p>");
if($res4lock)
{
$res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>");
}
// テーブルアンロック
$sql4unlock = "UNLOCK TABLES;";
$res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>");
}
//データ入力フォーム
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<p>
名前:<input type="text" name="namae"><br>
書込み内容<br>
<textarea rows="5" cols="40" name="comment"></textarea>
<br>
検索キーワード:<input type="text" name="kword">
</p>
<input type="submit" name="exec1" value="送信">
<input type="reset" name="exec2" value="リセット">
</form>
<?php
// SQLのSELECT文作成
$sql = "SELECT * FROM data02 ";
$where = "WHERE comment LIKE '%$kword%' ";
$order = "ORDER BY date_time DESC";
$sql .= $where.$order;
// echo $sql;
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "<p>SQL失敗</p>";
exit;
}
?>
<h2>検索結果表示</h2>
<table>
<?php while($row=mysql_fetch_array($res)){ ?>
<tr><td><hr></td></tr>
<tr><td><?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?></td></tr>
<tr><td><?php echo nl2br($row['comment']) ?></td></tr>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
[編集] レコードの削除 DELETE
以下のDELETE文で、条件に合致するレコードを削除することができる。
DELETE FROM テーブル名 WHERE 条件式;
たとえば、idが50であるレコードをdata01テーブルから削除するSQLは以下のとおり。
DELETE FROM data01 WHERE id = 50;
- 以下の例は、「アンケートを見るページ」で、レコード選択して削除するPHPスクリプトの例。ファイル名「show_table03.php」
- サンプルURL : http://blossom.media.t-kougei.ac.jp/~kuha/sysd/show_table03.php
- 削除したいレコードの「id」をフォーム内のhidden属性のデータとして変数$del_recに入れてPOST渡しをし、SQLのDELTE文で削除している。
- この状態では誰でも削除できてしまうので、htaccessでアクセス制限をかけるとか、レコードごとにパスワードを設定するとかするのが一般的。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>show table</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>テーブルの中身を表示03</h2>
<?php
// DBに接続
if(!$con=mysql_connect("localhost","アカウント名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// POSTデータ取得
$prog_st = $_POST["prog_st"];
if( empty($prog_st) ) $prog_st = 0;
$del_rec = $_POST["del_rec"];
// 削除するレコードがある場合、DELETE文を実行
if( $del_rec > 0 ){
$sql_d = "DELETE FROM data01 WHERE id = $del_rec ";
// SQLの表示。デバック用。運用時にはコメントアウトする。
echo $sql_d."<br>";
if(!$res=mysql_query($sql_d)){
echo "SQL DELETE失敗<BR>";
exit;
}
}
// SELECT文を設定
$sql = "SELECT * FROM data01 WHERE prog >= $prog_st ORDER BY date_time DESC";
// SQLの表示。デバック用。運用時にはコメントアウトする。
echo $sql;
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "SQL失敗 SELECT<BR>";
exit;
}
//データ入力フォーム
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<p>
プログラミングスキル値が
<select name="prog_st">
<option value="1" <?php if($prog_st == 1) echo "selected" ?>>1</option>
<option value="2" <?php if($prog_st == 2) echo "selected" ?>>2</option>
<option value="3" <?php if($prog_st == 3) echo "selected" ?>>3</option>
<option value="4" <?php if($prog_st == 4) echo "selected" ?>>4</option>
<option value="5" <?php if($prog_st == 5) echo "selected" ?>>5</option>
</select>
以上のレコードを表示
<input type="submit" name="exec1" value="実行">
</form>
<br />
登録日時降順
</p>
<h2>検索表示</h2>
<table border=1>
<tr><td>id</td><td>delete</td><td>date_time</td><td>name</td><td>age</td><td>gender</td>
<td>programing</td>
<td>comment</td>
</tr>
<?php
while($row=mysql_fetch_array($res)){
$Nr = $row["id"];
?>
<tr>
<td><?php echo $Nr ?></td>
<td>
<!-- 削除するレコードを選択する FORM -->
<form method=post action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">
<input type=hidden name=del_rec value="<?php echo $Nr ?>">
<input type=submit name=submit value=Del></form>
<!-- form ここまで -->
</td>
<td> <?php echo $row["date_time"] ?></td>
<td> <?php echo $row["namae"] ?></td>
<td> <?php echo $row["age"] ?></td>
<td> <?php echo $row["gender"] ?></td>
<td> <?php echo $row["prog"] ?></td>
<td> <?php echo nl2br($row["comment"]) ?></td>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
- 以下の例は、「簡単BBS」で、レコード選択して削除するPHPスクリプトの例。ファイル名「easy_bbs03.php」
- サンプルURL : http://blossom.media.t-kougei.ac.jp/~kuha/sysd/easy_bbs03.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>easy bbs</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>簡単BBS03</h2>
<?php
// DBに接続
if(!$con=mysql_connect("localhost","アカウント名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// POSTデータ取得
$namae = $_POST["namae"];
$comment = $_POST["comment"];
$kword = $_POST["kword"];
$namae = htmlspecialchars($namae);
if (!get_magic_quotes_gpc()){
$namae = addslashes($namae);
}
$comment = htmlspecialchars($comment);
if (!get_magic_quotes_gpc()){
$comment = addslashes($comment);
}
$kword = htmlspecialchars($kword);
if (!get_magic_quotes_gpc()){
$kword = addslashes($kword);
}
$time00 = date("Y/m/d H:i:s");
// 削除するレコードがある場合、DELETE文を実行
$del_rec = $_POST["del_rec"];
if( $del_rec > 0 ){
$sql_d = "DELETE FROM data02 WHERE id = $del_rec ";
// SQLの表示。デバック用。運用時にはコメントアウトする。
echo "$sql_d <br>";
if(!$res=mysql_query($sql_d)){
echo "SQL DELETE失敗<BR>";
exit;
}
}
// POSTデータが存在するときINSERT文を作成、DB更新
if(!empty($namae) and !empty($comment))
{
$time00 = date("Y/m/d H:i:s");
$sql = "INSERT INTO data02( date_time, namae, comment) ";
$sql .= "VALUES('$time00','$namae','$comment');";
// echo $sql;
// テーブルロック
$sql4lock = "LOCK TABLES data02 WRITE;";
$res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data02]</p>");
if($res4lock)
{
$res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>");
}
// テーブルアンロック
$sql4unlock = "UNLOCK TABLES;";
$res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>");
}
//データ入力フォーム
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<p>
名前:<input type="text" name="namae"><br>
書込み内容<br>
<textarea rows="5" cols="40" name="comment"></textarea>
<br>
検索キーワード:<input type="text" name="kword">
</p>
<input type="submit" name="exec1" value="送信">
<input type="reset" name="exec2" value="リセット">
</form>
<?php
// SQLのSELECT文作成
$sql = "SELECT * FROM data02 ";
$where = "WHERE comment LIKE '%$kword%' ";
$order = "ORDER BY date_time DESC";
$sql .= $where.$order;
// echo $sql;
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "<p>SQL失敗</p>";
exit;
}
?>
<h2>検索表示</h2>
<table>
<?php while($row=mysql_fetch_array($res)){
$Nr = $row["id"];
?>
<tr><td><hr></td></tr>
<tr><td>
<!-- 削除するレコードを選択するFORM -->
<form method=post action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">
<input type=hidden name=del_rec value=<?php echo $Nr ?>>
<input type=submit name=submit value=Del></form>
<!-- FORM ここまで -->
<?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?>
</td></tr>
<tr><td><?php echo nl2br($row["comment"]) ?></td></tr>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
[編集] サーバ変数 $_SERVER
サーバ変数はPHPで予め定義されている変数で、サーバの持つ様々な情報を保持している。配列になっているので$_SERVER['何らかのキー']として使う。
$_SERVER['HTTP_REFERER'] // リファラー $_SERVER['SCRIPT_NAME'] //自分のファイル名 $_SERVER['HTTP_USER_AGENT'] //ユーザが利用しているブラウザ情報 $_SERVER['REMOTE_ADDR']; //ユーザのIPアドレス $_SERVER['REMOTE_HOST']; //ユーザのホスト名
- 上記の情報を収集してデータベースに記録するには、テーブルに情報保存用のフィールドを追加する必要がある。そして、INSERT文で、収集したいサーバ変数を挿入する。
- 以下の例は、「簡単BBS」において、INSERT文で、リファラーを追加する例。事前に、phpMyAdminでテーブルdata02にリファラー保存用のフィールドrefererを作成しておく必要がある。
$sql = "INSERT INTO data02(date_time, namae, comment, referer) VALUES('$time00','$namae','$commen','$_SERVER['HTTP_REFERER']');
REMOTE_HOSTの値は取得できないように設定しているサーバも多い。その場合、gethostbyaddr()関数を使用する。この関数はIPアドレスからホスト名を取得する。
gethostbyaddr($_SERVER['REMOTE_ADDR']);
ユーザのIPアドレスを取得して、IPアドレスとhost名を取得する例。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>easy bbs</title>
<link href="./style00.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>簡単BBS03</h2>
<?php
// DBに接続
if(!$con=mysql_connect("localhost","アカウント名","パスワード")){
echo"接続失敗";
exit;
}
// DBを選択
if(!mysql_select_db("データベース名",$con)){
echo"データベース選択失敗";
exit;
}
// POSTデータ取得
$namae = $_POST["namae"];
$comment = $_POST["comment"];
$kword = $_POST["kword"];
$namae = htmlspecialchars($namae);
if (!get_magic_quotes_gpc()){
$namae = addslashes($namae);
}
$comment = htmlspecialchars($comment);
if (!get_magic_quotes_gpc()){
$comment = addslashes($comment);
}
$kword = htmlspecialchars($kword);
if (!get_magic_quotes_gpc()){
$kword = addslashes($kword);
}
$time00 = date("Y/m/d H:i:s");
// $hostn = $_SERVER['REMOTE_HOST'];
$ip = $_SERVER['REMOTE_ADDR'];
$hostn = gethostbyaddr($_SERVER["REMOTE_ADDR"])
;
// 削除するレコードがある場合、DELETE文を実行
$del_rec = $_POST["del_rec"];
if( $del_rec > 0 ){
$sql_d = "DELETE FROM data02 WHERE id = $del_rec ";
// SQLの表示。デバック用。運用時にはコメントアウトする。
echo "$sql_d <br>";
if(!$res=mysql_query($sql_d)){
echo "SQL DELETE失敗<BR>";
exit;
}
}
// POSTデータが存在するときINSERT文を作成、DB更新
if(!empty($namae) and !empty($comment))
{
$sql = "INSERT INTO data02( date_time, namae, comment, hostn, ip) ";
$sql .= "VALUES('$time00','$namae','$comment','$hostn','$ip');";
echo $sql;
// テーブルロック
$sql4lock = "LOCK TABLES data02 WRITE;";
$res4lock = mysql_query($sql4lock, $con) or die("<p>Table Lock Error[Insert data02]</p>");
if($res4lock)
{
$res = mysql_query($sql, $con) or die("<p>データ追加エラー</p>");
}
// テーブルアンロック
$sql4unlock = "UNLOCK TABLES;";
$res4unlock = mysql_query($sql4unlock, $con) or die("<p>Table unLock Error[Insert data02]</p>");
}
//データ入力フォーム
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<p>
名前:<input type="text" name="namae"><br>
書込み内容<br>
<textarea rows="5" cols="40" name="comment"></textarea>
<br>
検索キーワード:<input type="text" name="kword">
</p>
<input type="submit" name="exec1" value="送信">
<input type="reset" name="exec2" value="リセット">
</form>
<?php
// SQLのSELECT文作成
$sql = "SELECT * FROM data02 ";
$where = "WHERE comment LIKE '%$kword%' ";
$order = "ORDER BY date_time DESC";
$sql .= $where.$order;
// echo $sql;
// SELECT文実行
if(!$res=mysql_query($sql)){
echo "<p>SQL失敗</p>";
exit;
}
?>
<h2>検索表示</h2>
<table>
<?php while($row=mysql_fetch_array($res)){
$Nr = $row["id"];
?>
<tr><td><hr></td></tr>
<tr><td>
<!-- 削除するレコードを選択するFORM -->
<form method=post action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">
<input type=hidden name=del_rec value=<?php echo $Nr ?>>
<input type=submit name=submit value=Del></form>
<!-- FORM ここまで -->
<?php echo $row["namae"] ?> at <?php echo $row["date_time"] ?> from <?php echo gethostbyaddr($row["ip"]); ?> ip = <?php echo $row["ip"] ?>
</td></tr>
<tr><td><?php echo nl2br($row["comment"]) ?></td></tr>
</tr>
<?php } ?>
</table>
<?php
// 結果セットの解放
mysql_free_result($res);
// データベースから切断
mysql_close($con);
?>
</body>
</html>
[編集] 参考資料
[編集] 課題
PHP+MySQLを使用したWebデータベースシステムを作成して、以下の一覧から参照できるようにしてください。 例題をそのまま使うのではなく、各自でカスタマイズしてください。
各自のpublic_htmlの下のsysdという名前のフォルダの中に index.html を作り、課題のページをリンクしてください。
アカウントがi1224000の学生の場合、URLは以下の通りです。
http://blossom.media.t-kougei.ac.jp/~i1224000/sysd/index.html
- 文字コードは、utf-8にしてください。
<html> <body> ここは1224000のコーゲータローのシステムデザインの課題のページです。<br> <h4>システムデザイン課題</h4> <ul> <li><a href="update_table01.html">アンケートを取るページ</a></li> <li><a href="show_table01.php">アンケート結果を見る</a></li> <li><a href="easy_bbs01.php">簡単BBS</a></li> </ul> </body> </html>
以下の一覧から課題のページが参照できることを確認すること。
- 締め切りは、2013/6/25(火)です。
[編集] 2013年度
[編集] 2012年度
1024000 / 924003 / 924073 / 1024011 / 1024012 / 1024032 / 1024056 / 1024058 / 1024063 / 1024068 / 1024076 / 1124004 / 1124006 / 1124008 / 1124014 / 1124015 / 1124016 / 1124017 / 1124018 / 1124024 / 1124027 / 1124030 / 1124034 / 1124037 / 1124040 / 1124048 / 1124049 / 1124050 / 1124053 / 1124054 / 1124058 / 1124060 / 1124061 /
[編集] 2011年度
1024001 / 1024003 / 1024004 / 1024007 / 1024010 / 1024012 / 1024017 / 1024018 / 1024024 / 1024025 / 1024026 / 1024031 / 1024032 / 1024038 / 1024040 / 1024042 / 1024044 / 1024047 / 1024052 / 1024053 / 1024054 / 1024055 / 1024057 / 1024061 / 1024064 / 1024069 / 1024070 / 1024073 / 1024075 / 1024080 /
[編集] 2010年度
0624095 / 0724040 / 0724069 / 0724085 / 0724091 / 0724101 / 0824002 / 0824049 / 0824085 / 0824092 / 0924004 / 0924009 / 0924010 / 0924011 / 0924014 / 0924015 / 0924018 / 0924023 / 0924024 / 0924025 / 0924026 / 0924027 / 0924028 / 0924030 / 0924033 / 0924035 / 0924036 / 0924038 / 0924040 / 0924044 / 0924045 / 0924047 / 0924048 / 0924049 / 0924050 / 0924051 / 0924053 / 0924054 / 0924058 / 0924060 / 0924061 / 0924062 / 0924063 / 0924065 / 0924072 / 0924078 / 0924079 / 0924082 / 0924083 / 0924084 / 0924085 / 0924086 / 0924088 / 0924089 / 0924094 / 0924095 / 0924096 / 0924099 / 0924103 /
[編集] 2009年度
0824002 / 0824009 / 0824015 / 0824025 / 0824031 / 0824037 / 0824041 / 0824056 / 0824080 / 0824106 / 0824108 / 0824111 / 0724023 / 0724041 / 0724085 / 0624087 / 0624100 /
[編集] 2008年度
0424402 / 0524122 / 0724003 / 0724024 / 0724027 / 0724042 / 0724061 / 0724062 / 0724063 / 0724067 / 0724071 / 0724079 / 0724086 / 0724097 / 0824401 /
[編集] 過去のDB課題
[編集] 小テスト
- 場所はいつものPC演習室です。
- 持ち込みは不可です。
- 机の上には一切,何も置かないで下さい。
- 座席は隣は1つ空けて座ってください。
- 試験中に他のホームページを開くことは,不正行為と見なします。
--Kuha 2007年4月16日 (月) 21:39 (JST)
