it-roy-ru.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, как решить эту проблему? 

ОБНОВЛЕНИЕ

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

19
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 type.

Для реальных сравнений вы можете выполнить is_int .

Обновление

Версия 5.2 имеет filter_input , которая может быть немного более устойчивой для этого типа данных (и других):

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

Я выбрал FILTER_VALIDATE_INT, но есть также FILTER_SANITIZE_NUMBER_INT и намного больше - это зависит только от того, что вы хотите сделать.

24
Brad Christie

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

16
jpsimons

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

Вы должны преобразовать это.

4
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)
0
Simone Desantis