Foros del Web » Programando para Internet » PHP »

Hace lo que hay dentro del if aunque no se cumpla la condición ¬¬

Estas en el tema de Hace lo que hay dentro del if aunque no se cumpla la condición ¬¬ en el foro de PHP en Foros del Web. Hola, tengo unos problemillas y unas dudas: Lo primero algo que no me explico ¬_¬ : Tengo un index.php con lo siguiente: <?php require("./php/config.php"); if ...
  #1 (permalink)  
Antiguo 14/05/2003, 14:03
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Hace lo que hay dentro del if aunque no se cumpla la condición ¬¬

Hola, tengo unos problemillas y unas dudas:

Lo primero algo que no me explico ¬_¬ :

Tengo un index.php con lo siguiente:

<?php
require("./php/config.php");

if ($dir == "")
{
$dir="inicio";
}

if ($dir == "inicio")
{
$db_conexion= mysql_connect ($BD_servidor, $BD_user, $BD_password);
mysql_select_db ($base_de_datos);

$query = mysql_query("SELECT visitas FROM contador");
$vis = mysql_fetch_array($query);
$num_visitas = $vis["visitas"]+1;
echo($vis["visitas"].'<br>');
echo($num_visitas.'<br>');

mysql_query('UPDATE contador SET visitas="'.$num_visitas.'"');


}

?>

la variable $dir se pasa por url (index.php?dir=loquesea), si está en blanco se pone "inicio", y sí es "inicio" quiero que me incremente el contador de visitas.

Pues bien, el problema es que SIEMPRE incrementa el contador en la base de datos, y cuando es "inicio" lo hace dos veces, y no sé porqué es esto.

Cómo curiosidad decir que si $dir no es "inicio" los "echo" no los hace.

Alguna idea?¿?


Bueno, a parte de esto, también estoy haciendo un sistema de estadisticas, y tengo unas dudillas:

Hay alguna forma de saber la IP "real" del usuario que está visitando la página, lo digo porque los usuarios de cable y muchos de ADSL (por lo menos en España) navegan a través de proxys, por lo que sólo consigo la IP del proxy, y me interesa la IP real.

y para saber el Sistema Operativo y el navegador? se puede ahcer con PHP?¿? (con javascript más o menos sé hacerlo)


Venga, un saludo a todo el mundo y a ver si me podeis echar un cablecillo.
  #2 (permalink)  
Antiguo 14/05/2003, 14:27
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Primero, te recomendaria que no incrementaras asi el valor en la tabla. Si lo que quieres es simplemente incrementar en uno el valor del campo, usa esta consulta:

UPDATE contador SET visitas=visitas+1

siendo visitas un campo numerico. De esta forma siempre incrementara en uno el campo, lo que no esta asegurado en la forma que lo haces actualmente debido a los problemas de concurrencia. Imaginate que el usurio 1 esta ejecutando la linea del echo($vis["visitas"].'<br>'); y en ese mismo momento el usuario 2 ejecuta el select, leeyendo el mismo valor que leyo en su momento el usuario 1 (que todavia no lo ha actualizado). El usuario 1 lo actualiza en la BD. El usuario 2 hace los echos y actualiza la BD con el mismo dato que lo hizo el usuario 1. Por lo tanto has perdido un conteo.

Y si cuando no es "inicio" no ejecuta los echo, no creo que ejecute el mysql_query().

¿Usas redirecciones? Porque puede ser que alguna redireccion haga que se ejecute 2 veces el codigo, una vez con el valor correcto y otra con el vacio. O quizas un problema con include(). La verdad es que para que con "inicio" se ejecute 2 veces es que se llame al codigo 2 veces.

Sobre el famoso proxy de timofonica, en www.aui.es tienen una seccion dedicada a el, con un link a un documento de telefonica que explica como se puede "lidiar" con el. Segun parece, el proxy crea otra variable, creo que algo como HTTP_FORWARD_noseque.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 14/05/2003, 17:07
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Es que llevo toda la tarde dandole vueltas y no sé que pasa, realmente parece que ejecuta la página dos veces, pero no sé porqué.

Y lo más raro es que si entro en cualquier otra sección ( $dir distinto de "inicio") el contador se imcrementa en uno, pero no muestra los echo's.

Lo de UPDATE contador SET visitas=visitas+1 , lo haré así, de momento lo tenía en plan chapucero para ver si funcionaba.

Supongo que debe ser algo de código del index.php que tenga mal, pero no se me ocurre qué puede ser.

En cuanto a lo del proxy de telefonica voy a mirar el link, pero supongo que esa variable sólo servirá para el de telefonica, no? yo por ejemplo tengo cable y sólo sale la IP del proxy, tengo entendido que hay alguna otra variable para sacar la IP real, pero algunos firewalls lo interpretan como un ataque.

En fin, muchas gracias por la respuesta, seguiré haciendo pruebas

Saludos.



Última edición por Keysher; 14/05/2003 a las 17:00
  #4 (permalink)  
Antiguo 14/05/2003, 20:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo del proxy .. y obtener la IP "real" prueba con la variable de servidor que te comenta josemi .. :

Código PHP:
function getip() {
if (
$_SERVER) {
if ( 
$_SERVER[HTTP_X_FORWARDED_FOR] ) {
$realip $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif ( 
$_SERVER["HTTP_CLIENT_IP"] ) {
$realip $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip $_SERVER["REMOTE_ADDR"];
}

} else {
if ( 
getenv'HTTP_X_FORWARDED_FOR' ) ) {
$realip getenv'HTTP_X_FORWARDED_FOR' );
} elseif ( 
getenv'HTTP_CLIENT_IP' ) ) {
$realip getenv'HTTP_CLIENT_IP' );
} else {
$realip getenv'REMOTE_ADDR' );
}
}
return 
$realip;
}

// ejemplo
echo getip(); 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 15/05/2003, 03:41
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Cluster, muchas gracias, lo he probado y con mi ip (tengo cable) funciona.



En cuanto al problema de que siempre me incremente el contador, creo que ya he captado el problema, pero no la causa ni la solución:

al parecer cuando se carga el index.php SIEMPRE entra por el primer if:

if ($dir == "")
{
$dir="inicio";
}

independietemente de que si por la url se le haya pasado o no un valor a $dir.

y claro está, al entrar por el primero entra también por el segundo.

Pero ahí no queda la cosa, sino que después vuelve a ejecutar la página, esta vez con el valor bueno de $dir, por lo tanto si ese valor es "" o "inicio" vuelve a incrementar el contador.

Conclusión, cuando no tiene que incrementar el valor lo hace una vez y cuando tiene que hacerlo dos veces.

Causa, ni idea, por alguna extraña razón ejecuta el script dos veces, una sin valor en $dir y otra con el valor que le paso por url.

El caso es que en la carga de la página no parece que lo haga dos veces, ni tengo nada de código que le diga que haga eso.

Tengo la página en miarroba.com, tendría esto algo que ver ?¿?

La solución podría ser que cuando $dir = "" decremente en uno el contador, así creo que iría bien, pero me parece bastante chapucera.

Un saludo, gente!
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 05:50.