1

$_POST を介して送信されるすべてのデータは文字列だと[思いますか?] したがって、ユーザーに整数を入力してもらいたい場合 (私の例では、あるボックスでは時間、別のボックスでは分をユーザーに尋ねています。2.5 時間と 22 分と言うのは意味がありません)、どうすればよいでしょうか?私はそれを検証しますか?

私はすでにこれである解決策を持っています:

if(!filter_input(INPUT_POST, 'hours', FILTER_VALIDATE_INT)) {}

これを行う他の/より良い方法はありますか?

$_POST データは文字列であるため、is_numeric/is_int は失敗します。値をキャストすると、データが失われたり、独自の問題が発生したりする可能性があります。

4

3 に答える 3

0

検証ライブラリを使用する必要があります。Respect\Validationを使用したサンプル:

<?php

use Respect\Validation\Validator as v;

$isFormValid = v::key('hours', v::int()->between(0,23))
                ->key('minutes', v::int()->between(0,59))
                ->validate($_POST);

$isFormValid変数は結果に応じてorになりますtruefalse

自分でやりたい場合は、Respect の int バリデーターが次のロジックを使用します。

 is_numeric($input) && (int) $input == $input;
于 2012-05-31T14:51:29.003 に答える
0

PHP に送信する前に、(Javascript/Jquery/別のライブラリを介して) クライアント側で整数を検証します。PHP のis_numericは、文字列変数が数値かどうかをテストするためのものです。$_POST/$_GETこれは通常、キャストせずに変数の数値をテストする標準的な方法です。

すべて$_POSTの変数は文字列であり、必要な文字列を INT に明示的にキャストしなくても、あなたの方法は良い解決策だと思います。

于 2012-05-31T13:07:48.900 に答える
0

これは、入力が有効な整数かどうかを判断する良い方法です。

$_POST入力されたすべての値が文字列になることは正しいです。

于 2012-05-31T13:06:27.823 に答える