Foros del Web » Programando para Internet » PHP »

Problemas al descargar un fichero de mi Base de datos mysql

Estas en el tema de Problemas al descargar un fichero de mi Base de datos mysql en el foro de PHP en Foros del Web. Hola a todos, es mi primer mensaje en este foro, y recurro a el ya que leyendo vuestros temas me han sacado de muchas dudas. ...
  #1 (permalink)  
Antiguo 29/08/2011, 04:48
 
Fecha de Ingreso: agosto-2011
Ubicación: Aviles-Asturias
Mensajes: 6
Antigüedad: 12 años, 8 meses
Puntos: 0
Problemas al descargar un fichero de mi Base de datos mysql

Hola a todos, es mi primer mensaje en este foro, y recurro a el ya que leyendo vuestros temas me han sacado de muchas dudas. A continuación intentare exponer mi problema de la mejor manera posible:
Tengo un problema al hacer un upload en mi base de datos. La tabla es la siguiente:

CREATE TABLE torneo (
id_torneo smallint not null primary key auto_increment,
nombre varchar(20) NOT NULL,
diaLimite date NOT NULL,
lugar varchar(20) NOT NULL,
fecha date NOT NULL,
limite_parejas int(3) NOT NULL,
cartel blob not null,
id_admin smallint references administrador
);

alter table torneo add resulPublicado int(1) not null default '0';
alter table torneo add fechaFin date not null;
alter table torneo add precio integer not null;
alter table torneo add cuadro1 blob;
alter table torneo add cuadro2 blob;
alter table torneo add cuadro3 blob;
alter table torneo add cuadro4 blob;
alter table torneo add torneoPublicado int(1) not null default '0';


Yo primeramente hago un insert de los campos y posteriormente hago la siguiente sentencia para los cuadros:

$link=mysql_query("UPDATE torneo set (cuadro1='$cuadro1', cuadro2='$cuadro2', cuadro3='$cuadro3', cuadro4='$cuadro4', torneoPublicado=1) WHERE id_torneo='$idTorneo'");

Estos datos provienen del siguiente form:

<FORM METHOD=enctype="multipart/form-data" ACTION="registroCuadros.php?idTorneo=<?php echo $idTorneo; ?>">

<br>
Cuadro Categoria Premier<br>
<INPUT TYPE="file" NAME="cartel1"><br><br>

<br>
Cuadro Categoria Primera<br>
<INPUT TYPE="file" NAME="cartel2"><br><br>

<br>
Cuadro Categoria Segunda<br>
<INPUT TYPE="file" NAME="cartel3"><br><br>

<br>
Cuadro Categoria Tercera<br>
<INPUT TYPE="file" NAME="cartel4"><br><br>


<INPUT TYPE="SUBMIT" value="Insertar">
<input class="boton" type="reset" value="Restablecer" tabindex="4" accesskey="r"/>


</FORM>

El problema es que cuando hago el update no me da ningun error pero almacena solo 1 Byte en el Blob de la base de datos, y luego en otro script cuando intento descargar ese contenido, no descarga el file que el usuario almaceno el form presentado anteriormente.

Les ruego que me echen una mano, ya que es un proyecto fin de carrera y he perdido mucho tiempo con este tema! Solo me quedan 10 dias!!

Muchas gracias por las aportaciones!!
  #2 (permalink)  
Antiguo 29/08/2011, 06:00
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Hola, has probado a imprimir la consulta a ver si es correcta? a lo mejor alguna de las variables que pasas a la consulta no se esta pasando correctamente y por eso no te funciona bien. por ejemplo, si no me equivoco pones "Where id_torneo = '$idTorneo', si id_torneo es un smallint, ¿no sobran las comillas?

una cosa, ¿no crees que es mejor poner los Blob en una tabla a parte? es que de esta forma tienes reservados 4 Blobs para cada fila de la tabla y si no los utilizas los 4 , desperdicias espacio y el blob es un tipo de dato bastante grande.
  #3 (permalink)  
Antiguo 29/08/2011, 08:06
 
Fecha de Ingreso: agosto-2011
Ubicación: Aviles-Asturias
Mensajes: 6
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Gracias por tu respuesta Bray.
El tema que me dices de las comillas lo he probado y sigue sin funcionar, el $idTorneo lo imprime bien despues de haberlo comprobado con un echo.
Lo que si que he visto es que al imprimir el $cuadro1 o $cuadro2 me imprime un 1, en vez de imprimirpe el nombre del fichero guardado en la base de datos, lo cual quiere decir que el problema pueda estar en la forma de guardar esos ficheros.
El update y el form lo teneis arriba, haber si alguien me puede echar una manilla, os lo agradeceria mucho.
Un saludo.
  #4 (permalink)  
Antiguo 29/08/2011, 08:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

¿Como esta diseñado tu script PHP?, ya que no muestras la parte importante de como rescatas los valores para asignarlos a tu query...
  #5 (permalink)  
Antiguo 29/08/2011, 09:07
 
Fecha de Ingreso: agosto-2011
Ubicación: Aviles-Asturias
Mensajes: 6
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Lo voy a poner lo mas claro posible GatorV.
El form es el siguiente:

<FORM METHOD="POST" ACTION="registroCuadros.php?idTorneo=<?php echo $idTorneo; ?>">

<br>
Cuadro Categoria Premier<br>
<INPUT TYPE="file" NAME="cartel1"><br><br>

<br>
Cuadro Categoria Primera<br>
<INPUT TYPE="file" NAME="cartel2"><br><br>

<br>
Cuadro Categoria Segunda<br>
<INPUT TYPE="file" NAME="cartel3"><br><br>

<br>
Cuadro Categoria Tercera<br>
<INPUT TYPE="file" NAME="cartel4"><br><br>


<INPUT TYPE="SUBMIT" value="Insertar">
<input class="boton" type="reset" value="Restablecer" tabindex="4" accesskey="r"/>


</FORM>

Luego recojo los datos en un nuevo script de la siguiente forma:

$cuadro1=(isset($_POST['cartel1']));
$cuadro2=(isset($_POST['cartel2']));
$cuadro3=(isset($_POST['cartel3']));
$cuadro4=(isset($_POST['cartel4']));
$idTorneo=$_GET['idTorneo'];

Luego hago el update:

$link=mysql_query("UPDATE torneo set (cuadro1='$cuadro1', cuadro2='$cuadro2', cuadro3='$cuadro3', cuadro4='$cuadro4', torneoPublicado=1) WHERE id_torneo='$idTorneo'");

Por ultimo, en otro script necesito que la pagina descargue los blob guardados anteriormente. El codigo es el siguiente:

$sql = " SELECT cartel, torneoPublicado, cuadro1, cuadro2, cuadro3, cuadro4 FROM torneo WHERE id_torneo='$idTorneo' ";
$result = mysql_query($sql);
while ($salida = mysql_fetch_row($result)){

?>
<td><a href="descarga1.php?id=<?php echo $salida[2]; ?>">Ver Cuadro Premier</a></td>
<td><a href="descarga1.php?id=<?php echo $salida[3]; ?>">Ver Cuadro Primera</a></td>
<td><a href="descarga1.php?id=<?php echo $salida[4]; ?>">Ver Cuadro Segunda</a></td>
<td><a href="descarga1.php?id=<?php echo $salida[5]; ?>">Ver Cuadro Tercera</a></td>
<?php
}

Para completarlo os adjunto el codigo de la funcion descarga1.php:
<?php
$id=$_GET['id'];
$enlace = "images/".$id;
header ("Content-Disposition: attachment; filename=".$id);
header ("Content-Type: application/pdf");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);
?>

Muchas gracias por la respuesta GatorV
  #6 (permalink)  
Antiguo 29/08/2011, 09:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Ese es el problema, no estas asignando los valores, al hacer esto:

Código PHP:
Ver original
  1. $cuadro1 = (isset($_POST['cartel1']);

Eso asigna el resultado de isset, que es un booleano, y al tu traducirlo a tu string se pone por eso el 1 o el 0 (true o false).

Para rescatar los valores correctamente debes de hacerlo así:
Código PHP:
Ver original
  1. $cuadro1 = (isset($_POST['cuadro1']) ? $_POST['cuadro1'] : '');

Saludos.
  #7 (permalink)  
Antiguo 29/08/2011, 16:48
 
Fecha de Ingreso: agosto-2011
Ubicación: Aviles-Asturias
Mensajes: 6
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Gracias por tu respuesta GatorV, he corregido lo que me dijiste en el mensaje anterior y ahora despues de comprobarlo con el echo si que funciona bien en el UPDATE.
Pero el problema ahora es que al recuperar esos blob, nose porque imprimo su valor y me da un 1 nuevamente!. A continuacion adjunto el codigo:
$sql = " SELECT cartel, torneoPublicado, cuadro1, cuadro2, cuadro3, cuadro4 FROM torneo WHERE id_torneo='$idTorneo' ";
$result = mysql_query($sql);
while ($salida = mysql_fetch_row($result)){
if($salida[1]==1){
echo "$salida[2]";
echo "$salida[5]";
echo "<td ><img src='images/$salida[0]' width='150' height='100'/></td>";
?>
<td><a href="descarga.php?id=<?php echo $salida[2]; ?>">Ver Cuadro Premier</a></td>
<td><a href="descarga.php?id=<?php echo $salida[3]; ?>">Ver Cuadro Primera</a></td>
<td><a href="descarga.php?id=<?php echo $salida[4]; ?>">Ver Cuadro Segunda</a></td>
<td><a href="descarga.php?id=<?php echo $salida[5]; ?>">Ver Cuadro Tercera</a></td>
<?php
echo "</tr>";
echo "</tbody>";
}
}

No soy capaz de resolverlo! Necesito de vuestra ayuda! Muchas gracias por la colaboracion.
  #8 (permalink)  
Antiguo 29/08/2011, 17:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

¿Que es lo que hace el script de descarga.php?
  #9 (permalink)  
Antiguo 29/08/2011, 17:25
 
Fecha de Ingreso: agosto-2011
Ubicación: Aviles-Asturias
Mensajes: 6
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Te lo adjunto GatorV

descarga.php:
<?php
$id=$_GET['id'];
$enlace = "images/".$id;
header ("Content-Disposition: attachment; filename=".$id);
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);
?>

Muchas gracias por tu atencion.
  #10 (permalink)  
Antiguo 30/08/2011, 11:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

No había visto correctamente todo tu script, el problema es que necesitas subir los archivos al servidor y luego almacenarlos en tu tabla, ahí no lo estas haciendo.

Revisa este tema:

http://www.forosdelweb.com/f18/tutor...inario-127775/

Saludos.
  #11 (permalink)  
Antiguo 30/08/2011, 11:21
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Primero que nada necesitas agregarle el enctype a tu form

Código HTML:
<FORM enctype="multipart/form-data" METHOD="POST" ACTION="registroCuadros.php?idTorneo=<?php echo $idTorneo; ?>"> 
Luego para recoger los datos ten en cuenta que los archivos se envian como arreglos y NO como variables

si haces un var_dump de $_POST['cartel1'] podras ver que contiene varios subindices tales como, su nombre, tipo, tamaño etc...

Código PHP:
var_dump($_POST['cartel1']);
echo 
$_POST['cartel1']['name']."<br/>";
echo 
$_POST['cartel1']['size']."<br/>";
echo 
$_POST['cartel1']['file']."<br/>"
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #12 (permalink)  
Antiguo 30/08/2011, 14:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

@h2swider los archivos vienen en la variable $_FILES, no en $_POST.

Saludos.
  #13 (permalink)  
Antiguo 31/08/2011, 02:27
 
Fecha de Ingreso: agosto-2011
Ubicación: Aviles-Asturias
Mensajes: 6
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Hola a todos, primeramente queria agradeceros a todos las respuestas.
Deciros que el problema no radicaba en donde vosotros me hicistis hincapie, es decir, cogiendo el ejemplo que me propuso GatorV me seguia dando problemas al hacer el UPDATE en la base de datos. Pegandome mucho con ello, observe que en si en vez de hace el UPDATE con todos los campos, es decir:

$link=mysql_query("UPDATE torneo set (cuadro1='$cuadro1', cuadro2='$cuadro2', cuadro3='$cuadro3', cuadro4='$cuadro4', torneoPublicado=1) WHERE id_torneo='$idTorneo'");

Lo hago de uno en uno:

$link=mysql_query("UPDATE torneo set cuadro1='$cuadro1' WHERE id_torneo='$idTorneo'");

Lo almacena perfectamente para posteriomente recuperarlo de la misma manera.

Un saludo a tod@s.
  #14 (permalink)  
Antiguo 31/08/2011, 06:54
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Problemas al descargar un fichero de mi Base de datos mysql

Cita:
Iniciado por GatorV Ver Mensaje
@h2swider los archivos vienen en la variable $_FILES, no en $_POST.

Saludos.
Si es verdad, viene embalado y lo escribí mal :p
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Etiquetas: fichero, mysql, registro, sql, tabla, usuarios
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 21:27.