var_dump(gettype('123'));

eso tb devuelve "string", eso significa que en la validación agregada nunca entrará por la opción "integer", porque todo lo que se postea al final siempre llega como cadena, deberiamos simplemente cambiar:

if ($value != "") {

por

if (!empty($value)) {