値の送受信
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>
↓出力結果
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>
↓打ち込んだ後、なんの項目打ってるかわかんなくなる
●よい例
<p>名前:
<input type="text" name="ng01" placeholder="例)田中 太郎">
</p>
★★★選択パーツ★★★
<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>
・<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>
↓出力結果
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形式の値を送信,取得
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
・フォームを使わずに値を送信したい場合