0

次のような状況があります。

<select name="n">
    <option>Please fill</option>
    <option value="0">0</option>
    <option value="1">1</option>
</select>

今、私は Ajax でシリアル化されたフォームを渡します。コンソールの POST パネルにこれが正しく表示されます。

[...]&n=0&[...]

私のphp検証スクリプトは、フィールドが入力されているかどうか、およびセキュリティ上の理由から、それが数字であることの両方をチェックします。

parse_str($_REQUEST['data'], $values);
if (!ctype_digit($values['n'])) {
    array_push($err, 'n');
}

値 0 を渡している場合、このチェックが常に失敗する理由を誰かが説明できますか? 0以外の数字で他の選択オプションを渡すと、入りました... ctype_digitの代わりにis_numericも使用しようとしました(試してみました)が、同様に失敗します。しかし、これは意味がありません... 0 は数値と数字の両方であるためです!

UPDATE if i var_dump($values['n'])、それがnullであることがわかります...だから、に問題はありparse_str($_REQUEST['data'], $values)ますか?

4

1 に答える 1

3

0'0'(整数と文字列) の両方が考慮されますfalse。そう!$values['n']ですtruectype_digitうまく動作します。!isset($values['n'])の代わりにチェックしたいでしょう!$values['n']

于 2014-03-27T09:40:43.427 に答える