クライアントとサーバとの文字列の受け渡し

目次

前準備: とりあえずのセキュリティ対策
formの書式とサーバでの扱い
課題5
課題5a
課題5c
ヒント
課題5d

前準備: とりあえずのセキュリティ対策

今年度は,この項は授業中にはおこなわず,解説のみにする.

クライアントからの情報を受け入れ処理をする場合には,渡された情報にサー バを攻撃する悪意あるプログラムが仕込まれていないかどうかをチェックする 必要がある.どのような点をチェックすればよいかの学習は後に行う (すべてを授業中に扱うことは出来きないが).

それまでの措置として,各自の演習用ディレクトリを特定のホストからのみア クセスできるように制限しておくことにしよう.

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>
のように許可するホストの制限を追記する.どのホストからのアクセスを許可する のがよいかは授業のときに話す.

formの書式とサーバでの扱い

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属性をつけて,送信先のプログラム名を指定する.

課題5

課題3で作成したスクリプトに,地点IDや測定量を選択・限定して表示するフォームを付け加えたスクリプトを書きなさい.

課題には、各地点が複数行あるcsvデータの方が効果的なので、こちらのサンプルをダウンロードして利用してみよう。

[締切:12月02日]

実行例
http://cosmos.js.yamanashi.ac.jp/~toyoki/lectures/bwp/progs09/prac5.php

課題5a

課題5の解答を改良して,チェックボックスでの選択や,選択された項目を表示段階でも表示するようなプログラムを作成しなさい. [締切:12月07日]

チェックボックスとボタンによる選択の動作確認用
http://cosmos.js.yamanashi.ac.jp/~toyoki/lectures/bwp/progs/forms_prac3var.php
選択された項目を表示段階でも保持するようにした例
http://cosmos.js.yamanashi.ac.jp/~toyoki/lectures/bwp/progs/forms_prac3var2.php

課題5c

測定項目を選んで表示するプログラムをつくってみなさい。

selectタグで選ぶ例

checkboxで選ぶ例

ヒント
$_POST['chkbox'][0], $_POST['chkbox'][1], ...
のような配列要素に値が入る.
$array[] = "aaaa";
のようにキー(要素名)を空にして入力してもよい。

課題5d

課題5cのプログラム解答例に説明を加えなさい. (解答の書き方は上のリンクにある.)