web-dev-qa-db-ja.com

フォームから文字列ではなくintを取得するにはどうすればよいですか?

フォームから変数を取得する:

<form method = 'POST' action = ''>
        <input type = 'text' name = 'a' size = '1' >
        <input type = 'submit' value = 'Find it'>
</form>"

1を入力してgettype($ POST _ ['a'])を使用すると、文字列が返されます。intを入力することはできますか?この後、その変数がintかどうかを確認したいからです。

[〜#〜]更新[〜#〜]

常に文字列を返し、(int)またはintval()を使用するように言われましたが、実際に 'a'のような文字列の場合、0を返しますが、整数値0の場合もあるので、この問題を解決するにはどうすればよいですか?

[〜#〜]更新[〜#〜]

タイプミスを編集した後、Brad Christieはis_numericを使用して最善の方法を提案しました

21
Templar
// convert the $_POST['a'] to integer if it's valid, or default to 0
$int = (is_numeric($_POST['a']) ? (int)$_POST['a'] : 0);

is_numeric を使用して確認できます。また、phpでは integer タイプへのキャストも可能です。

実際の比較では、 is_int を実行できます。

更新

バージョン5.2には filter_input これは、このデータタイプ(およびその他のデータタイプ)に対してもう少し堅牢かもしれません。

$int = filter_input(INPUT_POST, 'a', FILTER_VALIDATE_INT);

私が選んだ FILTER_VALIDATE_INT、ただしFILTER_SANITIZE_NUMBER_INTもっとたくさん -それはあなたが何をしたいかによります。

25
Brad Christie

HTTP経由でネットワーク経由で送信する場合、すべては文字列です。 「1」を1にするかどうかは、サーバーが決定します。

16
jpsimons

いいえ。HTTPはテキスト(またはバイナリ)のみを扱います。

変換する必要があります。

5
Quentin

(int)$_POST['a']を使用して整数に変換します。

1
user479911

幅広いタイプの互換性を維持し、int(double、float、ecc。)以外の入力タイプを保持したい場合は、次のようなものをお勧めします。

$var = is_numeric($_POST['a'])?$_POST['a']*1:$_POST['a'];

あなたは得るでしょう:

$_POST['a'] = "abc"; // string(3) "abc"
$_POST['a'] = "10"; // int(10)
$_POST['a'] = "10.12"; // float(10.12)
1
Simone Desantis