PDA

Ver la Versión Completa : archivos bajados


__cadetill
30-05-2003, 17:34:00
Hola compañeros

Es posible con php contar cuantas veces pulsa un internauta en uno de los lincs de le web para descargarse un archivo? Me gustaria saber cuanta gente se baja el qué para ver que es lo que mas interesa

Si no se puede con php, sabeis como lograrlo?

Gracias

Julià T.
30-05-2003, 17:58:58
Si te sireve un ejemplo en asp te lo mando

__cadetill
30-05-2003, 18:35:35
ups, pos no se si el servidor del Club soporta asp, le tendre que preguntar a Emilio ;)

De todas maneras, si no es mucha molestia, podrias ponerlo?

Gracias de antemano

obiwuan
30-05-2003, 20:34:57
No sirve. El php y el asp están reñidos, por lo menos en este servidor.

roman
30-05-2003, 21:43:55
Vamos a ver si estoy entendiendo.

Contar cuántas veces se da click a un enlace no sé (ni creo que se pueda), pero contar cuantas veces se baja un archivo seguro que debe poderse.

Te haces una tabla de archivos:

archivos = (nombre, ruta, cuenta)

Y en lugar de poner el enlace directo:


<a href=ruta>nombre</a>


pones un enlace a un script:


<a href='download.php?nombre=nombre del archivo&ruta=ruta al archivo'>nombre</a>


El script download.php usa un header para bajar el archivo y aumenta la cuenta:


<?
header("location: $ruta");

mysql_connect(bla, bla, bla);
mysql_query("update archivos set cuenta=cuenta+1 where nombre=$nombre");
?>


¿Es esto lo que quieres?


// Saludos

__cadetill
30-05-2003, 22:18:02
pues es muy probable que sea eso roman :p , lo pruebo y te cuento

muchas gracias

roman
30-05-2003, 22:26:25
Desde luego tendrás que hacer un mejor diseño de la tabla ;)

Y ya que andas en esto te dejo un ejercicio:

En tu página usa un contador fiable :D :D

// Saludos

__cadetill
02-06-2003, 22:21:55
Hola roman

siento haber tardado tanto en responder, pero es que he estado liadillo haciendo otras cosillas pa la gues :)

Bueno, he probado lo que me dijiste y, el tema de actualizar la tabla, de coña, pero el tema de "lanzar" la URL para descargar lo que sea... como que no me ha salido ya que el "header" me devuelve un error

Pero no te apures, que sigo investigando ;)

Gracias a todos

roman
02-06-2003, 23:00:01
Posteado originalmente por cadetill
...pero el tema de "lanzar" la URL para descargar lo que sea... como que no me ha salido ya que el "header" me devuelve un error
...
¿Y podría saberse cuál es el error?

Recuerda que header debe ejecutarse antes de que se mande cualquier salida al navegador. Por ejemplo,


<?
echo 'Yuupi!!';
header(...);
?>


te producirá un error. Incluso si dejas una línea en blanco antes de "<?" te mandara un error porque ya mandó una línea en blanco al navegador.

// Saludos

__cadetill
03-06-2003, 06:01:36
vale, otro fallo de principiante. Primero habia puesto un "echo" para ver si recibia biem los parametros, y despues, en el parametro de la URL le pasaba toda la URL entera (es decir, www.clubdelphi.com/.....) y me decia que el archivo no existia. Le he puesto el path relativo y....... A FUNCIONAR!!!!! :D

Mil gracias de nuevo!!!!!!

Bueno, me voy a la cama a ver si puedo dormir :(

roman
03-06-2003, 06:18:18
Una última nota:

Me parece que debería funcionar con el URL completo (y creo que es lo que recomiendan), sólo que debe ser completo, esto es, debe incluir "http://"

// Dulces sueños

__cadetill
03-06-2003, 12:34:41
Bueno amigos, para aquel que lo quiera o le interese el tema, os envío la solución final.

La tabla tiene solo dos campos (que se puede ampliar segun necesidades) y se llama seguimiento con los campos nombre (varchar15) y contador (integer)

el php se llama download.php y seria

<?php
header("location: $ruta");

// realizamos conexion
$Servidor = "myserver";
$Usuario = "myuser";
$Clave = "mykey";
$IdConexion = mysql_connect($Servidor, $Usuario, $Clave);

// seleccionamos base de datos
$NombreBD = "mybd";
mysql_select_db($NombreBD, $IdConexion);

if ($IdConexion == 0)
{
echo "Error de conexión con la base de datos mySQL";
exit(-1);
}

// miramos si existe el registro
$sql = "select nombre from seguimiento where nombre = '$nombre'";
$IdConsulta = mysql_query($sql, $IdConexion);
$NFilas = mysql_num_rows($IdConsulta);

if ($NFilas == 0)
{ // si no existe, insertamos
$sql = "insert into seguimiento values('$nombre', 1)";
$IdConsulta = mysql_query($sql, $IdConexion);
if ($IdConsulta == 0)
{
echo "Error en la sentencia SQL o no tiene permisos para ejecutarla";
exit(-1);
}
}
else
{ // si existe hacemos update
$sql = "update seguimiento set contador = contador + 1 where nombre = '$nombre'";
$IdConsulta = mysql_query($sql, $IdConexion);
if ($IdConsulta == 0)
{
echo "Error en la sentencia SQL o no tiene permisos para ejecutarla";
exit(-1);
}
}

// cerramos conexion con MySQL
mysql_close();
?>


y la llamada, como indicó el amigo roman

<a href="download.php?nombre=winzlb&ruta=winzlb.zip">

No he probado todabia la ruta absoluta poniendo el "http://" aunque lo probare, pero si lo dice el amigo roman, seguro que funciona :D

Por supuesto, los nombres de tabla, campos y archivo php son obcionales :p

Seguro que es mejorable, asi que, estoy abierto a mejoras en el codigo :)

Gracias a todos por la ayuda

roman
03-06-2003, 16:11:30
Me parece que hay un error en la lógica de tu procedimiento:

Si el nombre de archivo no existe insertas un registro en la tabla de seguimientos. Esto conlleva a que cualquier listo ponga en su navegador el url

download.php?nombre='lo que se me ocurra'&ruta=...

lo que ocasionará el registro de un archivo que no existe.

Me parece que sería mejor que en tu tabla de seguimientos (o en la de archivos disponibles, porque hay una no?) pongas todos los archivos de que dispongas inicializando contador a 0. Así, en la consulta

"select nombre from seguimiento where nombre = '$nombre'";

si no hay registros ya sólo indicas el error.

// Saludos

pd: Por cierto, el mysql_close() del final no es necesario.

__cadetill
03-06-2003, 17:41:34
Posteado originalmente por roman
Si el nombre de archivo no existe insertas un registro en la tabla de seguimientos. Esto conlleva a que cualquier listo ponga en su navegador el url

download.php?nombre='lo que se me ocurra'&ruta=...


Pos no habia caido en eso!!! Pero claro, lo que yo pretendia con eso era precisamente el no tener que poner yo "a pelo" en la tabla en nombre del archivo, despreocuparme de ello, pero si no hay mas remedio.... :(

Gracias de nuevo

MAXIUM
24-12-2007, 23:05:20
¿Y como sería llevar la cuenta en un.txt y no una base de datos?

dec
25-12-2007, 08:54:50
Hola,


¿Y como sería llevar la cuenta en un.txt y no una base de datos?


Especifica un poco más. En PHP existen no pocas funciones para trabajar, directamente, con archivos.