[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