PHP - Verififcar ubicacion de un usuario

   
Vista:

Verififcar ubicacion de un usuario

Publicado por Emilo epedrazacordente@gmail.com (5 intervenciones) el 13/08/2015 09:48:09
Buenos Días
estoy intentando verificar la ubicación de un usuario.
cuando el usuario hace login con usuario y contraseña obtengo su latitud y longitud para comprobar si es la que yo tengo grabada para el en mi base de datos.

el problema que tengo, es que depués de obtener la latitud y longitud con el javascript, necesito ese valor en php, para realizar la busqueda

es decir el valor de --> alert ('latitud: '+ latitud);
en --> echo "\nValor de $latitud.: ".$latitud."\n<br>";

muchas gracias


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Google Maps Geoposicionamiento</title>
 
<html>
 
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<title>Google Maps Geoposicionamiento</title>
 
 <script>
 var x = "hola";
var latitud = 0;
var longitud = 0;
var precision = 0;
  navigator.geolocation.getCurrentPosition(mapa);
var posicion=pos;
 
	function mapa(pos)
 
		{
			latitud = pos.coords.latitude;
			longitud = pos.coords.longitude;
			precision = pos.coords.accuracy;
 
			alert ('latitud: '+ latitud);
		}
 
alert ('latitud: '+ latitud);
 </script>
</head>
<body>
<?php
	//usuario a buscar
	session_start();
	$username=$_SESSION['username'];
	echo "\n$username.: ".$username."\n<br>";
?>
 
<?php $tuVariable=
      '<script>
      document.write (x)
      </script>';
      echo "\nValor de tuVariable.: ".$tuVariable."\n<br>";
?>
 
<?php
	//latitud para buscar asociada a la ubicacion del usuario
	$latitud=
      '<script>
      document.write (latitud)
      </script>';
      echo "\nValor de tuVariable.: ".$latitud."\n<br>";
?>
// busqueda a realizar posteriormente
// que no me genera problema
</body>
</html>
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 txema

Verififcar ubicacion de un usuario

Publicado por txema (40 intervenciones) el 13/08/2015 10:27:24
Hola Emilio:

En estos casos te sugiero que utlices campos ocultos a ser rellenados desde tu Javascript
En HTML:
1
2
<input type="hidden" id="latitud" name="latitud">
<input type="hidden" id="longitud" name="longitud">
Y en Javascript:
1
2
3
4
var latitud = document.getElementById('latitud');
  latitud.value =  pos.coords.latitude;
var longitud = document.getElementById('longitud');
  longitud.value =  pos.coords.longitude;

De todos modos, es muy difícil que coincidan dichos valores de un mismo usuario ya que siempre actúa la precision = pos.coords.accuracy; y una variación de 2cms. afecta, creo que al 6º ó 7º decimal (0.00001 en cada coordenada).

Nos cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Verififcar ubicacion de un usuario

Publicado por Emilio (5 intervenciones) el 13/08/2015 13:17:53
muchas gracias
avanzando

he cambiado el código como me comentabas y lo pego a continuación...
pero en el firefox de mi pc va bien pero en el móvil no carga la latitud... puedes probarlo o es que me estoy volviendo loco?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Google Maps Geoposicionamiento</title>
 
<html>
 
<head>
 
 
 <script>
 
 
  navigator.geolocation.getCurrentPosition(mapa);
 
 
	function mapa(pos)
 
		{
var latitud = document.getElementById('latitud');
var longitud = document.getElementById('longitud');
var precision = document.getElementById('precision');
			longitud.value = pos.coords.longitude;
			precision.value = pos.coords.accuracy;
			latitud.value =  pos.coords.latitude;
 
		}
 
alert ('latitud: '+ latitud);
 </script>
</head>
<body>
<?php
	//usuario a buscar
	session_start();
	$username=$_SESSION['username'];
 
	//latitud para buscar asociada a la ubicacion del usuario
	$latitud=
      '<script>
      document.write (latitud)
      </script>';
      echo "\nValor de latitud.: ".$latitud."\n<br>";
	$longitud=
      '<script>
      document.write (longitud)
      </script>';
      echo "\nValor de longitud.: ".$longitud."\n<br>";
	 echo "\nValor de username.: ".$username."\n<br>";
?>
<FORM NAME=form1 ACTION=posigraba.php METHOD=POST>
	<table><tr><td></td></tr>
	<tr><td>descripcion</td><td><input type="text" id="desc" name="descripcion" value="Intro Descripción..." size="30"/></td></tr>
	<tr><td>precision</td><td><input type="text" id="precision" name="precision" size="10"/></td></tr>
	<tr><td>longitud</td><td><input type="text" id="longitud" name="longitud" size="10"/></td></tr>
	<tr><td>latitud</td><td><input type="text" id="latitud" name="latitud"></td></tr>
	<tr><td>username</td><td><input type="text" id="username" name="username" value="<?php echo $username;?>"></td></tr>
	</table>
	</FORM>
</body>
</html>
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 txema

Verififcar ubicacion de un usuario

Publicado por txema (40 intervenciones) el 13/08/2015 14:07:30
La verdad es que tu código Javascript lo veo, no sé si pobre o manco. Firefox nos suele echar una o muchas manos, pero no todos los navegadores lo hacen.

En http://www.lawebdelprogramador.com/codigo/buscar.php?opc=1&charSearch=geolocalizacion+w3c tienes dos códigos que inserté hace unos meses: uno con mapa (API Google Maps) y otro, como lo estás usando tú, directamente con los datos en Geolocalización basada en W3C

Creo que te pueden dar luz.

Teóricamente podrías verlos sin problemas también en smarthones y tables.

Nos cuentas
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

Verififcar ubicacion de un usuario

Publicado por Emilio (5 intervenciones) el 14/08/2015 10:41:43
muy buena la pista de firefox...

después de poner el botón de envío de los valores del formulario acabo de ver que desde mi móvil envía los valores con google chrome pero no con firefox.

alguna idea al respecto?

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Google Maps Geoposicionamiento</title>
 
<html>
 
<head>
 
 
 <script>
 
 
  navigator.geolocation.getCurrentPosition(mapa);
 
 
	function mapa(pos)
 
		{
var latitud = document.getElementById('latitud');
var longitud = document.getElementById('longitud');
var precision = document.getElementById('precision');
			longitud.value = pos.coords.longitude;
			precision.value = pos.coords.accuracy;
			latitud.value =  pos.coords.latitude;
alert ('latitud: '+ latitud.value);
		}
 
 
 </script>
</head>
<body>
<?php
	//usuario a buscar
	session_start();
	$username=$_SESSION['username'];
 
?>
<FORM NAME=form1 ACTION=posigraba.php METHOD=POST>
	<table><tr><td></td></tr>
	<tr><td>descripcion</td><td><input type="text" id="desc" name="descripcion" value="Intro Descripción..." size="30"/></td></tr>
	<tr><td>precision</td><td><input type="text" id="precision" name="precision" size="10"/></td></tr>
	<tr><td>longitud</td><td><input type="text" id="longitud" name="longitud" size="10"/></td></tr>
	<tr><td>latitud</td><td><input type="text" id="latitud" name="latitud" value=latitud.value></td></tr>
	<tr><td>username</td><td><input type="text" id="username" name="username" value="<?php echo $username;?>"></td></tr>
	<tr><td><input type='Submit' value='Grabar'></td></tr>
	</table>
	</FORM>
</body>
</html>
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 txema

Verififcar ubicacion de un usuario

Publicado por txema (40 intervenciones) el 14/08/2015 11:31:20
Cambia tu Javascript por este:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<script>
    var watchId;
    // Con PositionOptions nos aseguramos que la lectura no la hace desde caché (es inferior a hace un minuto)
    var PositionOptions = {
        enableHighAccurace: true,
        timeout: 5000,
        maximumAge: 60000
    };
 
    window.onload = function() {
        if (navigator.geolocation) {
            // llamamos a las tres funciones comprometidas (antigüedad de la lectura, geolocalización y posibles errores)
            watchId = navigator.geolocation.getCurrentPosition(successCallback, errorCallback, PositionOptions);
        } else {
            document.getElementById("mensaje").innerHTML = "Lo sentimos pero el API de Geolocalización de HTM5 no está disponible para su navegador";
        }
    }
 
    function successCallback(pos) {
        var latitud = document.getElementById('latitud');
        var longitud = document.getElementById('longitud');
        var precision = document.getElementById('precision');
        longitud.value = pos.coords.longitude;
        precision.value = pos.coords.accuracy;
        latitud.value = pos.coords.latitude;
        ajax = objetoAjax();
    }
 
    function errorCallback(error) {
        var appErrMessage = null;
        if (error.core == error.PERMISSION_DENIED) {
            appErrMessage = "El usuario no ha concedido los privilegios de geolocalización"
        } else if (error.core == error.POSITION_UNAVAILABLE) {
            appErrMessage = "Posición no disponible"
        } else if (error.core == error.TIMEOUT) {
            appErrMessage = "Demasiado tiempo intentando obtener la localización del usuario."
        } else if (error.core == error.UNKNOWN) {
            appErrMessage = "Error desconocido"
        } else {
            appErrMessage = "Error insesperado"
        }
        document.getElementById("mensaje").innerHTML = appErrMessage
    };
</script>

En HTML añade en un lugar visible esto:
1
<div id="mensaje"></div>

Con este último <div> podremos ver si existe algún tipo de fallo y a qué corresponde (si no existe error, no llegará a ocupar espacio).

NOTA: Con enableHighAccurace: true, en smartphones pudes tener un mayor consumo con una mayor precisión.. Si lo defines como false, tendrás mayor ahorro de consumo pero puede ser menos preciso (difícilmente entrará el GPS en la geolocalización)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Verififcar ubicacion de un usuario

Publicado por Emilio (5 intervenciones) el 14/08/2015 13:42:11
esto va fenomenal!
ahora intento visualizar el mapa del posicionamiento insertando un código debajo de ajax y y definiendo un div para el mapa.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Google Maps Geoposicionamiento</title>
 
<html>
 
<head>
 <style>
	        #map
 
	        {
 
	            width: 100%;
 
	            height: 300px;
 
	            border: 1px solid #d0d0d0;
 
	        }
			#mensaje
 
	        {
 
	            width: 100%;
 
	            height: 30px;
 
	            border: 1px solid #d0d0d0;
 
	        }
 </style>
 
<script>
 
    var watchId;
 
    // Con PositionOptions nos aseguramos que la lectura no la hace desde caché (es inferior a hace un minuto)
 
    var PositionOptions = {
 
        enableHighAccurace: true,
 
        timeout: 5000,
 
        maximumAge: 60000
 
    };
 
 
 
    window.onload = function() {
 
        if (navigator.geolocation) {
 
            // llamamos a las tres funciones comprometidas (antigüedad de la lectura, geolocalización y posibles errores)
 
            watchId = navigator.geolocation.getCurrentPosition(successCallback, errorCallback, PositionOptions);
 
        } else {
 
            document.getElementById("mensaje").innerHTML = "Lo sentimos pero el API de Geolocalización de HTM5 no está disponible para su navegador";
 
        }
 
    }
 
 
 
    function successCallback(pos) {
 
        var latitud = document.getElementById('latitud');
 
        var longitud = document.getElementById('longitud');
 
        var precision = document.getElementById('precision');
 
        longitud.value = pos.coords.longitude;
 
        precision.value = pos.coords.accuracy;
 
        latitud.value = pos.coords.latitude;
 
 
        ajax = objetoAjax();
 
			var contenedor = document.getElementById('map')
			var centro = new google.maps.LatLng(latitud,longitud);
 
 
 
			var propiedades =
 
			{
 
                zoom: 18,
 
                center: centro,
 
                mapTypeId: google.maps.MapTypeId.ROADMAP
 
			};
 
 
 
			var map = new google.maps.Map(contenedor, propiedades);
 
 
 
			var marcador = new google.maps.Marker({
 
                position: centro,
 
                map: map,
 
                title: 'Tu posicion actual'
 
            });
    }
 
 
 
    function errorCallback(error) {
 
        var appErrMessage = null;
 
        if (error.core == error.PERMISSION_DENIED) {
 
            appErrMessage = "El usuario no ha concedido los privilegios de geolocalización"
 
        } else if (error.core == error.POSITION_UNAVAILABLE) {
 
            appErrMessage = "Posición no disponible"
 
        } else if (error.core == error.TIMEOUT) {
 
            appErrMessage = "Demasiado tiempo intentando obtener la localización del usuario."
 
        } else if (error.core == error.UNKNOWN) {
 
            appErrMessage = "Error desconocido"
 
        } else {
 
            appErrMessage = "Error insesperado"
 
        }
 
        document.getElementById("mensaje").innerHTML = appErrMessage
 
    };
 
</script>
</head>
<body>
<?php
	//usuario a buscar
	session_start();
	$username=$_SESSION['username'];
 
?>
<FORM NAME=form1 ACTION=posigrabaiam.php METHOD=POST>
	<table><tr><td></td></tr>
	<tr><td>descripcion</td><td><input type="text" id="desc" name="descripcion" value="Intro Descripción..." size="30"/></td></tr>
	<tr><td>precision</td><td><input type="text" id="precision" name="precision" size="10"/></td></tr>
	<tr><td>longitud</td><td><input type="text" id="longitud" name="longitud" size="10"/></td></tr>
	<tr><td>latitud</td><td><input type="text" id="latitud" name="latitud" value=latitud.value></td></tr>
	<tr><td>username</td><td><input type="text" id="username" name="username" value="<?php echo $username;?>"></td></tr>
	<tr><td><input type='Submit' value='Grabar'></td></tr>
	</table>
	</FORM>
	<div id="mensaje"></div>
	<div id="map"></div>
</body>
</html>
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 txema

Verififcar ubicacion de un usuario

Publicado por txema (40 intervenciones) el 14/08/2015 15:12:48
En mi segunda entrada de este mismo tema, te trasladaba a códigos fuente que publicaba en lawebdelprogramador sobre el tema: uno de ellos con mapa (de Google Maps) incluido.

Creo que el trabajo lo tienes que realizar tú.
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 txema

Verififcar ubicacion de un usuario

Publicado por txema (40 intervenciones) el 14/08/2015 19:30:12
Hola Emilio:

Es importante que leas y entiendas/apliques los códigos.

¿Por qué tomar por Ajax los datos si los tienes en la página? El envío de datos a tu base es paralelo.

Una observación sobre tu código: El mapa tiene que ser instalado de entrada y tener un espacio (ancho y alto) o no aparecerá.
No te importe dónde lo centras. Javascript (google maps) te lo podrá centrar y con el zoom que programes.

Los datos llegarán a tu base vía Ajax o vía submit del form sin que tengas que hacer viajes de ida-vuelta-ida-vuelta.

En términos de trabajo es (sobre conocimiento del lo que estamos programando), 1-2 horas o 12 horas. Y en recursos .... 4 viajes de usuario a host.

En términos de ubicación, sirve pero en términos de identificación de usuario (ya lo dije) no te va a servir. Lo correcto sería pensar en IP, pero ¿y si es dinámica?;¿si accede a través de proxi?.
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

Verififcar ubicacion de un usuario

Publicado por Emilo (5 intervenciones) el 17/08/2015 10:05:47
respecto a la validación de usuario...
cuando llego a este código, el usuario ya se ha logado con usuario y password.

respecto a la ip... como siempre entra desde su móvil, la ip cambiará constantemente

como puedo leer el IMEI de su teléfono?

no se si es el sitio o el momento... pero puedes comentar que hace exactamente ajax = objetoAjax(); en este código

muchas gracias
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 txema

Verififcar ubicacion de un usuario

Publicado por txema (40 intervenciones) el 17/08/2015 11:15:52
Comenzando por el final:

objetoAjax()
Sorry. Aquí no hace nada.
Posiblemente se deslizó esta línea de pruebas con tu código donde pretendía actualizar tu form (los datos/coordenadas) sin recargar la página.
Algo que lo ví complicado cuando ya que en la página teníamos las coordenadas de geolocalización.
En el código expuesto NO PINTA NADA (Mis disculpas).

Respecto al IMEI del teléfono sé lo básico que es casi nada. No conozco la forma de conocer el IMEI de un teléfono ajeno mediante código.

En esto no te puedo ayudar.
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