Foros del Web » Programando para Internet » PHP »

Problema con url al hacer un conteo de descargas

Estas en el tema de Problema con url al hacer un conteo de descargas en el foro de PHP en Foros del Web. Los campos que utilizo son id,nombre,archivo,contador Tengo un contador de descargas, cuando el archivo a descargar esta en mi servidor no hay problema, pero cuando ...
  #1 (permalink)  
Antiguo 11/05/2008, 10:57
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 8 meses
Puntos: 2
Problema con url al hacer un conteo de descargas

Los campos que utilizo son id,nombre,archivo,contador Tengo un contador de descargas, cuando el archivo a descargar esta en mi servidor no hay problema, pero cuando quiero llamar a un link de otra pagina como rapidshare la url queda de esta manera:
http: //localhost/counter/descargas/http://rapidshare.com/files/112851541/miarchivo.zip.html
logimante sale la pagina de error por defecto, pero el campo contador si
agrega una unidad al conteo, aqui les dejo el codigo q utilizo y espero me ayuden
a encontrar un solucion ya que no se como resolverlo.

archivo pagina.php
Código PHP:
<?
while ($registro mysql_fetch_array($tabla)) 
{  
?>
<li>Nombre del programa : <a href="codigo.php?archivo=<?= $registro['archivo'];?>"><?= $registro['nombre'];?></a></li>
<li>Numero de descargas : <?= $registro['contador']."<br>";?></li>
<?
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
archivo codigo.php
Código PHP:
<?php
$archivo 
$_GET['archivo']; 
$conexion mysql_connect('localhost','root','')or die ('Ha fallado la conexión: '.mysql_error()); 
mysql_select_db('db_descargas')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
$sql "SELECT archivo,contador FROM descargas WHERE archivo  = '$archivo'";   
$result mysql_query($sql $conexion) or die ( mysql_error() );   
$row mysql_fetch_array($result); 
$contador $row['contador'];
$contador = ($contador 1);
$sql2 "UPDATE descargas SET contador = '$contador' WHERE archivo  = '$archivo ' ";
$result2 mysql_query($sql2 $conexion) or die ( mysql_error() );   
unset(
$contador);
header("Location: http://localhost/counter/descargas/$archivo");
exit();
?>
Quizas modificando el header
  #2 (permalink)  
Antiguo 11/05/2008, 16:03
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Problema con url al hacer un conteo de descargas

como les va es factible lo que quiero hacer, si no es asi mencionenlo para empezar a buscar otras soluciones
  #3 (permalink)  
Antiguo 11/05/2008, 16:55
 
Fecha de Ingreso: noviembre-2007
Ubicación: Córdoba
Mensajes: 70
Antigüedad: 17 años
Puntos: 1
Re: Problema con url al hacer un conteo de descargas

Hola.

Tu problema está en que en la base de datos almacenas tanto url de los archivos externos como nombres de archivo de tus archivos locales. Y en el segundo código, en el header, pones siempre la ruta local mas lo que se obtenga de la base de datos.

Si en la base de datos tienes dos registros, a) miarchivo.zip y b)http://sitio.com/archivoexterno.zip, cuando se envíe el header estarás enviando para, a) http://localhost/counter/descargas/miarchivo.zip pero para b) http://localhost/counter/descargas/http://sitio.com/archivoexterno.zip

Una solución podría ser detectar si en el campo devuelto de la base de datos existe 'http://' y enviar una cabecera u otra en función de lo que sea. Pero es bastante chapucera. Podría ser algo asi:

Código PHP:
//Si comienza por http, https o ftp...
if(preg_match("#^(http|https|ftp)://#"$archivo))
{
  
//... se trata de una url externa
  
header("Location: $archivo");
}
else
{
  
//si no, se trata de un archivo local
  
header("Location: http://localhost/counter/descargas/$archivo");

Por cierto, investiga sobre la inyección de código SQL, que tu script falla en eso.

Saludos.
__________________
http://www.javierav.com

Última edición por javierav; 11/05/2008 a las 17:00
  #4 (permalink)  
Antiguo 12/05/2008, 11:02
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Problema con url al hacer un conteo de descargas

solucione el problema guardando en vez de la url en bd, un archivo.php el cual me redirecciona a la pagina externa donde se hara la descarga

Última edición por KingColt; 23/05/2008 a las 20:17
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 14:06.