Foros del Web » Programando para Internet » PHP »

Sistema de descargas php

Estas en el tema de Sistema de descargas php en el foro de PHP en Foros del Web. Hola! me decidi a escribir ya que estoy teniendo un problema que no puedo resolver y me parece que este sitio es el mas apropiado ...
  #1 (permalink)  
Antiguo 07/02/2009, 20:47
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Sistema de descargas php

Hola! me decidi a escribir ya que estoy teniendo un problema que no puedo resolver y me parece que este sitio es el mas apropiado ya que siempre que busco info en google aparezco aqui :D
Mi problema es que estoy tratando de crear un area de descarga a la que se puede acceder con un usuario y contraseña que se comprueba desde una base de datos mysql y que segun el usuario y contraseña que se coloque es el archivo que se puede descargar. tengo 2 archivos php y una base de datos, el archivo del formulario tiene el siguiente codigo:

Código HTML:
<form id="form1" name="form1" method="post" action="descarga.php">
  <table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
    
    <tr>
      <td colspan="3">
        <table width="350" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td>Nombre de usuario:</td>
          <td><label>
            <input type="text" name="usuario" id="usuario" />
          </label></td>
        </tr>
        <tr>
          <td>Contraseña:</td>
          <td><label>
            <input type="password" name="clave" id="clave" />
          </label></td>
        </tr>
      </table>
        <p>
          <label>
          <div align="center">
            <input type="submit" name="button" id="button" value="Enviar" />
          </div>
          </label>
        </p>
        </td>
    </tr>
  </table>
      </form> 
y el archivo descarga.php que llama el formulario tiene el siguiente codigo:

Código HTML:
<?
session_start();  


if ($usuario && $clave)
{
  $db_conn = mysql_connect("loclhost", "root", "root");
  mysql_select_db("mybasededatos", $db_conn);
  $query = "select * from usuario "
           ."where usuario='$usuario' "
           ." and clave='$clave'";
  $result = mysql_query($query, $db_conn);
  
  if (mysql_num_rows($result) >0 )
  {
    // si están en la base de datos registra la id de usuario
    $valid_user = $userid;
    session_register("valid_user");
  }
}

  
	
	if (session_is_registered("valid_user"))
  {

$db_conn = mysql_connect("loclhost", "root", "root");
  mysql_select_db("mybasededatos", $db_conn);
  $query = "SELECT usuario.nombre,
                        usuario.link
			FROM usuario
			WHERE usuario = '$usuario'";
  $result = mysql_query($query, $db_conn);
  $row=mysql_fetch_array($result);
  $nombre=$row["nombre"];
  $link=$row["link"];


$files=array($link);
$filenames=array($nombre);
$url="aqui se coloca la url";  


$referer=ereg_replace("\?.","",$HTTP_REFERER);
$thisfile="$HTTP_HOST$PHP_SELF";

if ($referer!=$thisfile)
for ($i=0;$i<count($files);$i++)
echo "<P><A HREF=\"$PHP_SELF?$i\">",$filenames[$i],"</A>\n";

else {
$i=$QUERY_STRING;
$total=$url . $files[$i];
Header ("Content-Type: application/octet-stream");

Header ("Content-Length: ".filesize($total));
Header("Content-Disposition: attachment; filename=$filenames[$i]");

readfile($total);
}
}

else
  {
    if (isset($userid))
    {
      // si han intentado hacer login y ha fallado
      echo "No has podido hacer login";
    }
    else
    {
      // si no han intentado hacer login  y no han hecho logged out
      echo "Usuario y contraseña incorrectos<br>";
    }
  }
  
?> 
El problema es que cuando en la segunda consulta coloco la variable $usuario el script no funciona correctamente, no llama al archivo a descargar pero si remplazo $usuario por cualquier usuario que tenga en la base de datos entonces ahi funciona perfectamente, el problema es que como dije el archivo a descargar va variar dependiendo del usuario y contraseña que se coloque al comienzo. Saludos amigos y espero puedan darme alguna ayuda
  #2 (permalink)  
Antiguo 07/02/2009, 20:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Sistema de descargas php

Hola dunga007,

Lee esto: http://www.php.net/variables.external y http://www.php.net/register_globals

Saludos
  #3 (permalink)  
Antiguo 08/02/2009, 11:38
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Sistema de descargas php

Hola GatorV, muchas gracias por tu respuesta, te comento que he probado con
$_POST['username'];

$_REQUEST['username'];

import_request_variables('p', 'p_');
echo $p_username;

echo $HTTP_POST_VARS['username'];

y el unico que ha funcionado ha sido import_request_variables('p', 'p_') pero cuando lo coloco al $p_username en un "echo" cuando lo quiero colocar en la consulta sige sin funcionar, te cuento que la version de php que corre mi hosting es la 4.3.11. Saludos y desde ya gracias por tu respuesta
  #4 (permalink)  
Antiguo 08/02/2009, 16:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Sistema de descargas php

Mmmm si te fijas:
Código html:
Ver original
  1. <input type="text" name="usuario" id="usuario" />

Tu campo se llama usuario, por lo que para rescatarlo debes de usar $_POST['usuario'], no $_POST['username']

Saludos
  #5 (permalink)  
Antiguo 08/02/2009, 18:11
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Sistema de descargas php

Hola GatorV , nuevamente gracias por tu respuesta, te comento que si he probado con $_POST['usuario'] solo que copie el contenido de la pagina que me pasaete ar.php.net/variables.external es por eso que salio en mi mensaje como $_POST['username'], pero lo he puesto correctamente, tienes alguna otra sugerencia de porque mi codigo no funciona?, nuevamente muchas gracias por tu respuesta
  #6 (permalink)  
Antiguo 08/02/2009, 18:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Sistema de descargas php

Mmm prueba usar <?php en lugar de <?.

Saludos
  #7 (permalink)  
Antiguo 08/02/2009, 20:53
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Sistema de descargas php

Cita:
Iniciado por GatorV Ver Mensaje
Mmm prueba usar <?php en lugar de <?.

Saludos

Hola, gracias por tu pronta respuesta, te comento que he probado lo que me dices pero sigue igual, te agrego un poco mas de informacion que talvez sirva, al parecer la parte del codigo que no esta funcionadno bien es cuando le paso el link, porque al poner en la consulta

Código HTML:
$query = "SELECT *
			FROM usuario
			WHERE usuario = '$usuario'
			AND clave = '$clave'";
he puesto un echo "<P><A HREF=\"$PHP_SELF?$i\">",$link, $nombre,"</A>\n";
y he comprobado lo siguiente, con la consulkta como esta si me logeo con distintos usuarios me reconoce los datos y los imprime correctamente en pantalla, pero el link para descargar no funciona es decir me sale para descargar el archivo descargas.php que no es lo que se tendria que descargar.
La unica forma que he encontrado para que funcione es que en la consulta coloque
Código HTML:
$query = "SELECT * FROM usuario
o que coloque alguno de los usuario registrados por ej:


Código HTML:
$query = "SELECT *
			FROM usuario
			WHERE usuario = 'demo'
			AND clave = 'demo'";
Le estaria eternamente agradecido si puede ayudarme en este problema que tengo. Desde ya gracais
  #8 (permalink)  
Antiguo 08/02/2009, 23:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Sistema de descargas php

Prueba hacer un echo $query para que veas que datos estan llegando, tienes que ver y asegurarte que estas recibiendo correctamente $usuario y $clave.

Por otro lado esto: "<P><A HREF=\"$PHP_SELF?$i\">",$link, $nombre,"</A>\n"; no te va a servir, si vas a pasar las variables por GET tienes que hacerlo asi:
Código:
descarga.php?usuario=$usuario&clave=$clave
Saludos
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 17:15.