|
ここではファームから送信されるデータの受け渡しを解説します。
POSTとGET
フォームの受け渡しにはPOSTメソッドとGETメソッドがあります。
基本的にフォームに入力して渡すにはPOSTを使います。
GETは1つのCGIを切り替えて使用するとき等にURLに追加して使われます。
これはフォームに入力された内容を送信する基本です。
入力された内容はPOSTを使って送信します。GETはCGIの動作を切り替えるときなどに利用します。
POSTメソッドは$_POST[$name]に格納されます。
GETメソッドは$_GET[$name]に格納されます。
POSTの使い方
<form method="post" action="form.php">
ここに送信したい内容を入れる
例: <input type="text"
name="name" > <input type="text"
name="moji" >
</form>
上記でnameに入力された文字列は$_POST["name"]で取りだすことができます。
mojiに入力された文字列は$_POST["moji"]で取りだすことができます。
GETの使い方
http://****.php?id=001&act=read
このようにURLで使われることがほとんどです。
URLに記述することによって、1つのCGIで複数の動作を切り替えることができます。
例えば、掲示板のページを切り替えたりするのに使われます。
上記の例ではidを取りだすには$_GET["id"] で取りだすことができます。この例では001という文字列が格納されていますね。
同じように $_GET["act"]にはreadという文字列が格納されています。
チェックボックス
チェックボックスで1つの名前($name)で複数のチェックボックスを管理するにはフォームタグの方でname=$name[]と指定する必要があります。
上記の方法では配列として格納されます。こうしないと、1つの値しか取得されません。
複数行のテキストボックス
複数行のテキストボックスを使用したときは改行はLFに統一させます。
統一しないと、異なるOSの改行を改行だと認識してくれません。
置き換えは、$value = str_replace(置き換える元,置き換えた後,$value);となります。
改行文字を置き換えるには、
$value=str_replace("\r\n","\n",$value);
$value=str_replace("\r","\n",$value);
これで、CRLF(Windowsの改行)とCR(Macの改行)がLF(Unixの改行)になります。
PHPが利用できるサーバーにはUnixが使われていますのでLFに変換するわけです。
同じ方法で、内部で使用する区切る文字も置き換えると良いでしょう。
例えば、区切り文字として[,(カンマ)]が 使われているのに、入力された文字列に[,(カンマ)]が混ざっていると、予期せぬ位置で区切られてしまい、正しく表示することができなくなってしまいます。
例:名前,性別,自己紹介
ABC,男,はじめまして
D,E,F,男,はじめまして
ABCさんは、名前がABCで性別は男だと分かりますが、D,E,Fさんは名前がDで性別がEとなってしまいます。このように途中で区切り文字が入力されて、そのまま書き込むと内容と区切りの判別がつかなくなってしまうのです。
入力されたファームデータを[,(カンマ)]で区切っているときは[,(全角)]や[,(ブラウザで直接表示されるアスキー文字)]にしてログに書き込まないと、位置関係がおかしくなります。
| form.php |
<?php
if(count($_POST)
> 0){//$_POSTで受け取ったら処理する
$name = $_POST["name"];
if(count
($_POST["groop1"]) > 0){$groop1
= join("/",$_POST["groop1"];}//配列を[/]で連結する
$mes = $_POST["message"];
$mes = str_replace("\r\n","\n",$mes);
$mes = str_replace("\r","\n",$mes);
$mes = str_replace("\n","<br>",$mes);
$mes = str_replace(',',',',$mes);
$line = $name,$groop1,$mes;
}
?> |
<html>
<head>
<title>フォームの受け渡し</title>
<meta http-equiv="Content-Type"
content="text/html; charset=SHIFT_JIS">
</head>
<body bgcolor="ffffff">
<form method="post" action="form.php">
名前: <input type="text" name="name"
><br>
複数チェックボックス:
<input type="checkbox" name="groop1[]"
value="1">
<input type="checkbox" name="groop1[]" value="2">
<input type="checkbox" name="groop1[]" value="3">
<br>
メッセージ:<textarea name="message"></textarea><br>
<input type="submit" name="submit"
value="送信">
</form>
<?php
print $line; ?>
</body>
</html> |
■サンプルはこちら
|