目次
今年度は,この項は授業中にはおこなわず,解説のみにする.
クライアントからの情報を受け入れ処理をする場合には,渡された情報にサー バを攻撃する悪意あるプログラムが仕込まれていないかどうかをチェックする 必要がある.どのような点をチェックすればよいかの学習は後に行う (すべてを授業中に扱うことは出来きないが).
それまでの措置として,各自の演習用ディレクトリを特定のホストからのみア クセスできるように制限しておくことにしよう.
public_htmlのアクセス制限したいディレクトリに".htaccess"というファイルをつくり、
php_flag display_errors On <Limit GET> order deny,allow deny from all allow from localhost allow from 172.23, 172.24 </Limit>のように許可するホストの制限を追記する.どのホストからのアクセスを許可する のがよいかは授業のときに話す.
Webブラウザ内に表示されたテキスト入力窓やチェックボックス,プルダウンメニュー,ボタンなどにより入力された情報をサーバが受け取り処理をするためのhtml文をformと呼び,
<form method="" action=""> <input type="" name="" value=""> ..... </form>
のような形式で書かれる.
http://www.xxx.yy?var1=val1&var2=val2のように?のあとに&で区切って「変数名=値」として送信するのと同じ効果を持つ.(このような形式での送信も行いたい場合に用いる.)
練習プログラム
<?php print_r($_POST); /* 「送信」ボタンにより入力されたデータが送られたときに,$_POST変数の内容を表示する (確認用)*/ ?> <form method="POST"> テキスト <input type="text" name="text_data" value="initial text"> <p> パスワード <input type="password" name="pw"> <p> セレクトボタン <select name="select_data"> <option value="menu1">メニュー1</option> <option value="menu2">メニュー2</option> <option value="menu3">メニュー3</option> <option value="menu4">メニュー4</option> </select> <p> ラジオボタン <input type="radio" name="button1" value="btn1_val1">ボタン1 <input type="radio" name="button1" value="btn1_val2">ボタン2 <input type="radio" name="button1" value="btn1_val3">ボタン3 <p> チェックボックス <input type="checkbox" name="chkbox[]" value="chkbox1">チェックボックス1 <input type="checkbox" name="chkbox[]" value="chkbox2">チェックボックス2 <input type="checkbox" name="chkbox[]" value="chkbox3">チェックボックス3 <p> <input type="submit" value="送信"> </form>
「送信」ボタンを押すと,form内のデータがサーバ側に送信され,同じプログラムが受け取り,処理されます.その結果が,ブラウザに表示される.formへの入力とprint_r($_POST)の出力を比べてみなさい.
【注】 form内のデータを別のプログラムに渡したいときは,
<form method="post" action="xxxxx.php"> (様々なformタグ) </form>
のようにaction属性をつけて,送信先のプログラム名を指定する.
課題3で作成したスクリプトに,地点IDや測定量を選択・限定して表示するフォームを付け加えたスクリプトを書きなさい.
課題には、各地点が複数行あるcsvデータの方が効果的なので、こちらのサンプルをダウンロードして利用してみよう。
[締切:12月02日]
課題5の解答を改良して,チェックボックスでの選択や,選択された項目を表示段階でも表示するようなプログラムを作成しなさい. [締切:12月07日]
測定項目を選んで表示するプログラムをつくってみなさい。
複数の値をとる場合は,上記の例のように, name="chkbox[]" と[]をつけた変数名とする.受け取ったPHPスクリプトでの変数 $_POST['chkbox']は配列 になり,
$_POST['chkbox'][0], $_POST['chkbox'][1], ...のような配列要素に値が入る.
$array[] = "aaaa";のようにキー(要素名)を空にして入力してもよい。
課題5cのプログラム解答例に説明を加えなさい. (解答の書き方は上のリンクにある.)