[PHP-users 35] Re: ( 再送配列を POST等で渡す時の引数について

php-users@php.gr.jp php-users@php.gr.jp
Wed, 13 Jun 2001 11:06:47 +0900


お世話様です。久保です。

> 実行環境   PHP Version 4.0.4pl1
> 
> <script language=PHP>
> if (isset($hoge) && is_array($hoge)){
>     foreach($hoge as $k => $v){
>         echo "hoge [ $k ] is $v 。添字の型= ".gettype($k)."<br>"; 
>     }
> }
> // 注:action では、自分自身を呼出しています。
> echo "<form action='./test_input.php' method=post>";
> echo "<input type=submit><br>";
> $r = (double)111222333444555.0;
> for($i=1; $i<=9; ++$i){
>     $t = sprintf("<input type=text 
>             name=\"hoge[%15.0lf]\"
>             value=\"%d\">", floor($r), $i*10);
>     echo $t;
>     echo htmlspecialchars($t);
>     echo "<br>";
>     $r = $r + 1.0;
> }
> echo "</form>";
> </script>

試してみましたが、上手く文字列として扱ってくれないようです。
結果は以下の様になりました。
-----------------SUBMIT 結果-----------------------------
hoge [ 2147483647 ] is 90 。添字の型= integer

<input type=text name="hoge[111222333444555]" value="10">
<input type=text name="hoge[111222333444556]" value="20">
<input type=text name="hoge[111222333444557]" value="30">
---------------------------------------------------------

php-3.0.18-i18n-ja-2 なので、foreach は使えず以下の様に
書き換えています。

-----------------------------------------------------------------
	if (isset($hoge) && is_array($hoge)){
>	    while(list($k,$v)=each($hoge)){
	        echo "hoge [ $k ] is $v 。添字の型= ".gettype($k)."<br>"; 
	    }
	}
	
	// 注:action では、自分自身を呼出しています。
	echo "<form action='./test.php' method=post>";
	echo "<input type=submit><br>";
	$r = (double)111222333444555.0;
	for($i=1; $i<=9; ++$i){
	    $t = sprintf("<input type=text name=\"hoge[%15.0lf]\" value=\"%d\">", floor($r), $i*10);
	    echo $t;
	    echo htmlspecialchars($t);
	    echo "<br>";
	    $r = $r + 1.0;
	}
	echo "</form>";
---------------------------------------------------------------

フォームの生成の部分を以下の様に変えても、添字は文字列には
なりますが、$hoge['111222333444555'] 等で参照する事は
出来ませんでした。当たり前な気がしますが・・・

----------------------------------------------------------------------------
	    $t = sprintf("<input type=text name=\"hoge[%f]\" value=\"%d\">",
$r, $i*10);
	    $t = sprintf("<input type=text name=\"hoge[(double)%15.0lf]\"
value=\"%d\">", floor($r), $i*10);
-----------------------------------------------------------------------------

結論としては php4 だと文字列として扱ってくれるという事でしょうか。
php4 に乗り換える良い機会なのかも知れません。
セキュリティーの問題もありますし。

--
久保
kenkubo@n-verde.co.jp