Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【PHP】選択形式のデータを送信する

こんにちは😊Kintarouです。

現在エンジニア転職を目指してプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人にとって働く事が楽しくなるシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今回参考にさせて頂いたサイト様🙇‍♂️ dotinstall.com


今回は選択形式のform部品を使った場合のデータ送信をまとめます。

select

select形式で選択した項目を送信します。
送信するパラメーターはvalue属性となります。

■index.php

#head部分などは省略します。

<form action="result.php" method="get">

#送るパラメーターをcolorという名前にしておきます。
  <select name="color">
    <option value="orange">Orange</option>
    <option value="pink">Pink</option>
    <option value="gold">Gold</option>
  </select>
  <button>SEND</button>
</form>

仮にOrangeを選択してSENDとしたとします。
f:id:ryosuke-toyama:20201102210113p:plain

■result.php

<?php

function h ($str)
{
 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}


$color = filter_input(INPUT_GET, 'color');


#同階層にhead部分をまとめた_header.phpがあるとします。
include('_header.php');

?>


<p><?= h($color); ?></p>

f:id:ryosuke-toyama:20201102210423p:plain
value属性で指定したorangeが出力されます。

select multiple , checkbox

select形式にmultiple属性を追加するなどして、一つのname属性に複数のデータを送る場合です。
name属性を配列形式にして、受け取るfilter_input()関数にフラグをつけましょう。

■index.php

#head部分などは省略します。

<form action="result.php" method="get">

#パラメーターを複数送れるようにcolors[]配列形式にしておきます。
  <select name="colors[]" multiple>
    <option value="orange">Orange</option>
    <option value="pink">Pink</option>
    <option value="gold">Gold</option>
  </select>
  <button>SEND</button>
</form>

OrangeとPinkを複数選択してSENDとしたとします。
f:id:ryosuke-toyama:20201103224916p:plain

■result.php

<?php

function h ($str)
{
 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}


#複数形式のデータを受け取れるように、FILTER_DEFAULT, FILTER_REQUIRE_ARRAYフラグを追加します。
$colors = filter_input(INPUT_GET, 'colors', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

#colors配列が空でない場合に、implode関数で配列を文字列に変換して$colorsに再代入します。
$colors = empty($colors) ? 'No Color' : implode(',', $colors);

include('_header.php');

?>


<p><?= h($colors); ?></p>

複数選択したvalueがカンマ区切りの文字列となって出力されます。
f:id:ryosuke-toyama:20201103225536p:plain

省略しますが、checkbox形式も複数選択可能で、方法は上記と同様です。

radio

ラジオボタン(radio)形式の場合です。
こちらは単数選択なのでselect形式で一緒ですが、未選択の場合はNullが入るのでそこの処理を紹介します。

■index.php

#head部分などは省略します。
<form action="result.php" method="get">
  
    #単数colorに戻してラジオボタンを作成します。
    <label><input type="radio" name="color" value="orange">Orange</label>
    <label><input type="radio" name="color" value="pink">Pink</label>
    <label><input type="radio" name="color" value="gold">Gold</label>
  <button>Send</botton>
</form>

ラジオボタンでOrangeを選択してSENDします。
f:id:ryosuke-toyama:20201104115921p:plain

■result.php

<?php

function h ($str)
{
 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

$color = filter_input(INPUT_GET, 'color');

#isset()関数でNullでないかどうかの真偽値を三項演算子で分岐させます。
$color = isset($color) ? $color : 'No Color';

include('../app/_parts/_header.php');

?>

<p><?= h($color); ?></p>

orangeが出力されます。
f:id:ryosuke-toyama:20201104120145p:plain

Null合体演算子

isset()関数を用いた上記の例ですが、Null合体演算子を用いて簡単に記述する事も出来ます。

例) isset()を用いた三項演算子

$color = isset($color) ? $color : 'No Color';

例) Null合体演算子

$color = $color ?? 'No Color';

式が短いのでfilter_inputの行と同じ行に記載した場合を書いておきます。

$color = filter_input(INPUT_GET, 'color') ?? 'No Color';

GETで送られたcolorという名前のパラメーターを変数$colorに代入。Nullの場合は'No Color'を代入。という式になります。

以上、どなたかの参考になれば幸いです😊