PHP 値の送信と受け取りをしてみる+少しcookie

## はじめに
PHPといえば値の入力フォームに入力した値を送信し、別で受け取ります。勉強していることのまとめなので完璧ではありません。参考程度にお願いします。

## 値の送信
```php
//Post.php

<form action="get.php" method="get"> //get.phpに送信
  <input type="text" name="message">　//messageという名前でテキストを送信
  <button>Send</button> 
</form>
```
method="get"はurlの後に値を付与します。
method="post"はurlから見えません。


## 値の受け取り
値の受信にも色々ありそうですが今回は以下のやり方でやります。多分別は$_GETを使うものです。
```php
//Get.php
<?php
$message = filter_input(INPUT_GET, 'message'); //getメソッドで送られたmessage
?>
```
フォームから送信された値の取得にはfilter_inputを使います。filter_inputにはフィルター機能も付いているのでその機能を使ってメアドじゃないものは弾くなどフィルターがけも可能です。

## 改行がある文章
改行がある文章を受信して表示させると改行が消えてる場合があります。
```php
//Post.php

<form action="get.php" method="get"> //get.phpに送信
  <textarea name="message"></textarea>//messageという名前でテキストを送信
  <button>Send</button> 
</form>
```
「こんにちは
あけましたおめでとうございます」と送信します

表示させます
```php
//Get.php
<?php

$message = filter_input(INPUT_GET, 'message'); //getメソッドで送られたmessage
?>

<p><?= h($message); ?></p>
```
```
こんにちは あけましたおめでとうございます
```
改行して送信したにもかかわらず改行がなくなっています。
なので改行が無くならないように対策します。使う関数はnl2brです。
```php
//Get.php
<?php

$message = filter_input(INPUT_GET, 'message'); //getメソッドで送られたmessage
?>

<p><?= nl2br(h($message)); ?></p>
```
また、「こんにちは
あけましたおめでとうございます」と送信します
```
こんにちは
あけましておめでとうございます
```
ばっちりですね〜

## セレクトボックスを使っていく
値の入力だけじゃなくて値を選択するセレクトボックスを使います
```php
//Post.php

<form action="get.php" method="get">
  <select name = "color">
    <option value = "red">赤</option>
    <option value = "blue">青</option>
    <option value = "green" selected>緑</option>
  </select>
  <button>Send</button>
</form>
```
なんとなく理解できたでしょうか、ちなみに緑のところのようにselectedを使用するとデフォルトでその値が選択されるようになります。
```php
//Get.php
<?php
$color = $_GET["color"];
echo $color; 
var_dump($color);
>
```
filter_inputを使わずに$_GETを使ってみます。
```
string(5) "green"
Notice: Undefined variable: recieverd in get.php on line 8
```
上記のようにエラーが出ます。var_dumpで見る限り受け取りはできているようなのですが、なぜできないか解りません
あとで見返した時他の原因を探らないように自分用に残しておきます(なぜできないかしっかり書けるのが理想なのですが...

## 複数の値を受け取る
リストを使って複数の値を送信します。
```php
//Post

<form action="result.php" method="get"> 
  <label><input type="checkbox" name="colors[]" value="red">red</label>
  <label><input type="checkbox" name="colors[]" value="blue">blue</label>
  <label><input type="checkbox" name="colors[]" value="green">green</label>
  <button>Send</button>
</form>
```
```php
//Get.php

<?php
$colors = filter_input(INPUT_GET, 'colors', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

echo $colors[0]; //echoで配列は出力できない、するならprint_r()
?>
```

## 受け取った値が空だったら空と表示してみよう
前回同様値を受け取ります。
```php
//Post

<form action="result.php" method="get"> 
  <input type="text" name="message">
  <button>Send</button>
</form>
```
値が空か確認していきましょう。
```php
//Get.php

<?php
$message = filter_input(INPUT_GET, 'message');

$ms = isset($message) ? $message : '空です'
?>
```
よくあるコードですね。issetで値が入っている(true)なら$messageを$msに代入、空(false)なら'空です'を代入です。
ですが、このコードもう少し簡単に書けます。
```php
//Get.php

<?php
$message = filter_input(INPUT_GET, 'message');

$ms = $message ?? $message : '空です'
?>
```
スッキリしたコードになりましたね。

## 受信した値をcookieに格納
受信した値をクッキーに格納していきます。setcookieというものを使います
```php
$message = filter_input(INPUT_GET, 'message');

$ms = $message ?? $message : '空です'

setcookie('ms', $ms);
?>
```
cookieから値を取得するにはfilter_input(INPUT_COOKIE)を使います。
```php
//Post.php

$ms = filter_input(INPUT_COOKIE, 'ms') ?? '空です';
```

## 終わりに
簡単に書きました。またしっかり学んだら更新しようと思います。