Webプログラミングの基礎
PHPの基礎(6) ~POST
(2011/06/22)
政策情報学部
渡辺恭人
riho-m@cuc.ac.jp
メーリングリスト:riho-m-rg11@cuc.ac.jp:
資料ページ: http://www.cuc.ac.jp/~riho-m/rg11/
入力された文字を受け取りPOSTで
送信する部分(post.htm)
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>フォームデータの取得</title>
</head> <body>
<form method="POST" action="post.php"> 名前:
<input type="text" name="nam" size="15" /> <input type="submit" value="送信" />
</form> </body> </html>
入力された文字を受け取りPOSTで
送信する部分(post.htm)
• 入力された文字を受け取る部分(HTML)
– nam
• テキストボックス(<input>タグ)のnameオプションで指
定された要素名
• 表示する部分(PHPで記述)
– HTMLフォーム(<form method=“POST”>)で入力さ
れた文字をPHPで取得するには、 $_POST[ ’ 要素
名 ’ ]とする
– この$_POSTがスーパーグローバル変数
• オプションがGETなら、$_GETで取得
3
post.htmから送信されたデータを
受け取り表示する部分(post.php)
4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>フォームデータの取得</title> </head> <body> こんにちは、<?php print($_POST['nam']); ?>さん! </body> </html>
フォームデータの取得(複数値)
• チェックボックスを使う場合
– 好きな食べ物をクリックでチェックさせ選択させる
(複数回答可)
– 送信後、どれを選んだかを表示
• 入力して送信する部分
• 入力されたデータを受け取り表示する部分
5
入力して送信する部分
(post2.htm)
6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>
<head>
<title>フォームデータの取得(複数値対応)</title> </head>
<body>
<form method="POST" action="post2.php"> 好きな食べ物は?:
<input type="checkbox" name="food[ ]" value="りんご" />りんご <input type="checkbox" name="food[ ]" value="みかん" />みかん <input type="checkbox" name="food[ ]" value="メロン" />メロン <input type="submit" value="送信" />
</form> </body> </html>
入力されたデータを受け取り
表示する部分(post2.php)
7
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>フォームデータの取得(複数値対応)</title> </head> <body> あなたが好きな食べ物は、 <?php print(join($_POST["food"],"と")); ?> ですね。 </body> </html>
フォームデータの取得(複数値)
• 一つの要素が複数の値を持つ場合
– <input type=“checkbox” name=“food
[]
” ….
– [] によって、要素が複数の値を持つことをPHP側
が認識できる
• joinという関数で配列の要素を「と」で連結す
る
– 1番目の値のみを取得したい場合は、
• $_POST[”food”][0]と書く
8
ファイルの構成
• 2ファイル構成
– フォームで入力したデータをPOSTで送信する
HTML
– そのHTMLからPOSTで送信されたデータを受信す
るPHP
• 1ファイルでもできる
– 動作に注意
– 自分自身を呼び出すときは、
<form method="POST">
のように、action=は書かない。
9
おみくじプログラム
(前半: omikuji.php)
10
<?php
if (isset($_POST["start"])) {
$uranai_data[] = "大吉です。";
$uranai_data[] = "中吉です。";
$uranai_data[] = "吉です。";
$uranai_data[] = "末吉です。";
$uranai_data[] = "凶です。";
$max = count($uranai_data) - 1;
$result = rand(0, $max);
$message = "あなたの運勢は・・・" . $uranai_data[$result];
} else {
$message = "あなたの運勢をチェックしましょう。";
}
おみくじプログラム
(後半: omikuji.php)
11
<html> <head> <title>おみくじプログラム</title> </head> <body> <h2>今日のおみくじ</h2> <h4>「おみくじを引く」ボタンをクリックすると結果が表示されるよ。</h4> <form method="post"><textarea name="result" rows="5" cols="40"><?php print $message;?></textarea> <br>
<input type="submit" name="start" value="おみくじを引く"> </form>
</body> </html>
おみくじプログラム(解説)
• プログラムは上から順に実行される
• PHPの部分はフォームで入力したデータを受
け取る部分⇒先に実行されると困る
• したがって、フォームで入力したデータを受け
取ってないかどうかを判断する必要がある。
• Isset関数でPOST変数に変数がセットされてい
るかどうかをチェック
12
if (isset($_POST["start"])) {
おみくじプログラム(解説)
• おみくじの結果が格納された配列の個数を取
得
– 0から順に割り振られる
– 配列の最大番号は、個数-1になる
– これを$maxに代入
• rand関数で「0から最大数$max」までの値(0
~4)から一つをランダムで選択し、その値を
$result変数に格納する
13
$max = count($uranai_data) - 1;
おみくじプログラム(解説)
• ランダムで選ばれた値をおみくじ結果の配列
から取得して、message変数にメッセージを格
納する
14
$message = "あなたの運勢は・・・" . $uranai_data[$result];
課題
• おみくじのプログラムを参考にして、生まれた
年(西暦)を入力すると、干支を表示するプロ
グラムを作ってください。
• 以上、作ったプログラムと実行結果をWordに
まとめ、
メーリングリストに
提出してください。
• ファイル名 例: kadai-0622-学籍番号.doc
• 締切:
6/28
23:59
15
日本の干支(十二支)
16
0
子
ね
鼠
1
丑
うし
牛
2
寅
とら
虎
3
卯
う
兎
4
辰
たつ
竜
5
巳
み
蛇
6
午
うま
馬
7
未
ひつじ
羊
8
申
さる
猿
9
酉
とり
鶏
10
戌
いぬ
犬
11
亥
い
猪
ヒント
• 干支のデータは配列変数に順に代入して管
理する。
– 例、eto_data[0]=”ねずみ”
• 入力した西暦がどの干支かを判断するところ
がポイント
– 例、eto_data[0]の「ねずみ」年は2008年なので、
年に足すか引くかして12で割った余りが0になる
ようにする。
– 2008から4を引いた2004を12で割ると余りが0に
なるので、これを計算式にする(%を使う)
17
ヘッダー情報の取得
• サーバにアクセスしたクライアントの種類、対
応言語、リンク元のURLなどを表示する
–
http://www.studyinghttp.net/header
を参照
• $_POSTと似た変数の$_SERVERを使う
– スーパーグローバル変数という
• 書式
– $_SERVER[”ヘッダー名”]
18
ヘッダー情報の取得
(head.htm)
19
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>ヘッダ情報の取得</title> </head> <body> <a href="head.php">ここをクリック</a> </body> </html>
ヘッダー情報の取得
(head.php)
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>ヘッダ情報の取得</title> </head> <body> User-Agent -> <?php print($_SERVER["HTTP_USER_AGENT"]); ?><br /> Accept-Language -> <?php print($_SERVER["HTTP_ACCEPT_LANGUAGE"]); ?><br /> Referer -> <?php print($_SERVER["HTTP_REFERER"]); ?><br /> </body> </html>