Septiembre 21, 2017, 02:27:34 pm
Visitante



Autor Tema:  [Prueba] Visitas Diarias SQL [Probando si me sale]  (Leído 1329 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Julio 05, 2014, 04:42:53 pm

MadeInYourWorld




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Diseñador y Informático
  • Actividad

  • 0%
  • Logros

Más información

Bueno chicos... esta idea me la dio un amigo del skype y pienso que es bueno saber las visitas diarias que tiene tu sitio web.
Es un código muy sencillo pero útil que guardara los datos de cada día en la base de datos.

Instalación:
-Sube el archivo sql-script.sql a tu base de datos.
-Edita los datos del array de la linea 6 (Servidor, usuario, contra y el nombre de la db.) del archivo script-visitas.php.
-Coloca un include hacia el archivo script-visitas.php en las paginas donde quieres que se cuenten las visitas diarias.

Este código me duro 3 minutos hacerlo, Aun no lo e probado pero confío en que funciona.

Espero que les sea de utilidad.  Algún falo favor reportarlo a este tema, recuerden que aun no lo e probado.


script-visitas.php
Código: [Seleccionar]
<?php
/*
Script Visitas Diarias
*/
// Coneccion:
$conec = array("servidor" => "AQUI SERVIDOR","usuario" => "AQUI EL USUARIO","contra" => "AQUI LA CONTRA","basededatos" => "AQUI NOMBRE DE LA BD");
$coneccion=mysql_connect($conec[servidor],$conec[usuario],$conec[contra]) or die (mysql_error());
mysql_select_db($conec[basededatos],$coneccion);
// Script (No Editar):
$query "SELECT * FROM `online` WHERE fecha = '".date("d-m-Y")."'";
$resp = @mysql_query($query);
$rows = @mysql_num_rows($resp);
$online = @mysql_fetch_array($resp);
if(
$rows 0) {
$resultado $online['visitas'] + 1;
$sql "UPDATE online SET visitas = '".$resultado."' WHERE fecha = '".date("d-m-Y")."'";
@
mysql_query($sql);
}else{
$sql2 "INSERT INTO online (fecha,visitas) VALUES ('".date("d-m-Y")."','1')";
@
mysql_query($sql2);
}
/*
Script Visitas Diarias
*/
?>


sql-script.sql



Código: [Seleccionar]
CREATE TABLE `online` (
  `id` int(11) NOT NULL auto_increment,
  `visitas` varchar(255) NOT NULL,
  `fecha` varchar(255) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=38 DEFAULT CHARSET=latin1 AUTO_INCREMENT=38 ;



Saludos... ^^ Ñe

Linkback: http://minecraftmin.net/index.php?topic=3419.0
« Última modificación: Julio 05, 2014, 06:31:58 pm por moltax »





Respuesta #1 Julio 05, 2014, 05:14:04 pm

Kirsten




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Eris quod sum
  • Actividad

  • 0%
  • Logros

Más información

Pues mira, lo pruebo ahroa y te comento editare este mensaje con el resultado

EDIT: Respuesta.

Pues mira, lo pruebo ahroa y te comento editare este mensaje con el resultado

Gracias lo hice rápido con un Tutorial y se me ocurrió hacer esto, espero tu respuesta para editar o no el post.

No lo he probado tal cual, si no que he realizado algunos cambios, ya sea porque está mal o porque usuamos diferentes apis para conectarnos con la base de datos mysql (en mi caso, uso la extensión mysqli)

Comenzando por la creación de la tabla en la DB

Código: [Seleccionar]
CREATE TABLE `online` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `visitas` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  `fecha` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;

He cambiado el engine para adaptarlo a mi BD (InnoDB). En tu script pones como ID unico el campo 'id', pero debería de ser primary key. Esto es un poco por hacerlo a lo chapuza, ya que lo que debería de guardar sería el número de visitas que hace cada usuario, y luego sumarlas en total (Ahora solo guardas una fila con id 1, el número de visitas y el último día que alguien se conectó, con lo que la utilidad del campo id podría ser mejor, y no sólo almacenar un 1 para siempre).

Ahora con el script principal (la principal diferencia es el uso de mysqli):

Código: [Seleccionar]
<?php
 
require ("conexionDB.php");

 
$consulta "SELECT * FROM `online` WHERE fecha = '".date("d-m-Y")."'";
 
$res $mysqli->query($consulta);
 
$rows $res->num_rows;
 
$online $res->fetch_array();

 if(
$rows 0) {
 
$resultado $online['visitas'] + 1;
 
$consulta "UPDATE online SET visitas = '".$resultado."' WHERE fecha = '".date("d-m-Y")."'";
 }else{
 
$consulta "INSERT INTO online (fecha,visitas) VALUES ('".date("d-m-Y")."','1')";
 }
 
 
$mysqli->query($consulta);
?>

El contenido de "conexionDB.php" es este:

Código: [Seleccionar]
<?php
$mysqli 
= new mysqli("host_db""usuario_db""contraseña_db""nombre_db");
if (
mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}
?>

Como ves es diferente al tuyo. La conexión a la base de datos yo la tengo definida en ese fichero ("conexionDB.php"). Hasta el if es todo igual, sólo que usuando mysqli.
Ahora bien, en tu script tienes 2 ejecuciones de la query, una para ver si el número de filas es mayor que 0 o no. Es decir que vas a ejecutar una si o sí, así que lo mejor es definir sólo la consulta que quieres hacer, y fuera del if ejecutarla.

Funcionar funciona, exactamente como lo tienes tu escrito no lo sé, pero tal y como te lo presento yo, funciona. Lo ideal sería definir el número de conexiones para cada usuario (y así aprovechar el campo id de la tabla en la BD para almacenar el id del usuario).

EDIT: He intentado modificar lo mínimo de tu script, pero se puede hace mucho más pequeño.

« Última modificación: Julio 06, 2014, 02:25:39 am por Kirsten »
Todo lo que escribo es SUBJETIVO, es mi OPINIÓN PERSONAL, dicho de otra manera, NO es una VERDAD UNIVERSAL, y PUEDO EQUIVOCARME como cualquier otra persona.


Respuesta #2 Julio 05, 2014, 05:16:07 pm

MadeInYourWorld




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Diseñador y Informático
  • Actividad

  • 0%
  • Logros

Más información

Pues mira, lo pruebo ahroa y te comento editare este mensaje con el resultado

Gracias lo hice rápido con un Tutorial y se me ocurrió hacer esto, espero tu respuesta para editar o no el post.


Respuesta #3 Julio 05, 2014, 06:14:19 pm

Alfomega




  • Conectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Ingeniero informático
  • Actividad

  • 10%
  • Logros

Más información

Ya que se va a guardar algo, ya puestos guardaría cada conexión con sus datos, navegador, lugar, página de origen... y para saber los datos, un count.
Te puedes ahorrar varias variables para acortar el código, por ejemplo las tres sql en una sola variable y el aumentar el valor junto al online puedes hacerlo con:
Código: [Seleccionar]
"UPDATE online SET visitas = visitas + 1 WHERE fecha = '".date("d-m-Y")."'";También puedes sacar el ejecutar la query del if y tener solo la variable de la sql en ellas, ya que siempre lo vas a ejecutar y no hay mayor diferencia entre una y otra.
Alfomega






Respuesta #4 Julio 05, 2014, 06:26:59 pm

MadeInYourWorld




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Diseñador y Informático
  • Actividad

  • 0%
  • Logros

Más información

Prefieres dejar ejecutar la query del if, para ahorrarme modificar el post. Ya lo dejo como esta lo que si alguien me puede decir si funciona, para confirmarlo y dejarlo puesto.


Respuesta #5 Julio 05, 2014, 06:31:27 pm

MadeInYourWorld




  • Desconectado

  • *

    • *
    • *
    • *
  • Mensaje personal
    Diseñador y Informático
  • Actividad

  • 0%
  • Logros

Más información

Podrías crear otro post si el tuyo va, para no causar problemas a la hora de que un usuario lo necesite. Si hace falta modificarlo para que te funcione no pasa nada, eres libre, modificare nombre del post y pondré que es una prueba para ver si funcionaba y haz tu un tema ya que el tuyo va bien.



Share via delicious Share via digg Share via facebook Share via furl Share via linkedin Share via myspace Share via reddit Share via stumble Share via technorati Share via twitter