PHPでフォームからデータ送る


基本的なことですが、今までは送ることはやったことがありましたが、
受け取って処理することをしたことがありませんでした。

##フォームからデータを送ってみて、取得してみる
```
<?php
  $name = '';

  if($_SERVER['REQUEST_METHOD'] === 'POST'){

    $name = $_POST['name'];
    $isDarvish = false;
    if($name === 'ダルビッシュ'){
      $isDarvish = true;
    }
  }
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <form action="" method="POST">
    <input type="text" name="name" placeholder="ダルビッシュと入力してください" value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>">
    <input type="submit" value="submit">
    <?php
      if ($isDarvish) {
       echo "私はダルビッシュです";
      } else{
       echo "私はダルビッシュではありません"; 
      }
    ?>
  </form>
</body>
</html>

```

POSTしたデータは、$_POST変数に入ります。
``$_POST``と``$_SERVER``はスーパーグローバルという、かっこいい名前の変数です。

###スーパーグローバル

[PHP マニュアル](http://php.net/manual/ja/language.variables.superglobals.php)
>PHP の定義済み変数の中には "スーパーグローバル" というものがあります。 これは、スクリプト全体を通してすべてのスコープで使用可能な変数のことです。 関数やメソッドの内部からアクセスする際にも global $variable; などとする必要はありません。


|変数|意味|
|---|---|
|$_GLOBALS|グローバルスコープで使用可能なすべての変数への参照|
|$_SERVER|サーバー情報および実行時の環境情報|
|$_POST| HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列|
|$_GET| URL パラメータで現在のスクリプトに渡された変数の連想配列|
|$_FILES| HTTP POST メソッドで現在のスクリプトにアップロードされた項目の連想配列|
|$_COOKIE|現在のスクリプトに HTTP クッキーから渡された変数の連想配列|
|$_SESSION|現在のスクリプトで使用できるセッション変数を含む連想配列|
|$_REQUEST|$_GET、$_POST、$_COOKIEの内容をまとめた連想配列|
|$_ENV|環境変数として現在のスクリプトに渡された変数の連想配列|

###特殊文字をエスケープする
ユーザーから入力されたデータは、エスケープ処理をいれなければいけません。
``htmlspecialchars``を使うことで、特殊文字をHTMLエンティティに変換することができます。

```
htmlspecialchars( string 文字列 [, int 変換スタイル [, string 文字コード ]] ) 
```

##別ファイルにデータを送信
特に違うところは無いのですが、formの``action``属性に連携先のファイルを指定します。

```lang:index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <form action="view.php" method="POST">
    <input type="text" name="name" placeholder="ダルビッシュと入力してください">
    <input type="submit" value="submit">
  </form>
</body>
</html>
```

```lang:view.php
<?php
  $name = '';
  if($_SERVER['REQUEST_METHOD'] === 'POST'){
    $name = $_POST['name'];
  }
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Check username</title>
</head>
<body>
  <?php echo($name) ?>
</body>
</html>

```

##テキストエリアのデータを送信

``nl2br``を使用して、改行コードを``<br>``タグに置き換えます。

```lang:index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <form action="view.php" method="POST">
    <textarea type="text" name="textarea" placeholder="textarea" cols="30" rows="5"></textarea>
    <input type="submit" value="submit">
  </form>
</body>
</html>
```

```lang:view.php
<?php
  $name = '';
  if($_SERVER['REQUEST_METHOD'] === 'POST'){
    $textarea = nl2br($_POST['textarea']);
  }
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test/title>
</head>
<body>
  <?php echo($textarea) ?>
</body>
</html>
```

##押されたボタンのデータを送る

```lang:index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Check username</title>
</head>
<body>
  <form action="view.php" method="POST">
    <input type="submit" value="戻る" name="back">
    <input type="submit" value="確認" name="confirm">
  </form>
</body>
</html>
```


```lang:view.php
<?php
if(isset($_POST['confirm'])){
  $str = '確認ボタンが押されました';
}else{
  $str = '戻るボタンが押されました';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <div><?php echo($str) ?></div>
</body>
</html>
```

##チェックボックスのデータを取得

```lang:index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Check username</title>
</head>
<body>
  <form action="view.php" method="POST">
    <input type="checkbox" value="0" name="checkbox[]">
    <input type="checkbox" value="1" name="checkbox[]">
    <input type="checkbox" value="2" name="checkbox[]">

    <input type="submit" value="submit" name="submit">
  </form>
</body>
</html>
```

```lang:view.php
<?php
  $str = implode('_',$_POST['checkbox']);//_で連結
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <div><?php echo($str) ?></div> //0_1_2
</body>
</html>
```

##ラジオボタンのデータを取得
```lang:index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Check username</title>
</head>
<body>
  <form action="view.php" method="POST">
    <input type="radio" value="0" name="radio">
    <input type="radio" value="1" name="radio">
    <input type="radio" value="2" name="radio">

    <input type="submit" value="submit" name="submit">
  </form>
</body>
</html>
```

```lang:view.php
<?php
  $str = $_POST['radio'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <div><?php echo($str) ?></div>
</body>
</html>
```

##セレクトボックスのデータ取得
```lang:index.php

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Check username</title>
</head>
<body>
  <form action="view.php" method="POST">
    <select name="number">
      <option value="0">0</option>
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
    </select>
    <input type="submit" value="submit" name="submit">
  </form>
</body>
</html>
```

```lang:view.php
<?php
  $str = $_POST['number'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body>
  <div><?php echo($str) ?></div>
</body>
</html>
```

##おわり
送ったデータの受け取り方がわかりました。