Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Detectar si un usuario se conecta desde un movil

Estas en el tema de Detectar si un usuario se conecta desde un movil en el foro de PHP en Foros del Web. Hola, estoy intentando detectar si los usuarios se conectan desde un teléfono movil para desviarlos a otra pagina para moviles. Estoy usando el siguiente código ...
  #1 (permalink)  
Antiguo 29/07/2013, 16:01
 
Fecha de Ingreso: mayo-2008
Ubicación: Granada
Mensajes: 131
Antigüedad: 16 años, 6 meses
Puntos: 2
Detectar si un usuario se conecta desde un movil

Hola, estoy intentando detectar si los usuarios se conectan desde un teléfono movil para desviarlos a otra pagina para moviles.

Estoy usando el siguiente código que usa la clase (php-mobile-detect):

Código PHP:
include('Mobile_Detect.php');
$detect = new Mobile_Detect();

if(
$detect->isMobile()){
header'location:http://m.imagenes-fb.com/' );
exit();

Escribo aquí haber si alguien me puede echar una mano, por que no me funciona ese código.

Saludos cordiales a todos y gracias de antemano
  #2 (permalink)  
Antiguo 29/07/2013, 16:20
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por cristofer-2006 Ver Mensaje
Hola, estoy intentando detectar si los usuarios se conectan desde un teléfono movil para desviarlos a otra pagina para moviles.

Estoy usando el siguiente código que usa la clase (php-mobile-detect):

Código PHP:
include('Mobile_Detect.php');
$detect = new Mobile_Detect();

if(
$detect->isMobile()){
header'location:http://m.imagenes-fb.com/' );
exit();

Escribo aquí haber si alguien me puede echar una mano, por que no me funciona ese código.

Saludos cordiales a todos y gracias de antemano
tu clase, copiada de aquí te devuelve false si no es un teléfono móvil. entonces lo que necesitas no es si existe el método de la clase, es si lo que te retorna el método de la clase es false (no es un móvil) o es otra cosa que te devolverá si es un móvil.

por lo tanto prueba lo siguiente

Código PHP:
Ver original
  1. include('Mobile_Detect.php');
  2. $detect = new Mobile_Detect();
  3.  
  4. if($detect->isMobile() != false){
  5. header( 'location:http://m.imagenes-fb.com/' );
  6. exit();
  7. }

di si te funciona.

saludos! :)
  #3 (permalink)  
Antiguo 29/07/2013, 16:54
 
Fecha de Ingreso: mayo-2008
Ubicación: Granada
Mensajes: 131
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: Detectar si un usuario se conecta desde un movil

Amm cierto ahora si funciona, pensaba que $detect->isMobile() lo iva a tomar como falso o verdadero igual que si escribo esto:

Código PHP:
$a=true;
if (
$a){
echo 
'aa';

Que se cumple la sentencia, por cierto no seria igual poner:

Código PHP:
if($detect->isMobile() == true){
header'location:http://m.imagenes-fb.com/' );
exit();

Me parece mas simple de pensar jeje

Saludos y muchisimas gracias
  #4 (permalink)  
Antiguo 29/07/2013, 17:42
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por cristofer-2006 Ver Mensaje
Amm cierto ahora si funciona, pensaba que $detect->isMobile() lo iva a tomar como falso o verdadero igual que si escribo esto:

Código PHP:
$a=true;
if (
$a){
echo 
'aa';

Que se cumple la sentencia, por cierto no seria igual poner:

Código PHP:
if($detect->isMobile() == true){
header'location:http://m.imagenes-fb.com/' );
exit();

Me parece mas simple de pensar jeje

Saludos y muchisimas gracias
no, no es lo mismo.

con el primer código das valor a la variable $a, por lo que con el if estás diciendo que si existe, que si tiene valor, haga algo.

de hecho eso aunque funciona no sería correcto, lo correcto es definir cuando quieres que ocurra si esa variable tiene un valor determinado, no si existe o ha sido declarada.

con el != estás diciendo que si no es igual a false entonces haga lo que hay en el if.

con el ==true estás diciendo que si es igual a true haga lo que hay en el if.

pero simplemente con la variable lo que va a pasar es que independientemente de su valor si es declarada, si existe, entonces va a suceder lo que hay debajo del if.

saludos :)
  #5 (permalink)  
Antiguo 29/07/2013, 17:56
 
Fecha de Ingreso: mayo-2008
Ubicación: Granada
Mensajes: 131
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: Detectar si un usuario se conecta desde un movil

Vamos que da igual poner !=false que ==true

con lo de la variable si ponemos:

Código PHP:
$a=false
if (
$a){ 
echo 
'aa'

la sentencia no se cumple

Creo haber entendido que decías que si se cumple por que lo que se esta comprobando es si existe, lo mismo te estoy entendiendo mal pero lo quería aclarar por si las moscas

Saludos
  #6 (permalink)  
Antiguo 29/07/2013, 17:59
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por guardarmicorreo Ver Mensaje
no, no es lo mismo.
...
pero simplemente con la variable lo que va a pasar es que independientemente de su valor si es declarada, si existe, entonces va a suceder lo que hay debajo del if.

saludos :)
No.
Cómo que independientemente de su valor..?
Si $a==false "va a suceder" lo que hay debajo del "if" independientemente de su valor? O si $a==0? O si $a==""??


Si al OP no le funcionaba, y luego si, debe buscar otra causa.Su código era correcto.
  #7 (permalink)  
Antiguo 29/07/2013, 18:56
 
Fecha de Ingreso: mayo-2008
Ubicación: Granada
Mensajes: 131
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: Detectar si un usuario se conecta desde un movil

Lo que no me funciona es cuando lo pongo así:

if($detect->isMobile()){ }

Al ponerlo así:

if($detect->isMobile() != false){ }

Funciona perfectamente, el error creo que ha sido pensar que iva a tratar esto $detect->isMobile() como una variable booleana

Luego la pregunta simplemente era por que es mas fácil comprender, por lo menos para mi, la expresión (si es igual a verdadero) que (si no es igual a falso)

En este caso sabemos que solo va a responder verdadero o falso pero y si como se dice no es ni falso ni verdadero, también se cumpliría.

Saludos
  #8 (permalink)  
Antiguo 29/07/2013, 19:42
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Detectar si un usuario se conecta desde un movil

Código PHP:
Ver original
  1. $a=1; // esto no es un booleano.
  2. if($a)
  3.   echo "HOLA";
  4.  
  5. $a="lala"; // Esto es aun menos booleano que lo anterior.
  6. if($a)
  7.    echo "HOLA";
  8.  
  9. $a=array("1","2","3"); // Creo que esto tampoco es un booleano.
  10. if($a)
  11.    echo "HOLA";
  12.  
  13. $a=new stdClass(); // Esto .. tampoco es un booleano.
  14. if($a)
  15.    echo "HOLA";

PHP básico.

De la página oficial, mobiledetect.net:
Código PHP:
Ver original
  1. // Any mobile device (phones or tablets).
  2. if ( $detect->isMobile() ) {
  3.  
  4. }
  5.  
  6. // Any tablet device.
  7. if( $detect->isTablet() ){
  8.  
  9. }
  #9 (permalink)  
Antiguo 29/07/2013, 20:23
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Detectar si un usuario se conecta desde un movil

según veo en el código de la aplicación el método isMobile solo puede devolver dos valores, true o false

https://github.com/serbanghita/Mobil...ile_Detect.php

por otra parte

Código PHP:
Ver original
  1. //con este if independientemente de su valor va a imprimir $a porque existe, se le ha dado un valor
  2. $a="hola";
  3. if ( $a )
  4. echo $a;
  5.  
  6. //en cambio lo anterior no es lo mismo que definir cuando se quiere imprimir la variable $a
  7.  
  8. $a="adios";
  9.  
  10. if( $a =="hola" )
  11. echo $a;
  12. //existe $a, tiene valor, pero no es el que hemos definido que queremos que haya para que se imprima
  13. //por lo tanto se irá al else
  14. else
  15. echo "la variable no tenía como valor 'hola'";

creo que no me equivoco en esto y fue lo que quise decir, ni más ni menos
  #10 (permalink)  
Antiguo 29/07/2013, 20:43
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Código PHP:
Ver original
  1. //con este if independientemente de su valor va a imprimir $a porque existe, se le ha dado un valor
  2. $a="hola";
  3. if ( $a )
  4. echo $a;

creo que no me equivoco en esto y fue lo que quise decir, ni más ni menos
Pues te equivocas.
Cita:
//con este if independientemente de su valor va a imprimir $a porque existe, se le ha dado un valor
Asígnale el valor 0.Verás cómo existe, cómo le has dado un valor, y no se imprime.
Asígnale el valor "".Verás cómo existe, cómo le has dado un valor, y no se imprime.
Asígnale el valor null.Verás cómo existe, cómo le has dado un valor, y no se imprime.
Esto ya lo he dicho en un post anterior.
Revisa la diferencia entre isset() y empty().
Si tu idea es que "if" requiere un booleano, revisa el manual de php.Y la diferencia entre == y ===.
Qué crees que devuelve esta linea de código?
Código PHP:
Ver original
  1. if(1==true)
  2.   echo "hola";
  3. if("hola"==true)
  4.    echo "hola";
  5. if(array("hola")==true)
  6.    echo "hola";
  7. if(new stdClass()==true)
  8.   echo "hola";
  #11 (permalink)  
Antiguo 29/07/2013, 21:02
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por dashtrash Ver Mensaje
Pues te equivocas.

Asígnale el valor 0.Verás cómo existe, cómo le has dado un valor, y no se imprime.
Asígnale el valor "".Verás cómo existe, cómo le has dado un valor, y no se imprime.
Asígnale el valor null.Verás cómo existe, cómo le has dado un valor, y no se imprime.
Esto ya lo he dicho en un post anterior.
Revisa la diferencia entre isset() y empty().
Si tu idea es que "if" requiere un booleano, revisa el manual de php.Y la diferencia entre == y ===.
Qué crees que devuelve esta linea de código?
Código PHP:
Ver original
  1. if(1==true)
  2.   echo "hola";
  3. if("hola"==true)
  4.    echo "hola";
  5. if(array("hola")==true)
  6.    echo "hola";
  7. if(new stdClass()==true)
  8.   echo "hola";
tienes razón, no se imprime porque 0, "" y null no son valores.

lo que yo puse sí es valor.

dije independientemente de su valor y 0, "" y null no son valores, variables tipo $a=0, $b="" o $c=null existen pero no contienen valor.

0 es valor tipo false, por eso no se imprime, porque es valor, pero no lo es al estar dentro del if.

entonces creo que no me equivoqué no?
  #12 (permalink)  
Antiguo 30/07/2013, 02:28
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Detectar si un usuario se conecta desde un movil

Que cero no es un valor? ... Entonces..qué es?
Se podría montar una discusión sobre null..Pero..sobre cadena vacía? Cómo que no contiene un valor?
No hay tal cosa como "tipo false".Hay tipo entero, y tipo booleano.0 es un tipo entero.!== te dirá que 0 no es igual a false, ya que hace comprobación de tipo.
  #13 (permalink)  
Antiguo 30/07/2013, 04:20
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por dashtrash Ver Mensaje
Que cero no es un valor? ... Entonces..qué es?
Se podría montar una discusión sobre null..Pero..sobre cadena vacía? Cómo que no contiene un valor?
No hay tal cosa como "tipo false".Hay tipo entero, y tipo booleano.0 es un tipo entero.!== te dirá que 0 no es igual a false, ya que hace comprobación de tipo.
Código PHP:
Ver original
  1. //aquí y en este momento cero es un valor
  2.  
  3. $a=0;
  4.  
  5. //en PHP dentro de la condición 'if' '0' es igual a 'null' y "", es decir, lo interpreta como que no hay valor, lo puedes comprobar así
  6.  
  7. $a=0;
  8.  
  9. if ( $a== "" ) //también if ( $a== null )
  10. {
  11.      echo $a;
  12. }
  13.  
  14. //imprimirá 0

Es en las expresiones del if donde 0 se interpreta como false, como "" y como null.

!== me dirá que 0 no es idéntico a false porque no son del mismo tipo pero son iguales después de la conversión a tipos que 'if' somete al número 0.

eso lo dice aquí

Cita:
$a == $b Igual TRUE si $a es igual a $b después de la manipulación de tipos.
¿qué ocurre? pues que para la negación no es lo mismo != (que sería la negación de la anterior comparación lógica de igualdad)

Cita:
$a != $b Diferente TRUE si $a no es igual a $b después de la manipulación de tipos.
que !== (que sería la la comparación lógica de negación de tipos iguales).

La comparación lógica de tipos iguales es ===

Cita:
$a === $b Idéntico TRUE si $a es igual a $b, y son del mismo tipo.
todo sobre operadores lógicos de comparación está en el anterior enlace y sobre el cero, false, true, aquí

y la manipulación de tipos aquí

Cristopher-2006

no es lo mismo decir

Código PHP:
Ver original
  1. $a=false;
  2.  
  3. if($a!=true)

que

Código PHP:
Ver original
  1. $a=false;
  2.  
  3. if($a==false)
puesto que en el primer if lo que estás diciendo es algo parecido a

"si el valor de la variable 'a' no es igual a true..." con eso estás discriminando a true pero aceptando el resto de posibles valores.

en cambio en el segundo if estás diciendo que "si $a es igual a false..." y solo a false, discriminas el resto de valores y solo aceptas false.

saludos! :)

Última edición por guardarmicorreo; 30/07/2013 a las 04:29
  #14 (permalink)  
Antiguo 30/07/2013, 07:30
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 5 meses
Puntos: 832
Respuesta: Detectar si un usuario se conecta desde un movil

Sólo resaltar que lo mencionado por dashtrash 4 posts más arriba deberían pegarlo con luces de neón tipo "Coma en Joe's" arriba de este foro.

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Cristopher-2006

no es lo mismo decir

Código PHP:
Ver original
  1. $a=false;
  2.  
  3. if($a!=true)

que

Código PHP:
Ver original
  1. $a=false;
  2.  
  3. if($a==false)
puesto que en el primer if lo que estás diciendo es algo parecido a

"si el valor de la variable 'a' no es igual a true..." con eso estás discriminando a true pero aceptando el resto de posibles valores.

en cambio en el segundo if estás diciendo que "si $a es igual a false..." y solo a false, discriminas el resto de valores y solo aceptas false.

saludos! :)
Muy cierto. Y aunque todavía me encuentro lejos de ser un programador experto, existe un principio que tengo claro desde que comencé a programar: PHP es un lenguaje diseñado -como todo lenguaje- para comunicarse (en este caso con el servidor). Si mi lenguaje es ambiguo, lógicamente mi interlocutor (el servidor) tardará tiempo extra en comprenderme. Por eso es que acostumbro a comunicarme con el servidor tal como si lo estuviese haciendo con una persona:

Código PHP:
Ver original
  1. (si este valor es cierto/existe/está seteado/no es nulo) ? procede así : sino, procede de esta otra forma
Simple y llano. Decir "esto es cierto" es lógico, directo. Decir "esto no es falso" es ambiguo.

Si alguien me solicitara un consejo sobre este tema, diría que trate -mientras sea correcto- de construir sus condicionales a partir de declaraciones que busquen la aceptación de valores en primer término:

Código PHP:
Ver original
  1. if(true == $esto)
  2.  
  3. if(!empty ($esto) )
  4.  
  5. if(isset ($esto) )
  6.  
  7. if( !is_null($esto) )
  #15 (permalink)  
Antiguo 30/07/2013, 12:13
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Detectar si un usuario se conecta desde un movil

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Código PHP:
Ver original
  1. //aquí y en este momento cero es un valor
  2.  
  3. $a=0;
  4.  
  5. //en PHP dentro de la condición 'if' '0' es igual a 'null' y "", es decir, lo interpreta como que no hay valor, lo puedes comprobar así
  6.  
  7. $a=0;
  8.  
  9. if ( $a== "" ) //también if ( $a== null )
  10. {
  11.      echo $a;
  12. }
  13.  
  14. //imprimirá 0
"Aqui y en este momento 0 es un valor".

En un post anterior decías:
Cita:
tienes razón, no se imprime porque 0, "" y null no son valores.
No.cero es un valor, aqui, en este momento, mañana y pasado.Y "" es un valor.Y la cadena "0" es un valor.Sólo admitiría una discusión cuasi filosófica de null.
Por supuesto, 3 líneas más abajo de tu código, 0 sigue siendo un valor.

Pero, varios post más tarde, la frase
Cita:
pero simplemente con la variable lo que va a pasar es que independientemente de su valor si es declarada, si existe, entonces va a suceder lo que hay debajo del if.
Sigue sin ser cierta...vamos, no sé cómo estamos discutiendo esto...cae por su peso...

Cita:
!== me dirá que 0 no es idéntico a false porque no son del mismo tipo pero son iguales después de la conversión a tipos que 'if' somete al número 0.
Seguro que lo que es "sometido" a conversión de tipos es 0?..Yo no lo tendría tan claro...Y si php, tal y como hace C, considerse cierto todo aquello cuyo cast a *entero* no sea cero?Incluidas las constantes TRUE y FALSE..?...Porque eso es lo que hace PHP....

Cómo funciona if, lo tengo más o menos claro..El asunto es que, al OP se le estaba diciendo algo que *no* es cierto. No hay ninguna diferencia entre el código con y sin "!=false".


Cita:
en cambio en el segundo if estás diciendo que "si $a es igual a false..." y solo a false, discriminas el resto de valores y solo aceptas false.

saludos! :)
...claro...y si quieres cualquier cosa que no sea false, y haces if($a) , es perfectamente correcto...
No entiendo dónde quieres llegar con tu post.
  #16 (permalink)  
Antiguo 30/07/2013, 12:50
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: Detectar si un usuario se conecta desde un movil

Metacortex, tienes razón, != es ambiguo.

yo utilicé != porque en el momento de ayudar a cristofer solo conocía uno de los valores que el método isMobile devolvía. entonces me guié por ese valor que tenía. entonces me puede devolver lo que quiera, pero si es false sé lo que tengo que hacer.

luego leí el método y vi que devolvía true o false, entonces se puede especificar.

fué una solución momentánea sin intención de ser definitiva, evidentemente había que ver si la aplicación funcionaba o qué estaba pasado :)


dashtrash

Donde quiero llegar es que fuera de la expresión if () cero es un valor para operaciones aritméticas, pero a la hora de introducirlo en el if (operaciones de comparación) cero no es un valor, es igual a "" y null, es decir vacío, no hay nada.

¿sabes por qué?

porque cero en realidad representa la nada, principio matemático fundamental.

si con la programación se intenta reproducir parte de la realidad, entonces según tu lógica la nada es un valor

¿seguro que es un valor?

cero es un valor representativo:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

es lo mismo que decir

parto de la nada, ahora tengo una unidad de lo que sea, ahora dos, ahora tres, ahora cuatro, etc.

si cero fuera un valor cuantificable materializame ¿cuánto es cero?, adelante, represéntame 0, la nada.

entonces por eso a la hora de comparar el cero de la siguiente forma if lo interpreta como "" y null, es decir, nada/ valor vacío/ ausencia de valor/ no hay valor

para que if pueda trabajar con 0 de otra forma que no sea "" o null lo deberías meter en las funciones is_int o is_numeric
Código PHP:
Ver original
  1. $a=0;
  2.  
  3. if( $a == "" )
  4. echo $a;
  5.  
  6. //imprime 0
  7.  
  8. //pero [B]cero no es el mismo tipo que null[/B] estrictamente porque puede adquirir un valor fuera del if
  9.  
  10. //entonces por eso lo siguiente no imprimirá $a
  11.  
  12. $a=0;
  13.  
  14. if ( $a===null ) //tampoco lo imprimirá si se hace con if ( $a==="" )
  15. echo $a;
  16.  
  17.  
  18. //aquí sí imprime, porque está evaluando que es un valor entero del sistema hexadecimal o es un valor numérico
  19.  
  20. //cero para valores numéricos sí es un valor, yo puedo multiplicar 5*0=0
  21.  
  22. $a=0;
  23. if (is_numeric($a)) //o is_int($a)
  24. echo $a;
  25.  
  26. //imprime cero

el motivo de que no lo imprima es por una diferenciación que hace php de 0, false, true, null y "".

la diferenciación es funcional, porque funcionalmente cuando escribes código 0 no es lo mismo que null, tampoco son iguales "" y false.

eso era lo que quería decir. yo lo entiendo así y es lo que dice en el manual de php sobre que if manipula los tipos, el código funciona tal y como he descrito y el argumento matemático también lo he dado.

Etiquetas: conecta, movil, usuario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.