[PHP-users 12930] Re: テキストボックスに値が入りません。
Mashiki
php-users@php.gr.jp
Sat, 01 Feb 2003 17:16:47 +0900
Mashikiです。
おお、なるほど。なぜわかったのかわからず2日ほど悩んでメールした
のですが、元発言をCut&Pasteしたソースだと思ったところが敗因でした。
経験と推理からからの、あてずっぽうということですか。
とりあえず、判断した根拠がわかってすっきりのはずだったんですが、
事件はあらたな局面に
>きしだです
>
>> これ、何でわかるんですか?
>> >> <input type="text" name="Year01" size="5" maxlength="5"
>> >> value="<? echo $Acc_Y; ?>">年
>> >$が全角になってるとか。
>
>推理の過程としては
>・PHPはちゃんと動いている
>・$Acc_Y自体には値が入っている
>・「echo」は出力されていないのでPHPのスクリプトとして解釈されている
> →<?は全角ではない
>・$Acc_Yが変数として解釈されていない
> →$が全角
>となります。
ここで、$が全角だとphp的には「定数」に解釈されるってことは
ないっすか?
最後のこの部分、
>・$Acc_Yが変数として解釈されていない
> →$が全角
・$Acc_Yが変数として期待している値を持っていない
→ 「$」以外の「A」「c」「c」「_」「Y」「;」のいずれかが全角
てな帰結もあるような気がする。
# ほんとに$だったんだろうか?
# でも元発言者も$を直してOKだったって言ってるし... 謎。
自分のよくやる全角がらみの失敗は、
echo "氏名: $LastName $FirstName\n";
のような場面で、変数の間を全角ブランクを入れてしまうようなことが
ありますね。
echo "氏名: {$LastName} {$FirstName}\n";
と書いておけば間違いはないと思っていても、すっきりした?書き方が
好きなので、ちょくちょくやってしまいます。
最も、開発機は必ずerror_reportingを「E_ALL」にしているので
自分としては発見が遅れて問題になることはありません。
元発言者と初心者の方へ提案ですが、少なくとも開発中はphp.iniの
error_reportingをE_ALLにしておきましょう。環境を変更する権限を
持っていない方でも全てのスクリプトの頭に
ini_set('error_reporting','2047');
をつけるなどして、全てのワーニングを確認できるようにすれば、つま
らないことで悩んだり、MLで恥をかくことを劇的に減らせると思います。
たとえば以下のスクリプトの場合、
------------
<pre>
<?php
ini_set('error_reporting','2047');
$a = $b;
echo a;
echo $a;
?>
------------
実行すると
Notice: Undefined variable: b in
/var/www9/html/test/test.php on line 4
Notice: Use of undefined constant a - assumed 'a' in
/var/www9/html/test/test.php on line 5
a
Notice: Use of undefined constant $a - assumed '$a'in
/var/www9/html/test/test.php on line 6
$a
となり、
・値の設定されていない変数 $bを使用した
・定義されていない定数「a」を使用した
・定義されていない定数「$a」($が全角)を使用した
ことがphpによって指摘されます。
>でも、結局は、最近Javaを教えてて「"」が全角になってるために起きるコンパ
>イルエラーなどを頻繁に見てるから、類推できたのだと思います。
>「字づら」があってるときには全角、という標語が心にあるわけです。
Javaに限らず、日本語の入った文字列の終わりのクォートは全角をやって
しまいそうですね。