Как получить 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.
UPDATE
Получил ответы, что он возвращает всегда строку, и они предложили мне использовать (int) или intval(), но если это действительно строка, как "a", она возвращает 0, но может также быть целочисленным значением 0, как преодолеть Эта проблема?
UPDATE
После редактирования опечатки Брэд Кристи предложил лучший способ, используя is_numeric
Ответы
Ответ 1
// convert the $_POST['a'] to integer if it 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
и намного больше - это просто зависит от того, что вы хотите сделать.
Ответ 2
Отправка по каналу через HTTP, все это строка. До вашего сервера решить, что "1" должен быть 1
.
Ответ 3
Нет. HTTP использует только текст (или двоичные файлы).
Вам нужно его преобразовать.
Ответ 4
Я бы использовал (int)$_POST['a']
, чтобы преобразовать его в целое число.
Ответ 5
если вы предпочитаете поддерживать широкую совместимость типов и сохранять типы ввода, отличные от 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)