Долгое время я сам делал вот такую фильтрацию чисел на PHP.
****
Ход работы: Если значение в переменной $value более 0 - то скрипт выполняется - если число не проходит - выводит ошибку:
****
А сейчас попробуем вставить в переменную $value значение "10 Привет". Результат работы: Как видим - скрипт пропустил данное значение.
****
А сейчас немного теории:
Не будем говорить то что например благодаря такой фильтрации можно пропустить XSS уязвимость, SQL уязвимость.
Столкнулся я с таким: При вставке значения в базу данных [Поле `money` => тип: Числовое]. Вставляем значение 10.9889.1 [Т. е. две точки]. Я был в шоке если честно то что запрос прошел без ошибок. А в двойном шоке когда увидел что база данных вставило число: "109889" вместо например "10.9889". Думаю сами додумаетесь во что это может выйти...
Почитай про if подробнее. Он воспринимает 0 как false. То есть если строка не ровна false, то выполнять действия. Нужно проверять на число is_numeric()