プロが教える店舗&オフィスのセキュリティ対策術

php----------------
(1)… $smarty->assign('post', '');
(2)… $smarty->assign('post', 1);
Smarty-------------
<option value="">指定しない</option>
{section name=m loop=24 start=0}
<option {if $post != '' && $post == $smarty.section.m.index}selected{/if}>
{$smarty.section.m.index}
</option>
{/section}

これは0時~23時までを選択できるプルダウンメニューで、$postにデータが入っている場合は$postに該当する物をセレクトしている状態にして表示させたいという目的です。デフォルトは「指定しない」にしたいです。

この場合(2)の時は正常に1時が選択されている状態になるのですが、(1)の時は0に反応してしまいます。PHPだとこれで大丈夫だと思うのですが、Smartyでは空の変数は0としてみなすのでしょうか?

A 回答 (1件)

>PHPだとこれで大丈夫だと思うのですが、Smartyでは空の変数は0としてみなすのでしょうか?



PHPでも、以下のようなIF文は成立します。
if ("" == 0) // trueになる
if ("aaa" == 0) // trueになる
これは文字列と整数を「==演算子」で比較すると、文字列が整数にキャストされた後に比較演算が行なわれるからです。

(1)… $smarty->assign('post', '');
のところを、
(1)… $smarty->assign('post', -1);
とかにすると期待通りに動作すると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!