1.
フォームã‹ã‚‰ã€ã‚‚ã—ãã¯URLã‹ã‚‰å€¤ã‚’渡ã™å ´åˆã«ã¯ã©ã†ã„ã£ãŸã‚¨ãƒ³ã‚³ãƒ¼
ド/デコードãŒå¿…è¦ãªã®ã§ã™ã‹ï¼Ÿ
エンコードãŒé‡è¦ã«ãªã‚‹å ´é¢ã¯ã„ãã¤ã‹ã‚りã¾ã™ã€‚
string $dataã¨ã„ã†ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れ
ã¦ã„ãªã„æ–‡å—列データを渡ã™å ´åˆã«ã¤ã„ã¦è€ƒãˆã¦ã¿ã‚‹ã¨ï¼š
HTMLを通ã˜ã¦æ¸¡ã™å ´åˆï¼š æ–‡å—列ã«ã¯ã©ã®ã‚ˆã†ãªå€¤ãŒå«ã¾ã‚Œã‚‹ã‹åˆ†ã‹
らãªã„ã®ã§ã€ãƒ‡ãƒ¼ã‚¿ã¯å¿…ãšhtmlspecialcharsを行ã„ã€
ダブルクオートã§å›²ã¾ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
URLを通ã˜ã¦æ¸¡ã™å ´åˆ: URLã¯ã„ãã¤ã‹ã®ãƒ‘ーツã‹ã‚‰æˆã‚Šç«‹ã¡ã¾ã™ã€‚
ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’ãã®ãƒ‘ーツã®ã†ã¡ã®ä¸€ã¤ã§ã‚ã‚‹ã¨è§£é‡ˆã•ã›ãŸã„ãªã‚‰ã°ã€
urlencode()ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã—ãªã‘れ
ã°ãªã‚Šã¾ã›ã‚“。
例 51-1HTMLã®hiddenè¦ç´ <?php
echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n";
?> |
|
注æ„
$dataã‚’urlencode()ã‚’ã—ã¦
ã¯ã„ã‘ã¾ã›ã‚“。ãªãœãªã‚‰ã€ãã®ä½œæ¥ã¯ãƒ–ラウザã«ä»»ã•れã¦ã„ã‚‹ã‹ã‚‰ã§
ã™ã€‚ä¸€èˆ¬ã«æ™®åŠã—ã¦ã„ã‚‹å…¨ã¦ã®ãƒ–ãƒ©ã‚¦ã‚¶ã¯æ£ã—ãã“ã®å‡¦ç†ã‚’行ã£ã¦ã
れã¾ã™ã€‚ãŸã ã€ã“ã®å‡¦ç†ã¯ãƒ¡ã‚½ãƒƒãƒ‰(GETã‚„POST)ãŒä½•ã§ã‚ã‚‹ã‹ã«ã‹ã‹
ã‚らãšã«è¡Œã‚れるã€ã¨ã„ã†ã“ã¨ã«æ°—ã‚’ã¤ã‘ã¦ãã ã•ã„。ã“ã®å‡¦ç†ã«æ°—
ã¥ãã®ã¯GETリクエストã®ã¨ãã ã‘ã«ãªã‚‹ã§ã—ょã†ã€‚ãªãœãªã‚‰POSTリ
クエストã®å†…容ã¯é€šå¸¸ç›®ã«è§¦ã‚Œã‚‹ã“ã¨ã¯ç„¡ã„ã‹ã‚‰ã§ã™ã€‚
例 51-2ユーザã«ã‚ˆã£ã¦ç·¨é›†ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ <?php
echo "<textarea name=mydata>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?> |
|
注æ„
ブラウザã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れãŸã‚·ãƒ³ãƒœãƒ«ã‚’解釈ã™ã‚‹ã®ã§ã€dataã¯æ„図ã—
ãŸã¨ãŠã‚Šã«è¡¨ç¤ºã•れã¾ã™ã€‚
フォームã®å†…容をé€ä¿¡ã™ã‚‹ã¨ãã€GETã‹POSTã‹ã«ã‹ã‹ã‚らãšdataã¯ãƒ–
ラウザã«ã‚ˆã£ã¦URLエンコードã•れã€PHPã«ã‚ˆã£ã¦URLデコードã•れã¾
ã™ã€‚è¦ã¯ã€URLエンコード/デコードを自分ã§è¡Œã†å¿…è¦ã¯ãªãã€ã“れら
ã®å‡¦ç†ã¯å…¨ã¦è‡ªå‹•çš„ã«è¡Œã‚れるã€ã¨è¨€ã†ã“ã¨ã§ã™ã€‚
例 51-3URLä¸ã®å ´åˆ <?php
echo "<a href=\"" . htmlspecialchars("/nexpage.php?stage=23&data=" .
urlencode($data)) . "\">\n";
?> |
|
注æ„
ã“ã®ä¾‹ã§ã¯ã€å®Ÿã¯GETリクエストを摸擬ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãŸã‚ã€data
を手動ã§urlencode()ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
注æ„
å…¨ã¦ã®URLã‚’htmlspecialchars()ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ãªãœãªã‚‰ã€ã“ã®URLã¯HTMLã®value属性ã¨ã—ã¦æ‰±ã‚れるã‹ã‚‰ã§ã™ã€‚ã“ã®
å ´åˆã¯ã€ãƒ–ラウザã¯ã¾ãšhtmlspecialchars()ã•れãŸãƒ‡ãƒ¼
ã‚¿ã‚’å…ƒã«æˆ»ã—ã€ãれã‹ã‚‰URLを渡ã—ã¾ã™ã€‚URLã¯
urlencode()ã•れã¦ã„ã‚‹ã®ã§ã€PHPã¯ã“れをæ£ã—
ã解釈ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
URLä¸ã®&ãŒ&
ã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã‚‹ã“ã¨ã«æ°—ã¥ãã§ã—ょã†ã€‚ã‚‚ã—ã‚ãªãŸãŒã“れを忘
れã¦ã‚‚ã€ã»ã¨ã‚“ã©ã®ãƒ–ラウザã¯å…ƒã«æˆ»ã—ã¦ãれã¾ã™ãŒã€å¿…ãšãã†ã—ã¦
ãれるã¨ã¯é™ã‚Šã¾ã›ã‚“ã®ã§ã€URLãŒå‹•çš„ã«å¤‰æ›´ã•れるもã®ã§ãªãã¦ã‚‚
URLã¯htmlspecialchars()ã•れるã¹ã
ã§ã™ã€‚
2.
<input type="image">タグを使ãŠã†ã¨ã—ã¦ã„ã‚‹ã®ã§ã™ãŒã€å¤‰æ•°
$foo.xã¨$foo.yãŒä½¿ãˆã¾ã›ã‚“。ã©ã†ã™ã‚Œã°ã‚ˆã„ã®ã§ã™ã‹ï¼Ÿ
以下ã®ã‚ˆã†ãªã‚¿ã‚°ã‚’使ãˆã°ã€æ¨™æº–ã®ãƒœã‚¿ãƒ³ã®ä»£ã‚りã«ç”»åƒã‚’使用ã—ã¦
フォームをé€ä¿¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼š
<input type="image" src="image.gif" name="foo"> |
ユーザãŒç”»åƒã®ã©ã“ã‹ã‚’クリックã™ã‚‹ã¨ã€ãã®ãƒ•ォームã®å†…容ã«foo.x
ã¨foo.yã¨ã„ã†2ã¤ã®å¤‰æ•°ãŒè¿½åŠ ã•れã€ã‚µãƒ¼ãƒã«é€ä¿¡ã•れã¾ã™ã€‚
PHPã§ã¯$foo.xã¨$foo.yã¨ã„ã†åå‰ã¯å¤‰æ•°åã¨ã—ã¦æ£ã—ããªã„ã®ã§ã€è‡ª
å‹•çš„ã«$foo_xã¨$foo_yã¨ã„ã†åå‰ã«å¤‰æ›ã•れã¾ã™ã€‚è¦ã¯ã€ãƒ”リオドãŒã‚¢
ンダースコアã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã€ã¨è¨€ã†ã“ã¨ã§ã™ã€‚
3. HTMLフォームã§é…列を使用ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ
フォームã®å†…容をPHPスクリプトã§é…列ã¨ã—ã¦å—ã‘å–ã‚‹ã«ã¯ã€
<input>, <select> or <textarea>ã¨ã„ã£ãŸè¦ç´ ã®nameを以
下ã®ã‚ˆã†ã«æŒ‡å®šã—ã¾ã™ï¼š
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]"> |
変数åã®æœ€å¾Œã«ã‚ã‚‹ãƒ–ãƒ©ã‚±ãƒƒãƒˆã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れã«ã‚ˆã‚Šã€ãƒ•ォー
ムã®å†…容ãŒé…列ã¨ã—ã¦æ‰±ã‚れã¾ã™ã€‚ç•°ãªã‚‹è¦ç´ ã«åŒã˜åå‰ã‚’ã¤ã‘ã‚‹ã“ã¨
ã§è¦ç´ ã‚’é…列ã«ã‚°ãƒ«ãƒ¼ãƒ—分ã‘ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyOtherArray[]">
<input name="MyOtherArray[]"> |
上記ã®HTMLã®å ´åˆã€MyArrayã¨MyOtherArrayã¨ã„ã†2ã¤ã®é…列ãŒç”Ÿæˆã•れã€
PHPスクリプトã«é€ä¿¡ã•れã¾ã™ã€‚ã¾ãŸã€é…列ã«ç‰¹å®šã®ã‚ーをè¨å®šã™ã‚‹ã“
ã¨ã‚‚ã§ãã¾ã™ã€‚
<input name="AnotherArray[]">
<input name="AnotherArray[]">
<input name="AnotherArray[email]">
<input name="AnotherArray[phone]"> |
ã“ã®å ´åˆã€é…列AnotherArrayã®ã‚ーã¯0, 1, emailãã—ã¦phoneã¨ãªã‚Šã¾ã™ã€‚
注æ„
HTMLã«é…列ã®ã‚ーを指定ã™ã‚‹ã‹ã©ã†ã‹ã¯è‡ªç”±ã§ã™ã€‚ã‚ーを指定ã—ãªã‹ã£
ãŸå ´åˆã¯ãƒ•ォームã«ç¾ã‚Œã‚‹é †ç•ªã«ç•ªå·ãŒã¤ã‘られã¾ã™ã€‚最åˆã®ä¾‹ã ã¨ã€
ã‚ーã¯0, 1, 2, 3ã¨ãªã‚Šã¾ã™ã€‚
é…列関数ã¨
PHPã®å¤–部ã‹ã‚‰æ¥ã‚‹å¤‰æ•°
ã‚‚å‚ç…§ã—ã¦ä¸‹ã•ã„。
4.
"select multiple"ã‚¿ã‚°ã§é¸æŠžã•れãŸå…¨ã¦ã®çµæžœã‚’å–å¾—ã™ã‚‹ã«ã¯ã©ã†ã™
れã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ
"select multiple"タグを使ã†ã¨ã€ãƒ¦ãƒ¼ã‚¶ã¯ãƒªã‚¹ãƒˆã‹ã‚‰è¤‡æ•°ã®é …目をé¸
択ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚é¸æŠžã•れãŸé …ç›®ã¯ãƒ•ォームã®
actionã§æŒ‡å®šã•れãŸãƒãƒ³ãƒ‰ãƒ©ã«æ¸¡ã•れã¾ã™ã€‚å•題ã¯ã€ã“れらã®å€¤ãŒå…¨ã¦
åŒã˜åå‰ã§æ¸¡ã•れるã“ã¨ã§ã™ã€‚ã¤ã¾ã‚Šã€
<select name="var" multiple> |
é¸æŠžã•れãŸãれãžã‚Œã®é …ç›®ã¯actionã®ãƒãƒ³ãƒ‰ãƒ©ã«æ¬¡ã®ã‚ˆã†ã«æ¸¡ã•れã¾ã™ï¼š
var=option1
var=option2
var=option3 |
ãれãžã‚Œã®é …ç›®ã¯å‰ã®å¤‰æ•°
$varã®å€¤ã‚’上書ãã—ã¦
ã—ã¾ã„ã¾ã™ã€‚ã“ã®å•題を解決ã™ã‚‹ã«ã¯ã€PHPã®"フォームã®å€¤ã‚’é…列ã«ã™
ã‚‹"機能を使ã„ã¾ã™ã€‚以下ã®ã‚ˆã†ã«ã™ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ã€‚
<select name="var[]" multiple> |
ã“ã†ã™ã‚Œã°PHPã«
$varã‚’é…列ã¨ã—ã¦æ‰±ã†ã‚ˆã†ã«çŸ¥ã‚‰
ã›ã‚‹ã“ã¨ãŒã§ãã€å„é …ç›®ã®valueã®å€¤ã¯é…列ã®è¦ç´ ã¨ã—ã¦var[]ã«è¿½åŠ ã•
れã¾ã™ã€‚最åˆã®é …ç›®ã¯
$var[0]ã«ãªã‚Šã€æ¬¡ã®é …ç›®ã¯
$var[1]...ã¨ã„ã†ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
count()関数を使ãˆã°é¸æŠžã•れãŸé …ç›®ã®æ•°ã‚’知るã“
ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã‚‚ã—å¿…è¦ãªã‚‰
sort()関数を使ã£
ã¦ã‚½ãƒ¼ãƒˆã‚’行ã†ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
JavaScriptを使ã£ã¦ã„ã‚‹å ´åˆã€ãƒ•ォームè¦ç´ ã«è¦ç´ åを使ã£ã¦(訳注:
document.myform.myelement.valueç‰ã®æ§˜ã«)アクセスã—よã†ã¨ã™ã‚‹ã¨ã€
è¦ç´ åã«å«ã¾ã‚Œã‚‹[]ãŒå•題ã¨ãªã‚‹ã“ã¨ãŒã‚ã‚‹ã®ã§
æ°—ã‚’ã¤ã‘ã¦ãã ã•ã„。ã“ã®å ´åˆã¯ã€æ•°å—ã§è¡¨ã•れるフォームè¦ç´ ã®IDã‚’
使用ã™ã‚‹ã‹ã€ã‚·ãƒ³ã‚°ãƒ«ã‚¯ã‚ªãƒ¼ãƒˆã§è¦ç´ åを囲んã§ãƒ•ォームè¦ç´ ã®é…列ã®
インデックスã¨ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ä¸‹ã•ã„。例ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ï¼š
variable = documents.forms[0].elements['var[]']; |