PHP - Problemas al grabar en la tabla la ip del usuario

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por Unexes (124 intervenciones) el 28/09/2014 14:21:23
Hola a tod@s.

Veréis al cambiarme a Windows 7 y emigrar de Mysql a Mysqli me ha surgido un problema en un código que hasta ahora funcionaba bien.

Al enviar un formulario grababa en un campo de mi tabla la ip desde donde se envía dicho formulario, haciendo las pruebas desde localhost se grababa en la tabla "127.0.0.1" esto es correcto, pero ahora me graba en la tabla "::1".

Antes de recurrir a vuestra ayuda he buscado por la red y creo que he encontrado que el problema esta en algo que se denomina IPv6 y IPv4 pero no se como solucionarlo, aclaro que mi Ingles es de pena.

He probado en las propiedades de la red de Windows 7 a desactivar el IPv6, pero no funciona.

Alguien me puede Ayudar.

Como he dicho hasta ahora funcionaba bien, por si sirve de algo utlizo:
1
$ipuser= $_SERVER['REMOTE_ADDR'];
1
2
$query = 'INSERT INTO tb_personal (Nombre_Personal, Apellido1_Personal, Ip_Personal)
				VALUES (\''.$nombrepersonal.'\',\''.$apellidopersonal1.'\',\''.$ipuser.'\')';
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
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por txema (18 intervenciones) el 28/09/2014 17:09:37
Hola Unexes:

En realidad este tema me preocupaba en su momento sobre páginas ya en línea y no he tenido problemas.

Hasta donde yo sé, en local, IPv6 corresponde a (::1), IPv4 corresponde a (127.0.0.1).

He podido ver que en Windows 7 y anteriores se puede desactivar IPv6 (http://support2.microsoft.com/kb/929852#letmefixit) pero no se recomienda.

En la práctica, y sobre páginas en línea, es más interesante ver otras funciones (supongo que lo quieres para tener un control de usuarios) sobre los que entran mediante proxi, etc.

Yo utilizo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if ($_SERVER) {
    if ($_SERVER['HTTP_X_FORWARDED_FOR'] ) {
        $ip_real = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    elseif ($_SERVER['HTTP_CLIENT_IP'] ) {
        $ip_real = $_SERVER['HTTP_CLIENT_IP'];
    }
    else {
        $ip_real = $_SERVER['REMOTE_ADDR'];
    }
} else {
    if (getenv('HTTP_X_FORWARDED_FOR' ) ) {
        $ip_real = getenv('HTTP_X_FORWARDED_FOR' );
    }
    elseif (getenv('HTTP_CLIENT_IP' ) ) {
        $ip_real = getenv('HTTP_CLIENT_IP' );
    }
    else {
        $ip_real = getenv('REMOTE_ADDR' );
    }
}
echo $ip_real;
?>
donde, como ves, $_SERVER['REMOTE_ADDR'] es lo último que espero.

Si alguien amplia la información nos ayudará/enseñará a los dos.
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por Unexes (124 intervenciones) el 28/09/2014 20:26:49
Gracias txema por tu ayuda

Veras he probado el código que has puesto y en local me graba en la base de datos el mismo resultado "::1"

Perdona si la siguiente pregunta te parece tonta pero como todavía no puedo probar la página subiéndola al servidor, te quería preguntar si cuando la suba me grabara correctamente en la tabla la ip del usuario o me seguirá grabando "::1" o cualquier otra cosa.

¿Es este un problema solo cuando se prueba la página a nivel local o si me ocurre a nivel local también me ocurrirá cuando suba la página al servidor?, porque necesito comprobar la ip del usuario en la web que estoy haciendo.

Un saludo y gracias espero tu respuesta.
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
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por txema (18 intervenciones) el 28/09/2014 20:48:17
Lo normal es que te grabe la IP del servidor que recibe (el tuyo).

Sobre el código ya compartido puedes ver el resultado (es algo más complejo ya que ubico la IP del usuario receptor en este mapa

Tranquilo, que no lo registro en base de datos, aunque muchos lo hacen sin decirlo: y eso no es ni ético ni legal.
Verás que esa no es tu posición (centro del mapa al que no pongo marcador) sino la de la señal de tu proveedor.

Puedes probarlo conectándote a través de un proxi y verás que cae siempre en la IP de tu proveedor/ antena de conexión (por ello mi código era un poco más complejo).

P.D.: No existen preguntas tontas sino tontos que no hace o aceptan preguntas
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por Unexes (124 intervenciones) el 28/09/2014 21:16:35
Disculpa sigo perdido, este tema es la primera vez que lo toco y estoy en blanco, desconozco todo sobre el tema de las IP, me ha surgido el problema y debo solucionarlo a pesar de mi inexperiencia.

Me comentas que lo normal es que me grabe la IP del servidor, lo que necesitaría es la IP del usuario.

txema El código que me has enviado me produce dos errores:

1
Notice: Undefined index: HTTP_X_FORWARDED_FOR in C:\wamp\www\PRUEBAS Escorts-2014-09-16\FormularioDatos\Enviar_FormularioPersonal.php on line 111
se corresponde con este código
1
2
if ($_SERVER['HTTP_X_FORWARDED_FOR'] ) {
        $ipuser = $_SERVER['HTTP_X_FORWARDED_FOR'];
y el otro error es:
1
Notice: Undefined index: HTTP_CLIENT_IP in C:\wamp\www\PRUEBAS Escorts-2014-09-16\FormularioDatos\Enviar_FormularioPersonal.php on line 114
se corresponde con este código:
1
2
elseif ($_SERVER['HTTP_CLIENT_IP'] ) {
        $ipuser = $_SERVER['HTTP_CLIENT_IP'];
y como ya te indique me graba "::1"
Como lo soluciono, 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
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por txema (18 intervenciones) el 28/09/2014 21:29:45
Entiendo que sigues en local.

Limita todo mi código a
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if (getenv('HTTP_X_FORWARDED_FOR' ) ) {
        $ip_real = getenv('HTTP_X_FORWARDED_FOR' );
    }
    elseif (getenv('HTTP_CLIENT_IP' ) ) {
        $ip_real = getenv('HTTP_CLIENT_IP' );
    }
    else {
        $ip_real = getenv('REMOTE_ADDR' );
    }
echo $ip_real;
?>

Lo normal es que te de como IP ::1
Eso es que todo está bien.

Cuando levantes la página puedes poner todo el código completo y, al menos en mi caso, no te dará error.

Reitero, esos errores en local son normales y no debes preocuparte por ellos.
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por Unexes (124 intervenciones) el 28/09/2014 22:19:03
Gracias txema.

Con respecto a lo que me dices que limite el código, ya lo habia hecho y efectivamente me graba ::1 y los errores desaparecen.

Estoy subiendo una parte de mis páginas al servidor para probarla y mañana te podre decir algo.

Muchas Gracias y hasta mañana.
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por Unexes (124 intervenciones) el 03/10/2014 09:57:03
txema.

Perdona la tardanza en contestar pero he tenido un problemilla en mi ordenador y lo he tenido que solucionar.

He probado la página en el servidor y efectivamente me graba la IP, pero sigo sin resolver el problema principal y es que cuando se graban datos a través del formulario en la tabla desde el mismo ordenador cada vez me pone una IP distinta y por lo tanto no la puedo utilizar, ya que necesitaría que un determinado ordenador conectado desde el mismo sitio me pusiese siempre la misma IP.

Hay alguna forma de que un determinado ordenador me grabe la misma ip.

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
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar en la tabla la ip del usuario

Publicado por txema (18 intervenciones) el 03/10/2014 11:50:58
Casi todos utilizamos IP dinámica que nos llega del proveedor de la señal, o por decirlo de otro modo, del router. Esto hace que cambie cada vez que se reinicia el router o que nuestro proveedor lo determine.

Su utilización puede servir a nivel policial ya que éllos pueden requerir al provehedor de señal qué usuario utilizaba una IP determinada en un momento concreto. Pero aunque desde una web podamos bloquear el acceso a una IP concreta, los usuarios tienen muchas formas de eludir la restricción

Si lo que queremos es comprobar que un usuario es el mismo que el que entro ayer o hace unas horas, tendríamos que acudir a otros parámetros:
- Si lo comprobamos cuando está logueado puede servir in ID de usuario.
- Si lo realizamos al entrar el la página, podremos hacerlo a través de cookies creadas al efecto (claro que el usuario puede borrarlas aún cuando nosotros le demos a la cookie una duración prolongada).

Te pongo un ejemplo, en el que puedo utilizar la IP para localizar un equipo (así lo hago para centrar un mapa a la región del visitante):
Generalmente me muestra (en mi caso y aun con nº de IP diferente) una ubicación que está a 500 metros de mi domicilio. Algunas veces me lo traslada a unos 70 kilómetros. La razón es que la señal de mi proveedor me llega desde ese punto (tal vez por mantenimiento de equipos o exceso de usuarios conectados desde mi zona).
No hace mucho me comentaba un tinerfeño que la dirección de su IP (coordenadas) le situaban en Madrid (a unos 2000 kilómetros).
Y no es correcto tomar la ubicación de la IP (coordenadas) para tus propósitos ya que desde ese mismo punto toman la señal múltiples usuarios.
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