セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

HTMLの属性値~idとnameの違い

//

id属性

これを書いた要素に対して、固有のidをつけることができるそうです。固有のものということで、同じ文書内で重複は許されていません。

使用例

//idなし form内にbuttonを記述することで関連付く
<form method="post" action="$_SERVER[PHP_SELF]">
...
<button type="submit" name="submit" value="send">送信ボタン</button>
</form>

//idあり form外からもform属性で指定したid属性値(今回はnameentry)を持つformと関連付く
<form method="post" action="$_SERVER[PHP_SELF]" id="nameentry">
...
</form>
..
..
<button type="submit" name="submit" value="send" form="nameentry">遠距離送信ボタン</button>

 

使い方としては、こんな感じでしょうか。。固有のものということなので、このように指定された要素を探し出し、指定することができるという感じですかね!

TAG<index>さんのサイトから引用させていただきますが、このid属性値の名前付けには多少の制約があります。

【ID名について】

IDを付ける際には、以下の点に注意してください。

1つのIDは、同じ文書内で1ヵ所にだけ使用できます。(重複させてはならない)
使用できる文字は、半角の英数字、ハイフン( - )、アンダーバー( _ )、コロン( : )、ピリオド( . )です。(ハイフン以外の記号は使わない方が無難です)
アルファベットで始めなければなりません。(数字や記号で始めてはならない)
大文字と小文字の区別があります。
IDをCSSセレクタとして使用する場合は、上記以外にも以下の点に注意してください。

CSSセレクタ名では、コロン( : )とピリオド( . )が使えなくなります。
アンダーバー( _ )をID名に含めると、一部の古いブラウザではIDが認識されなくなります。

 

 

name属性

name属性を使うことで、その要素に名前付けをすることができます。HTMLやPHPをあまり知らないので、formでの使用例しかわからない点をご了承くださいm(_ _)m

//入力フォーム
<form method="post" action="$_SERVER[PHP_SELF]">
<input type="text" name="city" size="30" maxlength="50" />
<input type="text" name="address" size="5" maxlength="2" />

<button type="submit" name="submit" value="send">Add Entry</button>
</form>

このフォームでcityのinputに"東京"、addressのinputには"渋谷区"と入力し、以下のようなPHPで受け取ったとします。

<?php
//$mysqliは事前に使用したmysqli_connectを保持。
if ($_POST) {
	$safe_city = mysqli_real_escape_string($mysqli, $_POST['city']);
	$safe_state = mysqli_real_escape_string($mysqli, $_POST['address']);
...
?>

突如SQL文を出してごめんなさい!現在勉強中なもので。。

初めのif文では$_POSTに値が入っているか確認しています。入っていないのに、中身を確認してもエラーになりますからね! そして、 $_POST['city']では"東京"、$_POST['address']では"渋谷区"を受け取ることができます。このように、POSTの中から取り出すものを指定する際に、nameは活躍できるんですね。

余談として、、


mysqli_real_escape_stringという関数について



これはPHPからMySQLにデータを登録するときに、MySQLで使用する特殊文字をエスケープする方法です。上の文のその後の処理としては、$POST['city']から受け取った"東京"を$safe_city変数に入れて、sql文で使用するという流れなのですが、そのままではSQLインジェクション攻撃に簡単に被害に遭います。てっとり早く言うと、mysqli_real_escape_stringという関数を経由すれば、少なくともmysqli_query関数で使用する場合は、チェックがいらなくなり、楽にかつ安全に使用できるよって感じです。