Foros del Web » Programando para Internet » PHP »

Mejor metodo para hacerlo

Estas en el tema de Mejor metodo para hacerlo en el foro de PHP en Foros del Web. Tengo el siguiente codigo PHP: Código PHP: <?php                                                                                                        $result_visitas =  mysql_query ( "SELECT * from visitas_usuarios WHERE id_user_visitado=$qry1[id] ORDER BY fecha_visita DESC, hora_visita DESC LIMIT 5" );                                                                   $id_usuario_que_visita  =  $_SESSION [ 'idplayer' ]; ...
  #1 (permalink)  
Antiguo 26/01/2013, 17:54
 
Fecha de Ingreso: marzo-2008
Mensajes: 105
Antigüedad: 16 años, 1 mes
Puntos: 0
Mejor metodo para hacerlo

Tengo el siguiente codigo PHP:

Código PHP:
<?php
                        
    
                                        
                                $result_visitas
mysql_query("SELECT * from visitas_usuarios WHERE id_user_visitado=$qry1[id] ORDER BY fecha_visita DESC, hora_visita DESC LIMIT 5");
                                
                                
$id_usuario_que_visita $_SESSION['idplayer'];
                                
$id_usuario_que_yo_visito $qry1[id];
                                
                                if(
$qry1[id] ==$id_usuario_que_visita){
                                
                                
/* AQUI HACEMOS EL FILTRO PARA QUE YO MISMO NO ME PUEDA VISITAR */
                                
                                
}else if ($_SESSION['web'] == 1) {
                                
                                
                                            
//* hora del server: */
                                            
$hora=time();
                                            
$movhoras 7;
                                            
$hora $hora+($movhoras 60 60);
                                            
$hora date("H:i:s"$hora );
                                            
                                            

                                
                                
                                
                                
$fecha=date("d/n/Y");
                                
                                
                                
$id_usuario_que_visita $_SESSION['idplayer'];
                                
                                
$result_visitas_de_usuario mysql_query ("SELECT * from visitas_usuarios WHERE id_user_visita=$id_usuario_que_visita and id_user_visitado=$qry1[id]");
                                
                                
$row_visitas_de_usuario mysql_fetch_array($result_visitas_de_usuario);
                                
                                
$fecha_que_visito_al_usuario $row_visitas_de_usuario["hora_visita"];
                                
                                
/* Aqui comprobamos la hora*/
                                
                                
$resta $fecha_que_visito_al_usuario $hora;
                                
                                
                                if(
$resta <= 3){
                            
                                
/* AQUI NO HACEMOS NADA PUESTO QUE EL USUARIO YA HA VISITADO AL USUARIO QUE HA VISTO */
                                
                                
}else{
                                
                                
$query_insertar_visita "INSERT INTO visitas_usuarios VALUES('$id_usuario_que_visita','$id_usuario_que_yo_visito','$fecha','$hora')";
                                
mysql_query($query_insertar_visita);
                                
                                }
                                
                                
                                
                                
                                }
                                
                                
                                
                                
$numero_visitasmysql_num_rows($result_visitas);
                                
                                        if (
mysql_num_rows($result_visitas)==0){

                                        echo 
"Aún no tienes visitas";
                                        
                                        }else{
                                        
                                        while(
$row_usuarios mysql_fetch_array($result_visitas)){
                                        
                                        
$usuario_visita $row_usuarios[id_user_visita];
                                        
                                        
$query_usuario_visita mysql_query("SELECT usuario from usuarios where id=$usuario_visita");
                                        
                                        
$row_usuario_visita mysql_fetch_array($query_usuario_visita);
                                        
                                        
$nombre_usuario_visita $row_usuario_visita["usuario"];
                                        
                                        
                                        
                                        echo 
"<tr><td><a href='perfil.php?accion=ver_perfil&usuario=$nombre_usuario_visita'>$nombre_usuario_visita</a></td></tr>";
                                        }
                                        
                                        
                                        
                                        }
                                            
                                            
?>
El caso es que quiero hacer un sistema de visitas, pero correcto, si yo visito un perfil de un usuario, que por cada vez que yo le visite, cuente una visita, entonces, manejando este codigo, ¿cual es la mejor manera de hacer un sistema de visitas por tiempo? Me explico, mi idea es que cada 3 horas puedas visitar el perfil de ese usuario, si esta dentro del rango de 3 horas, es decir, menos de 3 horas, no cuente esa visita, he pensado haciendo una resta, pero cuando una es menor que la otra, el numero sale negativo, por lo que, el sistema falla.

Gracias y un saludo.
  #2 (permalink)  
Antiguo 26/01/2013, 18:14
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
Puntos: 270
Respuesta: Mejor metodo para hacerlo

Cita:
Iniciado por Sard Ver Mensaje
Me explico, mi idea es que cada 3 horas puedas visitar el perfil de ese usuario, si esta dentro del rango de 3 horas, es decir, menos de 3 horas, no cuente esa visita
Que cada 3 horas puedas visitar el perfil del usuario?
No querrás decir que todas las visitas que el usuario A, haga al perfil de un usuario B, dentro de un rango de 3 horas, cuente como 1 sola visita?
Lo estás metiendo en base de datos...Estás borrándolo también? Si tienes 1000 usuarios, y vas a hacer las combinaciones de usuario que visita-perfil que ve, tienes 1000*1000 combinaciones (un usuario puede ver su propio perfil).Y eso, si reutilizaras los registros (hicieras update, en caso de que una combinación exista...), pero estás haciendo inserts, con lo cual, sigue multiplicando...(el peor caso serían 1000*1000*8 registros / día)

No te es más fácil lo siguiente?
- Cuando el usuario visita un perfil, compruebas si el usuario tiene una cookie con nombre igual al id del perfil visitado.
Si no la tiene, le pones una cookie nombre el id del perfil visitado, y con tiempo de expiración 3 horas.
Si la tiene, no haces nada.
A menos que en 3 horas, el usuario visite muchisimos perfiles (tantos como para sobrepasar el límite de almacenamiento de cookies), te ahorras unos cuantos registros, selects e inserts en tu base de datos.
  #3 (permalink)  
Antiguo 26/01/2013, 19:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 105
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Mejor metodo para hacerlo

Gracias por responder:

El caso es que pongo:

$value= $qry1[id];
setcookie("TestCookie", $value, time()+10800); /* expira en una hora */


Y me sale:
Warning: Cannot modify header information - headers already sent by (output started at

Mi php.ini es:

allow_url_include = On
allow_url_fopen=1
session.use_cookies = 1
session.auto_start = 1
session.name = PHPSESSID
session.cookie_lifetime = 0
session.cookie_path = /
session.serialize_handler = php
  #4 (permalink)  
Antiguo 26/01/2013, 19:08
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
Puntos: 270
Respuesta: Mejor metodo para hacerlo

Si lees el error, te dice que el output de la página ya ha comenzado.
Las cookies van en la cabecera html enviada *antes* del contenido de la página.
Lo que te dice ese error es que estás intentando hacer algo que afecta a la cabecera, cuando ésta ya se ha enviado, porque has empezado a generar salida desde tus scripts.

Traducido de forma más práctica:
-Pones las cookies después de mostrar html, hacer algún echo, o cargar algún php que tiene espacios al final.
  #5 (permalink)  
Antiguo 26/01/2013, 19:20
 
Fecha de Ingreso: marzo-2008
Mensajes: 105
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Mejor metodo para hacerlo

El caso es que sigo teniendo problemas, he probado un codigo de php.net:
Cita:
<?php
// crear las cookies
setcookie("cookie[tres]", "cookietres");
setcookie("cookie[dos]", "cookiedos");
setcookie("cookie[uno]", "cookieuno");

// imprimirlas luego que la página es recargada
if (isset($_COOKIE['cookie'])) {
foreach ($_COOKIE['cookie'] as $name => $value) {
$name = htmlspecialchars($name);
$value = htmlspecialchars($value);
echo "$name : $value <br />\n";
}
}
?>
Y recibo estos fallos:

Warning: Cannot modify header information - headers already sent by (output started at /home/arkheclu/public_html/cookie.php:2) in /home/arkheclu/public_html/cookie.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /home/arkheclu/public_html/cookie.php:2) in /home/arkheclu/public_html/cookie.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /home/arkheclu/public_html/cookie.php:2) in /home/arkheclu/public_html/cookie.php on line 6
  #6 (permalink)  
Antiguo 26/01/2013, 19:31
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
Puntos: 270
Respuesta: Mejor metodo para hacerlo

Te está diciendo que el fichero cookie.php, en su línea 2, está generando salida..Hay algún espacio, o alguna cosa en ese fichero , antes de <?php ?
  #7 (permalink)  
Antiguo 26/01/2013, 19:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 105
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Mejor metodo para hacerlo

Ok, ahora funciona, pero el caso es que yo tengo que crear esa cookie si se cumple el if, por lo tanto si pongo lo de arriba, saltará el error :S entonces solucion?
  #8 (permalink)  
Antiguo 26/01/2013, 20:04
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
Puntos: 270
Respuesta: Mejor metodo para hacerlo

Que tengas que crear la cookie si se cumple el if, no significa que ese if tengas que hacerlo después de haber generado HTML.
Ese if puedes ejecutarlo antes de generar ninguna salida.

Etiquetas: hacerlo, metodo, mysql, select, 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 21:43.