Как получить int вместо строки из формы? - PullRequest
19 голосов
/ 19 февраля 2011

Получение переменной из формы:

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

Если я ввожу 1 и использую gettype ($ POST _ ['a']), он возвращает мне строку, возможно ли ввести int? потому что после этого я хочу проверить, является ли эта переменная int.

UPDATE

Получил ответы, что он всегда возвращает строку, и они предложили мне использовать (int) или intval (), но затем, если это действительно строка типа 'a', он возвращает 0, но это может быть также целочисленное значение 0, как преодолеть Эта проблема?

UPDATE

После редактирования опечатки Брэд Кристи предложил лучший способ, используя is_numeric

Ответы [ 5 ]

24 голосов
/ 19 февраля 2011
// 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 и намного больше - это зависит только от того, что вы хотите сделать.

16 голосов
/ 19 февраля 2011

Отправка по сети через HTTP, все является строкой.Ваш сервер должен решить, что «1» должно быть 1.

4 голосов
/ 19 февраля 2011

Нет.HTTP имеет дело только с текстом (или двоичными файлами).

Вы должны конвертировать его.

1 голос
/ 19 февраля 2011

Я бы использовал (int)$_POST['a'], чтобы преобразовать его в целое число.

0 голосов
/ 21 декабря 2018

, если вы предпочитаете поддерживать широкую совместимость типов и сохранять типы ввода, отличные от 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...