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"日付が範囲外です";
}
?>
スポンサーリンク
スポンサーリンク
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿