Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Webプログラミングの基礎PHPの基礎(6)~POST
(2011/06/22)
政策情報学部
渡辺恭人
メーリングリスト:[email protected]:
資料ページ: 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;
$result = rand(0, $max);
おみくじプログラム(解説)
• ランダムで選ばれた値をおみくじ結果の配列から取得して、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>
文字化けについて
• Webアプリケーションでよく起きるトラブル
–データの入出力・メール送信などの個所で起きる
– Webブラウザ、Webサーバ、PHP、データベースサ
ーバなどの間で文字コードが正しく設定されていないときに起こりうる
• 文字化けの原因
–文字にはコードが多数ある(日本語にも数種類)
• 使う文字コードを統一するのも一つの方法
– PHPでどのように設定されているかを確認する
• Phpinfo()の表示のうち、mbstringカテゴリ21
文字コード
• JIS(ISO-2022JP)
– 電子メールでの日本語の文字コード
• SJIS(Shift JIS)
– WindowsやMS-DOS等で
普及した日本語の文字コード
• EUC( Extended UNIX Code)
– UNIXシステムで普及
• UTF-8
– コンピュータ上で多言語の文字を単一の文字コードで取り扱うために1980年代に提唱された
文字コードであるUnicodeの一つ
22
PHPでの設定方法
• 3つ
– php.iniを設定
• 一般ユーザにはできない
– .htaccessを設定
• 使えないレンタルサーバもある
– PHPのスクリプト内で設定
23
PHPスクリプトの中で設定する
24
<?php
mb_internal_encoding ("UTF-8");
mb_http_output("UTF-8");
ob_start("mb_output_handler");
header("Content-Type: text/html; charset=UTF-8");
print "日本語を出力する";
?>
EmEditorで保存するときに、文字コードをUTF-8に設定するのを忘れないように!(設定した文字コードと同じにする。)
.htaccessファイルで設定する
• .htaccessファイル
– WebサーバのApacheの設定やPHPの設定、ユーザの認証を設定する
– Windowsでは、ドット「.」で始まるファイル名はつく
れないので、ドットのないファイル名で作成し、www2に転送してから変更する
• 次の1行をhtaccessというファイル名で作成する
– WinSCPで転送して、ファイル名を .htaccessに変更25
php_value default_charset UTF-8
文字コードの確認
• 以下のプログラムを入力・保存し、WinSCPでwww2に転送してください
• Internet Explorerで実行する
• default_charsetの欄を見る
26
<?php
phpinfo();
?>