PHP - Problema para comparar numero con dos condiciones

 
Vista:
Imágen de perfil de Leandro
Val: 5
Ha aumentado su posición en 28 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema para comparar numero con dos condiciones

Publicado por Leandro (3 intervenciones) el 27/03/2020 20:28:45

Buenas a todos,



Estoy teniendo un problema al comparar numeros con dos condiciones, lo que trato de hacer es un "Validador" de telefonos, si se le puede decir asi, ya le agregue muchas condiciones y todas funcionan menos una. La condicion escrita seria la siguiente:

SI el numero ingresado tiene 10 caracteres
sustraer los primeros 3 y comparar contra la columna caracteristicas, si son iguales entonces, Variable = 1 (VALIDO)
SINO
SI el numero ingresado tiene 10 caracteres, sustraer los primeros 4 y comparar contra la columna caracteristicas
si son iguales, entonces Variable = 1 (VALIDO)
SINO
Variable= 0 (IVALIDO)

EN PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if (strlen($telefono)==10) {
        $codigoArea = substr($telefono,0,4);
        $sql3 = "SELECT count(*) cant FROM `caracteristicas` WHERE `indicativo` = ".$codigoArea;
        $q = $pdo->prepare($sql3);
        $q->execute();
        $data = $q->fetch(PDO::FETCH_ASSOC);
        if ($data['cant']==1) { //valido
            $sql2 = "update `validacion` set estado = '1' where id = ".$id;
            $q = $pdo->prepare($sql2);
            $q->execute();
            continue;
        } else { if (strlen($telefono)==10)
            $codigoArea = substr($telefono,0,3);
            $sql3 = "SELECT count(*) cant FROM `caracteristicas` WHERE `indicativo` = ".$codigoArea;
            $q = $pdo->prepare($sql3);
            $q->execute();
            $data = $q->fetch(PDO::FETCH_ASSOC);
            if ($data['cant']==1) { //valido
                $sql2 = "update `validacion` set estado = '1' where id = ".$id;
                $q = $pdo->prepare($sql2);
                $q->execute();
                continue;
            } else { //invalido
                $sql2 = "update `validacion` set estado = '0' where id = ".$id;
                $q = $pdo->prepare($sql2);
                $q->execute();
                continue;
        }
    }
}


Use uno parecido para decir que si alguien escribe mal un telefono y pone "1115"y 8 digitos lo tome como valido asi:

Si el numero es de 12 caracteres, debe tener 1115+8digitos o codigo de area del interior + 8 digitos sin 15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if (strlen($telefono)==12) {
    if (substr($telefono,0,4)=='1115') {
        $sql2 = "update `validacion` set estado = '1' where id = ".$id;
        $q = $pdo->prepare($sql2);
        $q->execute();
        continue;
    } else {
        //buscar codigo de area valido
        $codigoArea = substr($telefono,0,4);
        $sql3 = "SELECT count(*) cant FROM `caracteristicas` WHERE `indicativo` = ".$codigoArea;
        $q = $pdo->prepare($sql3);
        $q->execute();
        $data = $q->fetch(PDO::FETCH_ASSOC);
        if ($data['cant']==1) { //valido
            $sql2 = "update `validacion` set estado = '1' where id = ".$id;
            $q = $pdo->prepare($sql2);
            $q->execute();
            continue;
        } else { //invalido
            $sql2 = "update `validacion` set estado = '0' where id = ".$id;
            $q = $pdo->prepare($sql2);
            $q->execute();
            continue;
        }
    }
}

asi que le calcule que seria simil, pero de igual forma los estoy poniendo como INVALIDOS y no encuentro el error ya que son numeros validos

desde ya gracias por la ayuda. Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema para comparar numero con dos condiciones

Publicado por Kathyu (905 intervenciones) el 27/03/2020 20:46:27
Quiero entender algo

1
2
3
4
5
6
7
8
SI el numero ingresado tiene 10 caracteres
sustraer los primeros 3 y comparar contra la columna caracteristicas, si son iguales
entonces, Variable = 1 (VALIDO)
SINO
SI el numero ingresado tiene 10 caracteres, sustraer los primeros 4 y comparar contra la columna caracteristicas
si son iguales, entonces Variable = 1 (VALIDO)
SINO
Variable= 0 (IVALIDO)

Ese es todo el problema? porque de verdad que es difícil entenderte, si es así, que errores tiene?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leandro
Val: 5
Ha aumentado su posición en 28 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema para comparar numero con dos condiciones

Publicado por Leandro (3 intervenciones) el 27/03/2020 21:16:14
si, el problema es que me dice invalido por mas que sea valida la condicion. no encuentro el error en el codigo, igual como dije, es un numero de 10 caracteres por ejemplo 2203654891 primero sustraigo los primeros tres (220) lo comparo contra una columna de caracteristicas de area que tengo y el 220 es valido de x provincia, por ente el telefono es real (valido)
te pongo otro ejemplo, si el numero es 9992154873 sustraigo los primeros 3 y 999 no es el codigo de area de ningun lado por ende el telefono es invalido o inventado

la segunda condicion es igual pero en ves de sustraer 3 es sustraer los primeros 4,
en resumen es: el numero tiene 10 caracteres

SI agarra los primeros 3, compara contra caracteristicas y si existe esa caracteristica, es valido OK
sino / si
agarra los primeros 4 y compara contra caracteristicas y si esxiste una caracteristica igual, es valido OK
SINO cumple ninguna de las dos condiciones anteriores
Invalido
FIN
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema para comparar numero con dos condiciones

Publicado por Julio (830 intervenciones) el 27/03/2020 22:02:29
Hola.

¿La columna `indicativo` es de tipo cadena? Porque igual la consulta no está bien, pues no le estás pasando el valor entre comillas.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leandro
Val: 5
Ha aumentado su posición en 28 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema para comparar numero con dos condiciones

Publicado por Leandro (3 intervenciones) el 27/03/2020 22:38:41
la verdad no entendi,
la columna de Caracteristicas de Area (Indicativo), es numeric, tiene los codigo de area solamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema para comparar numero con dos condiciones

Publicado por Julio (830 intervenciones) el 28/03/2020 09:47:46
1
2
$codigoArea = substr($telefono,0,3);
$sql3 = "SELECT count(*) cant FROM `caracteristicas` WHERE `indicativo` = ".$codigoArea;

$codigoArea será un string porque viene de un substr. La pregunta es si, en la base de datos, indicativo es de tipo cadena o numérico. Puede que ahí esté el error, no lo sé.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar