Foros del Web » Programando para Internet » PHP »

evitar el conteo de los refresh

Estas en el tema de evitar el conteo de los refresh en el foro de PHP en Foros del Web. bueno en un foro de otra web postee mi codigo con el ke muestro un determinado tutorial la cosa es k ke kiero ke el ...
  #1 (permalink)  
Antiguo 15/08/2005, 19:45
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
evitar el conteo de los refresh

bueno en un foro de otra web postee mi codigo con el ke muestro un determinado tutorial la cosa es k ke kiero ke el contador de lecturas no se ande actualizando cada 2 x 3 o sea ke cuando se esta refrescando la pagina siempre se le suma 1 visita o lectura y kisiera ke solo sea 1 vez; un me modifico el codigo pero no me funciona, ahora cuando entro a un tutorial cuenta una visita, si presiono F5 el contador de lecturas desaparece si salgo de esa pagina y regreso luego de unos 5 segs. se vuelve a mostrar el contador pero sigue sumando las visitas :s

aki pondre el codigo como yo lo tengo y el ke me modificaron

Código PHP:
<?
// codigo original
include('config.php');
include(
'bbcode1.php');
$query "select * from tutoriales where id='$id'";
$resp mysql_query($query);
while (
$datos mysql_fetch_array($resp)) { 
$num $datos["visitas"] + 1;
mysql_query("update tutoriales set visitas='$num' where id='$id'"); 
$fecha date("d/m/Y",$datos[fecha]);
$des $datos[descripcion];
$texto bbcode($datos[contenido]);
$texto php($datos[contenido]);
$cat $datos[categoria];
$com $datos[comentarios];
echo 
'<table width="550" border="0" cellpadding="0" cellspacing="1" bgcolor="#ffffff" class="tablareg">
<tr>
<td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><a class="link4" href="tutorialescat.php"><b>Categorías</b></a> | <a class="link4" href="javascript:history.back()"><b>'
.$cat.'</b></a></td>
</tr>
<tr>
<td style="border: 1px solid #999999; padding: 5px;"><b><font size="3">'
.$datos[titulo].'</font></b></td>
</tr>
<tr><td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><img src="images/user.gif"> Enviado por <a class="link4" href=perfil.php?id='
.$datos[idautor].'><b>'.$datos[autor].'</b></a> el <b>'.$fecha.'</b> - visto: <b>'.$num.'</b> veces.</td></tr>
<tr><td><div class="cuerpo">'
.$des.'<br />'.$texto.'</div></td></tr>
</table><br>'
;
}
mysql_query($query);
?>

Código PHP:
<?
// codigo modificado
include('config.php');
include(
'bbcode1.php');
$query "select * from tutoriales where id='$id'";
$resp mysql_query($query);
while (
$datos mysql_fetch_array($resp)) {

if(!isset(
$_SESSION['pagina'])) $_SESSION['pagina'] = ""// nueva linea agregada
if($_SESSION['pagina']== "" OR $_SESSION['pagina']<>"pagina".$id) { // otra nueva linea agregada
$num $datos["visitas"] + 1;
mysql_query("update tutoriales set visitas='$num' where id='$id'"); // cuento la visita o lectura
$_SESSION['pagina'] = "pagina".$id// y otra mas
}

$fecha date("d/m/Y",$datos[fecha]);
$des $datos[descripcion];
$texto bbcode($datos[contenido]);
$texto php($datos[contenido]);
$cat $datos[categoria];
$com $datos[comentarios];
echo 
'<table width="550" border="0" cellpadding="0" cellspacing="1" bgcolor="#ffffff" class="tablareg">
<tr>
<td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><a class="link4" href="tutorialescat.php"><b>Categorías</b></a> | <a class="link4" href="javascript:history.back()"><b>'
.$cat.'</b></a></td>
</tr>
<tr>
<td style="border: 1px solid #999999; padding: 5px;"><b><font size="3">'
.$datos[titulo].'</font></b></td>
</tr>
<tr><td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><img src="images/user.gif"> Enviado por <a class="link4" href=perfil.php?id='
.$datos[idautor].'><b>'.$datos[autor].'</b></a> el <b>'.$fecha.'</b> - visto: <b>'.$num.'</b> veces.</td></tr>
<tr><td><div class="cuerpo">'
.$des.'<br />'.$texto.'</div></td></tr>
</table><br>'
;
}
mysql_query($query);
?>
no se ke pueda estar fallando en el segundo codigo, dijo ke creara una sesion llamada $_SESSION[pagina] y mediante un if, pregunto cual es el valor de la variable $_SESSION['pagina']. En caso de ser distinto a un valor determinado, actualizo la tabla de tutoriales sumandole una visita, e igualo el nombre de la variable $_SESSION['pagina'] a un valor que por ejemplo puede ser "pagina".$id donde $id es el id del tutorial. Ese "pagina".$id es el valor determinado. pero la cosa es ke sigue sin funcionar, alguien sabe ke pueda estar fallando o alguna otra solucion please??

muchas gracias y Un saludo
  #2 (permalink)  
Antiguo 15/08/2005, 19:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En tu segundo código .. donde usas sesiones .. donde haces session_start()? .. si no lo usas la sesión no se va a crear.

Por lo demás .. el tema de crear una variable de sesión es para hacer la validación de que si existe (empty() en lugar de "isset()" o liarse si !='' y más temas) .. no ejecutar cierta parte de tu código (el del conteo efectivo de la visita) .. para eso, debes englobar bajo un "if" todo ese código:
Código PHP:
session_start();
if(empty(
$_SESSION['pagina'])) {
// aquí tu código que suma una visita ...
} else {
// se crea la sesión si no existe .. 
$_SESSION['pagina'] = "da_igual_el_valor_no_lo_necesitamos";


// si usas el mismo script para visualizar su valor .. aquí es el punto donde debes poner el código que corresponda. 
Por cierto .. el incremento de tu vistia cara a SQL se puede resumir en :

Código PHP:
mysql_query("update tutoriales set visitas=visitas+1 where id='$id'"); 
sin tener que primero obtener su valor para sumar una unidad desde PHP ..

Luego si quieres haz una consulta SQL a tu BD para ver el valor que quedó tanto si se incrementó por qué correspondía o no ... pero no antes.

Un saludo,
  #3 (permalink)  
Antiguo 15/08/2005, 20:50
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
uhmmm, gracias lo del session_start() lo tengo antes de la etiketa <html> pero bueno segun como te he entendido deje el codigo de esta manera

Código PHP:
<?
include('config.php');
include(
'bbcode1.php');
if(!empty(
$_SESSION['pagina'])) {
mysql_query("update tutoriales set visitas='visitas+1' where id='$id'"); // aquí tu código que suma una visita ...
} else {
// se crea la sesión si no existe ..
$_SESSION['pagina'] = "";
}
$query "select * from tutoriales where id='$id'";
$resp mysql_query($query);
while (
$datos mysql_fetch_array($resp)) { 
$fecha date("d/m/Y",$datos[fecha]);
$des $datos[descripcion];
$texto bbcode($datos[contenido]);
$texto php($datos[contenido]);
$cat $datos[categoria];
$com $datos[comentarios];
$num $datos[visitas];
echo 
'<table width="550" border="0" cellpadding="0" cellspacing="1" bgcolor="#ffffff" class="tablareg">
<tr>
<td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><a class="link4" href="tutorialescat.php"><b>Categorías</b></a> | <a class="link4" href="javascript:history.back()"><b>'
.$cat.'</b></a></td>
</tr>
<tr>
<td style="border: 1px solid #999999; padding: 5px;"><b><font size="3">'
.$datos[titulo].'</font></b></td>
</tr>
<tr><td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><img src="images/user.gif"> Enviado por <a class="link4" href=perfil.php?id='
.$datos[idautor].'><b>'.$datos[autor].'</b></a> el <b>'.$fecha.'</b> - visto: <b>'.$num.'</b> veces.</td></tr>
<tr><td><div class="cuerpo">'
.$des.'<br />'.$texto.'</div></td></tr>
</table><br>'
;
}
mysql_query($query);
?>
y me dejo las visitas en 0 y ya no se mueven de ahi, pedi a unos amigos ke entraran al mismo tutorial tb se les pone 0 como valor :s
  #4 (permalink)  
Antiguo 15/08/2005, 20:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Fijate bien .. por qué yo no "negé" el empty()

if(!empty($_SESSION['pagina'])) {

lo correcto es:

if(empty($_SESSION['pagina'])) {

Un saludo,
  #5 (permalink)  
Antiguo 15/08/2005, 21:16
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
uhmm pues primero lo puse sin ! y se planto en 1(y eso ke ya tenia 14 lecturas) luego le puse ! y se borraron todas y se kedo en 0 juazz :s
  #6 (permalink)  
Antiguo 16/08/2005, 10:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Como que se "borraron"? .. una cosa es que aumente o no tu conteo .. pero lo que tuvieras en ese campo tan sólo lo actualizas (con tu UPDATE).

Un saludo,
  #7 (permalink)  
Antiguo 16/08/2005, 11:06
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
pues asi me paso, las lecturas de hicieron humo :S
el mismo tio ke me ayudo en el otro foro me dio este codigo

Código PHP:
<?
include('config.php');
include(
'bbcode1.php');
$query "select * from tutoriales where id='$id'";
$resp mysql_query($query);
while (
$datos mysql_fetch_array($resp)) {

if (!
session_id()) session_start();
$num $datos["visitas"] + 1;
$pagina "pagina".$id;
if(!isset(
$_SESSION["pagina"]) OR $_SESSION["pagina"]<>$pagina) {
mysql_query("update tutoriales set visitas='$num' where id='$id'"); // cuento la visita o lectura
}
$_SESSION['pagina'] =  "pagina".$id;

$fecha date("d/m/Y",$datos[fecha]);
$des $datos[descripcion];
$texto bbcode($datos[contenido]);
$texto php($datos[contenido]);
$cat $datos[categoria];
$com $datos[comentarios];
echo 
'<table width="550" border="0" cellpadding="0" cellspacing="1" bgcolor="#ffffff" class="tablareg">
<tr>
<td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><a class="link4" href="tutorialescat.php"><b>Categorías</b></a> | <a class="link4" href="javascript:history.back()"><b>'
.$cat.'</b></a></td>
</tr>
<tr>
<td style="border: 1px solid #999999; padding: 5px;"><b><font size="3">'
.$datos[titulo].'</font></b></td>
</tr>
<tr><td bgcolor="#eeeeee" style="border: 1px solid #999999; padding: 3px;"><img src="images/user.gif"> Enviado por <a class="link4" href=perfil.php?id='
.$datos[idautor].'><b>'.$datos[autor].'</b></a> el <b>'.$fecha.'</b> - visto: <b>'.$num.'</b> veces.</td></tr>
<tr><td><div class="cuerpo">'
.$des.'<br />'.$texto.'</div></td></tr>
</table><br>'
;
}
mysql_query($query);
?>
y al parecer funciona, pero le veo una pega, ke las visitas las cuenta 1 una sola vez(eso no seria problema), pero cuando entro en otra no la cuenta nada(antes de esto entre al phpmyadmin para fijarme en las lecturas ke tenia) y ps cual le he dao mil vueltas y no le encuentro el arreglo :(
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 18:56.