HOMEデジタルカメラ・写真集・写真素材集PC講座・インターネット活用PCゲームPHPによるCGI美容ショッピングこのサイトについて
PHPの小枝:フォームの受け渡し

■PHPの小枝
PHPの使い方
フォームの受け渡し
SJISの不具合
画像アップローダー
Cookieの読み書き
├ ファイル操作
ランダム処理
配列Arrayの扱い方
参考文献

■掲示板


mail@管理人

 

 

 ここではファームから送信されるデータの受け渡しを解説します。

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となってしまいます。このように途中で区切り文字が入力されて、そのまま書き込むと内容と区切りの判別がつかなくなってしまうのです。

 入力されたファームデータを[,(カンマ)]で区切っているときは[,(全角)]や[&#44;(ブラウザで直接表示されるアスキー文字)]にしてログに書き込まないと、位置関係がおかしくなります。

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","&lt;br&gt;",$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>
 ■サンプルはこちら

 

 

アンケート

評価 役に立った
自分には関係なかった
分かりにくかった
役に立たなかった
感想 (省略可)
名前 (省略可)