クロピグログ

職業訓練で学んだことまとめ

【PHP授業五日目】値の送受信

値の送受信

 

f:id:chromiumpig:20200908104636p:plain 

form要素

HTML

<form action="#" method="get">
  <p>ここにフォームパーツを作成</p>
</form>

・formタグがフォームパーツの大枠を担当するタグ

・action属性(必須):送信先ページのURLを指定

 PHPファイルでのURLを指定

・method属性(省略可):送信方法

 get:URLに値をつけて送信する方法

 post:見えない場所に値を置いて送信

 

fieldeset,legend要素

HTML

    <fieldset>
      <legend>グループ名</legend>
      ここにグループ内のフォームパーツを作成
    </fieldset>

↓出力結果

f:id:chromiumpig:20200908103104p:plain

 

input要素

4種類ある・・・入力、選択、ボタン、隠し

●基本的な書き方

<input type="text" name="test01">

・フォームパーツは基本的にすべてname属性つける

・name属性値が値送信時の名前になる

・name属性をつけないパーツはボタンくらい

 

★★★入力パーツ★★★

よく使う属性

value属性

<input type="text" name="text" value="初期値">

・入力欄にあらかじめ初期値が入力されている状態

 

●placeholder属性

<input type="text" name="text" placeholder="プレースホルダー">

入力欄の背景に入力例などのヒントが表示(ユーザが入力すると消える)

 

●required属性

<input type="text" name="test03" required>

・必須項目になる

 

●maxlength属性

<input type="text" name="test04" maxlength="5">

・入力可能な文字数を指定(上記の場合は5文字まで入力可能)

 

 

よくない使い方

●placeholder属性にパーツの名前を入れるのはNG

<p>
   <input type="text" name="ng01" placeholder="名前">
</p>

f:id:chromiumpig:20200908110621p:plain

↓打ち込んだ後、なんの項目打ってるかわかんなくなる

f:id:chromiumpig:20200908110633p:plain

●よい例

<p>名前:
   <input type="text" name="ng01" placeholder="例)田中 太郎">
</p>

f:id:chromiumpig:20200908110727p:plain 

 

★★★選択パーツ★★★

<label><input type="radio" name="group3" value="0" checked="checked"> G3項目1</label>
<label><input type="radio" name="group3" value="1"> G3項目2</label>
<label><input type="radio" name="group3" value="2"> G3項目3</label>

 

ラジオボタンは同グループのどれか一つの項目に指定してあればグループ全体に適応

よく使う属性

●checked属性

<input type="radio" name="group3" value="0" checked="checked">

・あらかじめ選択済みにしておく属性

・戻った時に維持するためにもつかう(プログラムと連動して)

 

●required属性

ラジオボタンの同グループ内が必須項目になる

チェックボックスに使用するときはグループ単位ではないので、利用規約同意の時などに使う

 

●練習問題

好きなグループから複数人選択するパーツ作成せよ

<p>
  <label><input type="checkbox" name="mugiwara" value="0">ルフィ</label>
  <label><input type="checkbox" name="mugiwara" value="1">ゾロ</label>
  <label><input type="checkbox" name="mugiwara" value="2">サンジ</label>
  <label><input type="checkbox" name="mugiwara" value="3">ナミ</label>
  <label><input type="checkbox" name="mugiwara" value="4">ウソップ</label>
  <label><input type="checkbox" name="mugiwara" value="5">チョッパー</label><br>
  <label><input type="checkbox" name="mugiwara" value="6">ロビン</label>
  <label><input type="checkbox" name="mugiwara" value="7">フランキー</label>
  <label><input type="checkbox" name="mugiwara" value="8">ブルック</label>
  <label><input type="checkbox" name="mugiwara" value="9">ジンベエ</label>
</p>

f:id:chromiumpig:20200908121120p:plain

・<label> タグで囲むことで文字を選択してもクリックできる挙動になる

 

★★★ボタンパーツ★★★

 ・三種類ある

<dt>type="submit"</dt>
<dd><input type="submit" value="送信"></dd>
<dt>type="reset"</dt>
<dd><input type="reset" value="リセット"></dd>
<dt>type="button"</dt>
<dd><input type="button" value="ただのボタン"></dd>

↓出力結果

f:id:chromiumpig:20200908121154p:plain

value属性

・初期値  送信する値

・ボタン内文字  送信する値

 

★★★隠しパーツ★★★

<p>隠しパーツ:<input type="hidden" name="secret" value="隠しパーツ"></p>

・使うとき調べる

 

テキストエリア

<div>
 <textarea name="textarea1" cols="30" rows="10"></textarea>
</div>

 

●記述すべき属性:name属性(値の名前), rows属性(行数), cols属性(列数・幅)

・name:送信する値の名前

・rows:行数指定(CSSのheightで変えれる)

・cols:横幅指定(CSSのwidthで変えれる)

 

セレクトボックス

●selectタグ:セレクトボックス枠

記述すべき属性:name属性(値の名前)

    <select name="selectbox">
      <option value="">選択してください</option>
      <option value="1">選択項目1</option>
      <option value="2">選択項目2</option>
      <option value="3">選択項目3</option>
      <option value="4">選択項目4</option>
      <option value="5">選択項目5</option>
    </select>

・未選択を表す項目のvalue属性値が""(空文字)を指定する

 

●optionタグ:選択項目

・記述すべき属性:value属性(送信する値)

・任意属性:selected属性(初期選択項目)

    <select name="selectbox" required>
      <option value="">選択してください</option>
      <option value="1">選択項目1</option>
      <option value="2">選択項目2</option>
      <option value="3" selected="selected">選択項目3</option>
      <option value="4">選択項目4</option>
      <option value="5">選択項目5</option>
    </select>

 

GET形式の値を送信,取得

f:id:chromiumpig:20200908153338p:plain

  echo '<h2>1回目の出力</h2>';
  echo '<pre>';
  var_dump($_GET);
  echo '</pre>';

  echo '<h2>2回目の出力</h2>';
  echo $_GET['gender'];
  $genderList = [
    1 => '男性',
    2 => '女性',
  ];
  $genderNum = $_GET['gender'];
  echo $genderList[$genderNum];

  echo '<h2>3回目の出力</h2>';
 
  if (isset($_GET['gender'])) {
    値が届いている時の処理
    echo $_GET['gender'];
  } else {
    値が届いていない時の処理
    echo '性別を選択していません';
  }

・条件:issetを使って「$_GET['gender']」が定義されているか(値が届いているか)確認

・定義されている(値が届いている)時:true

・定義されていない(値が届いていない)時:false

 

●問題1

受け取った年齢を表示

選択してない時「選択してない」

選択してる時「10代~50代以上」

HTML

    <h2>年齢は?</h2>
    <select name="age">
      <option value="" selected>選択してください</option>
      <option value="1">10代</option>
      <option value="2">20代</option>
      <option value="3">30代</option>
      <option value="4">40代</option>
      <option value="5">50代以上</option>
    </select>

PHP

  if ($_GET['age'] !== "") {
    値が届いている時の処理
    $ageList = [
      1 => '10代',
      2 => '20代',
      3 => '30代',
      4 => '40代',
      5 => '50代以上',
    ];
    $ageNum = $_GET['age'];
    echo $ageList[$ageNum];
  } else {
    値が届いていない時の処理
    echo '年齢を選択していません';
  }

PHP別解(現場で使われないのでよくないかも)

echo '<h2>別解</h2>';
  $ageList2 = [
    "" => '年齢を選択していません',
    1 => '10代',
    2 => '20代',
    3 => '30代',
    4 => '40代',
    5 => '50代以上',
  ];
  $ageNum2 = $_GET['age'];
  echo $ageList2[$ageNum2];

 

●問題2

名前入力欄作成

未入力時「未入力です」

入力時がユーザ入力値表示

※送信側HTMLにも修正入れる

HTML

<h2>名前は?</h2>
<p>
  <input type="text" name="myName" placeholder="例)田中 太郎">
</p>

PHP

  if (isset($_GET['myName'])) {
    名前が届いていた時の処理
    if ($_GET['myName'] !== "") {
      入力されている時の処理
      echo $_GET['myName'];
    } else {
      //入力されていない時の処理
      echo '名前が未入力です';
    }
  } else {
    名前が届いていない時の処理
    echo '値が届いていません';
  }

 

 

●ユーザが送ってくる値は信用しない

・届くであろう処理も「isset」かけてOK

1.値が届かない:issetで確認

2.数値の場合はデータ型:ctype_digitで確認

3.数値の場合は範囲:比較演算子「<」「>」

4.文字列の場合は文字数の上限値:mb_strlenで確認

5.正規表現を使ったパターンチェック

 

●問題3

性別「女性」年齢「40代」名前「田中」をリンクで表示

HTML

<p>
  <a href="01-2_get_confirm.php?gender=2&age=4&myName=田中">
    女性40代田中</a>
</p>

・GETはURLの後に?から始まる

・クエリ文字列を付与して値を送信

■ 使用例1

・URLに値があるので値ごと誰かとURLを共有したい場合に使用する
・主に検索サイトの結果を共有するときなど

■ 使用例2
・フォームを使わずに値を送信したい場合

f:id:chromiumpig:20200909102516p:plain