WebFormの作成
公開日: 2016年4月22日金曜日
WebFormの作成
isset と $_SERVER
isset関数は変数が存在するかどうかを判定する関数。 $_SERVER[SCRIPT_NAME]はサーバーに関するスーパーグローバル変数。たくさんある。[SCRIPT_NAME]は現在のスクリプトのパス。スクリプト自身のページを指定するのに大変便利。
<html>
<head>
<body>
<?php
if(isset($_GET["name"])){
echo "あなたは{$_GET["name"]}さん";
}else{
echo <<< EOS
<form action="$_SERVER[SCRIPT_NAME]" method="GET">
<input type="text" name="name">
<input type="submit" name="send">
</form>
EOS;
}
?>
</body>
</head>
</html>
消費税の計算をするプログラム
intvalで正数にして返している。上記と同じようにformを組んで、入力した値に×1.08している。
<?php
$form01 = isset($_GET["form01"]) ? intval($_GET["form01"]) : 0;
$answer = $form01 * 1.08;
//form▼▼▼▼▼▼▼
echo <<< EOF
<form action="$_SERVER[SCRIPT_NAME]" method="GET">
<input type="text" name="form01" value="$form_01">の消費税8%は
<input type="submit" value="計算">
$answer
円です。
</form>
EOF;
?>
GETとPOSTの違い
GETはURLに変化が起きてしまう。消費税の計算プログラムで[50]と入力したときURLはhttp://exsample.php?form01=50 になる。このGETをPOSTにした場合、URLは変更されない。 加えて、GETは入力数に制限がある。POSTならば、制限はないので長文を送ることに向いている。
$_SERVAERの各種変数
先に書いたように$_SERVERの変数はたくさんある。一部記載する。
| 要素 | 概要 |
|---|---|
| $_SERVER['QUERY_STRING']; | URLの「?」以降の文字列を取得 |
| $_SERVER['PATH_INFO'] | パスの最後「http://example.com/text/home/」だったら「home」が取得される |
| $_SERVER['SERVERNAME'] | ドメイン名を取得する |
| $_SERVER['DOCUMENT_ROOT'] | ドキュメントルートを取得する。 参考[http://stackstock.net/archives/1879/] |
| $_SERVER['REMOTE_ADDR'] | IPアドレス取得 |
| $_SERVER['REMOTE_HOST'] | ユーザーのホスト名取得 |
| $_SERVER['HTTP_REFERER'] | 現在のページの前に見ていたページを表示 |
| $_SERVER['HTTP_USER_AGENT']; | ブラウザ情報取得 |
| $_SERVER['PHP_SELF']; | ドキュメントルートから、現在実行中のファイル名を表す。 |
| $_SERVER['SCRIPT_NAME']; | パスとファイル名を表示 |
変数というだけに、print_rで連想配列が展開され、ブラウザ情報とかPHPとかApacheのバージョンなどがずらずら表示される。
<?php
print_r($_SERVER)."<br>";
?>
アンケート・フォームの例
array_key_existsは隠しフィールドにsubmit_checkが配列にあるか確認する関数。
<meta charset="utf-8">
<?php
if (array_key_exists("submit_check", $_POST)){
echo "<pre>";
print_r($_POST);
} else {
echo <<< EOF
<form action="$_SERVER[SCRIPT_NAME]" method="POST">
<h3>問一.好きな音楽は?</h3>
<input type="radio" name="music" value="kinshow"/>筋肉少女帯</br>
<input type="radio" name="music" value="zunow"/>頭脳警察</br>
<input type="radio" name="music" value="inu" />INU</br>
<h3>問二.好きな映画は?(複数可)</h3>
<input type="checkbox" name="movie[]" value="tuitou">追悼のざわめき</br>
<input type="checkbox" name="movie[]" value="kikei">恐怖奇形人間</br>
<input type="checkbox" name="movie[]" value="denen">田園に死す</br>
<h3>問三.あなたの属性は?</h3>
<select name="zokusei[]">
<option>ひかり</option>
<option>闇</option>
<option>じゃがいも</option>
</select>
<input type="hidden" name="submit_check" value="1" />
<input type="submit" value="send!">
</form>
EOF;
}
?>
簡単なフォームの処理
<?php
if(array_key_exists('name',$_POST)){ //POSTにnameがあるか確認する
namae_ari();//ある場合
}else{
namae_nashi();//ない場合
}
function namae_ari(){//ある場合
$name = $_POST["name"];
echo "你好 $name";
}
function namae_nashi(){//ない場合
echo <<< NAME_FORM
<form method="POST" action="$_SERVER[SCRIPT_NAME]"> <!--自分自身を観る-->
名前:<input type="text" name="name">
<input type="submit">
</form>
NAME_FORM;
}
URLエンコード クエリ情報
フォーム経由で受け渡しすると、URL末尾にいろいろ付随してくる。しかしURL末尾には空白や&%マルチバイト文字などは使用できない。だから予め読める形に変換しておく必要がある。これをデコードという。
<?php
if(isset($_GET["hoge"])){ //変数が存在したら
$hoge = $_GET["hoge"]; //$hogeに渡して
echo htmlspecialchars($hoge);//HTMLの能力を無効化する
echo urlencode($hoge);//URLをエンコードする
}
?>
<form method="GET">
<input type="text" name="hoge" >
<input type="submit" value="変換">
</form>
日付の検証(本のまま書いてある)
<?php
//送信された数を正数にする。
$year = intval($_POST["year"]);
$month = intval($_POST["month"]);
$day = intval($_POST["day"]);
//エポックタイムにへんかんする
$check_data = strtotime("$year-$month-$day");
$now = time();
$renge_sec = 60 * 60 * 24 * 10;
$renge_start = $now - $renge_sec;
$renge_end = $now + $renge_sec;
if($renge_start <= $check_data && $check_data <= $renge_end){
echo "meiwenti";
} else {
echo"日付が範囲外です";
}
?>
スポンサーリンク
スポンサーリンク
0 件のコメント :
コメントを投稿