11.フォームからのデータを受け取る方法
 1)フォームからサーバにデータを送信する方法
   ①フォームの書き方
     フォームタグに「action」、「method」属性を追加します。
     「action」属性は、フォームからのデータを渡すサーバのプロクラム名を指定します。
     「method」属性は、フォームからデータを送信するときの形式を指定します。
     フォームから送信されるデータは、「URLエンコード形式」のデータで送信されます。そのフォーマットは、以下のようになります。

      変数名=値&変数名=値&変数名=値&・・・・・・・・・・・

    のようになっています。
     変数名は、フォーム内のエレメントの「name」属性に指定した文字列が変数名になります。
     値は、「value」属性で指定した値になります。省略した場合は、そのエレメントに入力した値になります。
     このデータは、単純な文字列として送信されますが、送信形式には、「POST」と「GET」があります。
     「POST」は、URLとは別のファイルとして送信されます。長い文字列を送信するときに向いています。
     「GET」は、URLの後ろに文字列として追加されて送信されます。重要な情報を送信するときは、この方法は避けるようにします。
     「GET」の場合は、以下のように送信されます。

      http://www.manabukun.net?変数名=値&変数名=値&変数名=値&・・・・・・・・・・・

     フォームタグは、以下のように書きます。

      <form method="POST" action="test.php"> ← 送信形式が「POST」で「test.php」にデータを渡すように指定しています。
      <input type="text" name="abc"> ← value属性がないので、テキストフィールドに入力された値が送信されます。
      <input type="radio" name="xyz" value="男">男 ← ここにチェックが入れば、「xyz=男」として送信されます。
      <input type="radio" name="xyz" value="女">女 ← ここにチェックが入れば、「xyz=女」として送信されます。
      <input type="submit" name="sub" value="送信"> ← フォームを送信するボタンでクリックすると送信されます。「sub=送信」が送信されます。
      <input type="reset" name="rst" value="クリア"> ← このボタンは、フォームのデータをクリアするものでサーバには、送信されません。
      </form>

 2)フォームのデータを受け取る方法
   フォームから送信されてきたデータは、PHP側では、以下のように連想配列に格納されます。
  ①GETメソッドで送信されてきた場合
    フォームのエレメントで「name="abc"」であればその値は、

     $_GET['abc'] に格納されています。

  ②POSTメソッドで送信されてきた場合
    フォームのエレメントで「name="xyz"」であればその値は、

     $_POST['xyz'] に格納されています。

 3)テキストフィールドのデータを受け取る方法
   テキストフィールドは、何も入力せずにデータを送信した場合は、「ヌル」が送信されます。
   サーバ側では、このヌルをチェックすることで未入力のチェックができます。

  ファイル名:textForm.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>テキストフィールドのデータの送信</title>
</head>
<body>
<form name="form1" method="post" action="textForm.php">
テキストフィールドの送信:<input type="text" name="fText">
<input type="submit" name="Submit" value="送信">
</form>
</body>
</html>
  ファイル名:textForm.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>テキストフィールドのデータの受信</title>
</head>
<body>
<?php
if($_POST['fText']==NULL){
echo "テキストフィールドに何も入力されていません。\n";
}
else{
echo "テキストフィールドに{$_POST['fText']}が入力されました。\n";
}
?>
</body>
</html>
 4)ラジオボタンのデータを受け取る方法
   ラジオボタンは、name属性を同じ文字列にすると同じグループになります。name属性に異なる文字列を付けると違うグループになります。
   同じグループ内ですべてのラジオボタンを無チェックで送信すると、変数そのものもが送信されないため、サーバ側では、変数($_POST['fRadio'])が
  存在しません。したがって、サーバ側で $_POST['fRadio']を使おうとしてもその変数が存在しないためエラーになります。
   そこで、isset()関数(変数がセットされているかどうかを調べる関数)を使ってその変数が存在するかを調べます。
   isset()関数は、変数が存在する場合は、「TRUE」、存在しない場合は、「FALSE」を返します。

   ファイル名:radioForm.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ラジオボタンのデータの送信</title>
</head>
<body>
<form name="form1" method="post" action="radioForm.php">
ラジオボタンの送信:
<input type="radio" name="fRadio" value="男">男
<input type="radio" name="fRadio" value="女">女
<input type="submit" name="submit" value="送信">
</form>
</body>
</html>
   ファイル名:radioForm.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ラジオボタンのデータの受信</title>
</head>
<body>
<?php
if(isset($_POST['fRadio'])==false){
echo "ラジオボタンが選択されていません。\n";
}
else{
echo ラジオボタン"{$_POST['fRadio']}が選択されました。\n";
}
?>
</body>
</html>
  5)チェックボックスのデータを受け取る方法(チェックボックスの数が少ない場合)
    チェックボックスを無チェックで送信すると、変数そのものもが送信されないため、サーバ側では、変数($_POST['fCheck1']、$_POST['fCheck2'])が
   存在しません。したがって、サーバ側で $_POST['fCheck1']、$_POST['fCheck2']を使おうとしてもその変数が存在しないためエラーになります。
    そこで、isset()関数(変数がセットされているかどうかを調べる関数)を使ってその変数が存在するかを調べます。
    isset()関数は、変数が存在する場合は、「TRUE」、存在しない場合は、「FALSE」を返します。

   ファイル名:checkForm.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チェックボックスのデータの送信</title>
</head>
<body>
<form name="form1" method="post" action="checkForm.php">
チェックボックスの送信:
<input name="fCheck1" type="checkbox" value="男">男
<input name="fCheck2" type="checkbox" value="女">女
<input type="submit" name="Submit" value="送信">
</form>
</body>
</html>
  ファイル名:checkForm.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チェックボックスのデータの受信</title>
</head>
<body>
<?php
if(isset($_POST['fCheck1'])) $sCheck1=$_POST['fCheck1']; else $sCheck1="";
if(isset($_POST['fCheck2'])) $sCheck2=$_POST['fCheck2']; else $sCheck2="";
if($sCheck1=="男" && $sCheck2==""){
echo "あなたは、{$sCheck1}ですね。\n";
}
if($sCheck1=="" && $sCheck2=="女"){
echo "あなたは、{$sCheck2}ですね。\n";
}
if($sCheck1=="男" && $sCheck2=="女"){
echo "あなたは、????ですね。\n";
}
if($sCheck1=="" && $sCheck2==""){
echo "チェックされていません。\n";
}
?>
</body>
</html>
  6)メニューボックスのデータを受け取る方法
     メニューボックスは、メニューボックスが表示されたときに表示されている項目が自動的に送信されます。このままでは、ユーザがその項目を本当に選択したかどうかを判断
   することができないので、以下のようにデフォルトで明確に「"":ヌル」を送信するようにしています。サーバ側では、「ヌル」かどうかを調べることで、ユーザが選択したかしていないかを
   調べるようにしています。

   ファイル名:menuForm.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>メニューボックスのデータの送信</title>
</head>
<body>
<form name="form1" method="post" action="menuForm.php"> メニューボックスのデータ送信
<select name="fSelect">
<option value="">選択してください</option>
<option value="大阪府">大阪府</option>
<option value="京都府">京都府</option>
<option value="滋賀県">滋賀県</option>
<option value="奈良県">奈良県</option>
<option value="和歌山県">和歌山県</option>
<option value="兵庫県">兵庫県</option>
</select>
<input type="submit" name="button" value="送信">
</form>
</body>
</html>
   ファイル名:menuForm.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>メニューボックスのデータを受け取る</title>
</head>
<body>
<?php
if($_POST['fSelect']!=NULL){ //ヌルは、「NULL」、「null」、「""」でOKです。 echo "メニューボックスの{$_POST['fSelect']}が選択されました。\n";
} else{ echo "メニューボックスの項目が選択されていません。\n"; ?>
</body>
</html>
 7)リストボックスのデータを受け取る方法
   メニューボックスと違って、最初は何も選択されていません。そのまま選択せずにで送信すると、変数そのものも送信されないため、
  サーバ側で変数の検出ができません。したがって、サーバ側でforeach($_POST["fSelect"] as $chk)を実行しても「fSelect=???」の文字列が
  送信されてこないため$_POST['fSelect']の中の「fSelect」が未定義のためエラーになります。そこで、isset()関数(変数がセットされているか
  どうかを検査する関数)を使って検査を行います。
   isset()関数は、変数が未設定の場合は、FALSE、設定済みの場合は、TRUEを返します。
   リストボックスは、複数の選択ができます。(「Shitf」キー+「クリック」または、「Ctrl」キー+クリックで複数選択できます。)
   しかし、いくつ選択するかは、わかりません。このようなときは、フォームデータを送信するときに配列で受け取るように指定する必要が
  あります。
   以下のプログラムで

    <select name="fSelect[]" size="3" multiple="multiple">

  の部分でname="fSelect[]"のfSelectの後ろに「[]」を付けて配列で受け取れるように指定します。
   この場合、PHP側では、

    $_POST['fSelect'][0] ~$_POST['fSelect'][?]

  までの選択された数分の連想配列の2次元配列が用意されます。

  ①とりあえず連想配列の2次元配列で受け取ってみます。
   ファイル名:listForm.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>リストボックスのデータの送信</title>
</head>
<body>
<form name="form1" method="post" action="listForm.php">
リストボックスのデータの送信
<select name="fSelect[]" size="3" multiple="multiple">
<option value="大阪府">大阪府</option>
<option value="京都府">京都府</option>
<option value="滋賀県">滋賀県</option>
<option value="奈良県">奈良県</option>
<option value="和歌山県">和歌山県</option>
<option value="兵庫県">兵庫県</option>
</select>
<input type="submit" name="button" value="送信">
</form>
</body>
</html>
   ファイル名:listForm.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>リストボックスのデータを連想配列の2次元配列で受け取る</title>
</head>
<body>
<?php
if(isset($_POST["fSelect"])){
echo $_POST["fSelect"][0]."<br>\n";
echo $_POST["fSelect"][1];
}
else{
echo "選択されていません。";
}
?>
</body>
</html>
この方法では、選択が2つまでしか処理できない。
  ②for()を使って選択され項目をすべて処理できるようにします。
    count()関数は、配列の長さやファイルの行数を返す関数です。
    たとえば、$a[0]~$a[9]まで配列があるとすれば、
     count($a)の戻り値は、「10」になります。
    また、2次元配列の$a[0][0]~$a[0][9]まで配列があるとすれば、
     count($a[0])の戻り値は、「10」になります。

    count()の引数には、配列のポインタ(場所)を指定していることに注意してください。

    上記のPHPのプログラムを変更します。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>リストボックスのデータを受け取る(for())</title>
</head>
<body>
<?php
if(isset($_POST["fSelect"])){
//echo $_POST["fSelect"][0];
//echo $_POST["fSelect"][1];
for($i=0;$i<count($_POST["fSelect"]);$i++){
echo $_POST["fSelect"][$i]."<br>\n";
}

}
else{
echo "選択されていません。";
}
?>
</body>
</html>
  ③foreach()を使って選択され項目をすべて処理できるようにします。
    foreach()は、自動的に配列の長さを調べて自動的にすべてのデータを取り出すことができます。
    <foreach()の形式>
     foreach(配列ポインタ as 変数名){
       取り出したデータの処理
     }

     変数名は、配列で指定してもかまいません。配列に取り込むと後で配列のデータを取り出して使用することができます。
     配列で指定する場合は、「$a[]」として配列変数を指定します。

     foreach(配列ポインタ as $key => 変数名){
       echo $key. ":" .変数名."<br>\n";
       $abc[$key]=変数名;
     }

     そのまま、キーとその値を処理することもできますが、「$key」をキーとした連想配列に変数の値を代入することもできます。

    上記のPHPのプログラムを変更します。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>リストボックスのデータを受け取る(foreach())</title>
</head>
<body>
<?php
if(isset($_POST["fSelect"])){
//echo $_POST["fSelect"][0];
// echo $_POST["fSelect"][1];
//for($i=0;$i<count($_POST["fSelect"]);$i++){
//echo $_POST["fSelect"][$i]."<br>\n";
//}
foreach($_POST["fSelect"] as $chk){
echo $chk."<br>";
}

}
else{
echo "選択されていません。";
}
?>
</body>
</html>

 8)テキストエリアのデータを受け取る方法
   テキストエリアもテキストフィールドと同じで、何も入力せずにデータを送信した場合は、「ヌル」が送信されます。
   サーバ側では、このヌルをチェックすることで未入力のチェックができます。

   「textarea」タグの属性の「wrap」は、以下の機能を持ちます。
   wrap=”soft” → キーボードの改行コードのみ送信します。
   wrap=”hard” → 自動改行の位置に改行コードを挿入し、キーボードの改行コードとともに送信します。
   wrap=”off” → すべての改行コードを送信しません。

   ファイル名: textareaForm.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>複数行のテキストを送信する</title>
</head>
<body>
複数行のテキストを送信する。<br>
<form name="form1" method="post" action="textareaForm.php">
<textarea name="textarea" cols="30" rows="5" wrap="soft"></textarea>
<input type="submit" name="Submit" value="送信">
<input type="reset" name="Submit2" value="リセット">
</form>
</body>
</html>
   ファイル名: textareaForm.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>複数行のデータを受け取る</title>
</head>
<body>
複数行のデータを受け取る。<br>
<?php
if($_POST["textarea"]!=NULL){
$text=$_POST["textarea"];
echo nl2br($text); //nl2br()関数は、改行コードを<br />に変換します。
}
else{
echo "テキストエリアに何も入力されていません。";
}
?>
</body>
</html>
   上記プログラムのnl2br()関数は 、テキストの改行コードをHTML言語の「<br />」に変換しています。

 9)チェックボックスのデータを受け取る方法(チェックボックスの数が大い場合)
  ①foreachを使って変数に代入する方法
   ファイル名:checkbox01.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チェックボックスのデータを送信する</title>
</head>
<body>
チェックボックスのデータを送信する。<br>
<form name="form1" method="post" action="checkbox01.php">
<input type="checkbox" name="checkbox[]" value="鈴木">あみ
<input type="checkbox" name="checkbox[]" value="浜崎">あゆみ
<input type="checkbox" name="checkbox[]" value="倖田">來未
<input type="checkbox" name="checkbox[]" value="安倍">なつみ
<input type="submit" name="Submit" value="送信">
<input type="reset" name="Submit2" value="リセット">
</form>
</body>
</html>
   ファイル名:checkbox01.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チェックボックスのデータを受け取る。</title>
</head>
<body>
チェックボックスのデータを受け取る。<br>
<?php
if(isset($_POST['checkbox'])){
foreach($_POST['checkbox'] as $chk){
echo $chk."<br>\n";
}
}
else{
echo "チェックされていません。";
}
?>
</body>
</html>
  ②foreachを使って配列変数に代入する方法
   ファイル名:checkbox02.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チェックボックスのデータを送信する</title>
</head>
<body>
チェックボックスのデータを送信する。<br>
<form name="form1" method="post" action="checkbox02.php">
<input type="checkbox" name="checkbox[]" value="鈴木">あみ
<input type="checkbox" name="checkbox[]" value="浜崎">あゆみ
<input type="checkbox" name="checkbox[]" value="倖田">來未
<input type="checkbox" name="checkbox[]" value="安倍">なつみ
<input type="submit" name="Submit" value="送信">
<input type="reset" name="Submit2" value="リセット">
</form>
</body>
</html>
   ファイル名:checkbox02.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チェックボックスのデータを受け取る。</title>
</head>
<body>
チェックボックスのデータを受け取る。<br>
<?php
if(isset($_POST['checkbox'])){
$i=0;
foreach($_POST['checkbox'] as $chk[]){
echo $chk[$i]."<br>\n";
$i++;
}
}
else{
echo "チェックされていません。";
}
?>
</body>
</html>