Pues sí, ese es un fallo que tiene: que suma 1 cada vez que carga la página, y si la persona le da Actualizar Página, pues le sumará la visita -_-U... En mi caso no es crítico, porque mi página es personal y generalmente no da para hacer F5, pero en otro tipo de sitios, pues ya es otro cuento ¬_¬...
Sobre lo de cómo lo implementé, pues sí, dentro de una función. La verdad todo en ese sitio que hice va encapsulado en funciones (lo cual espero optimizar cuando haga mi v.3 del sitio, con clases y todo eso tan bonito de la programacion orientada a objetos ^^).
En cuanto a lo del ranking, te dejo un ejemplo de implementacion.
Código PHP:
<?
function Ranking($id)
{
$ranking = 0;
// consultas las visitas de los articulos en la base
$result = mysql_query("select id from articulos order by visitas desc");
$i = 1;
while ($fila = mysql_fetch_array($result))
{
if ($fila["id"] == $id)
{ $ranking = $i; break; }
$i++;
}
return $ranking;
}
function SumarVisita($id)
{
$contador = 0;
// sumas la visita del articulo en la base
$result = mysql_query("update articulos set visitas = visitas + 1 where id = ".$id);
if ($result)
{
// obtienes el nuevo contador
$result2 = mysql_query("select visitas from articulos where id = ".$id);
while ($fila = mysql_fetch_array($result))
{ $contador = $fila["visitas"]; }
}
return $contador;
}
?>
<?
// el contador
$contador = SumarVisita($_GET["id"]);
print $contador;
// la posición en el ranking
print Ranking($_GET["id"])."º";
?>
Ahi no puse el cierre del objeto mysql, porque es la idea general del cuento. Al final le agregué el Contador también...