Foros del Web » Programando para Internet » PHP »

Manejo de datos BLOB con PHP y MySQL

Estas en el tema de Manejo de datos BLOB con PHP y MySQL en el foro de PHP en Foros del Web. Estoy intentando almacenar archivos en una base de datos mediante el uso de BLOB, para ello he creado una base en Mysql con la siguiente ...
  #1 (permalink)  
Antiguo 17/04/2003, 16:41
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Manejo de datos BLOB con PHP y MySQL

Estoy intentando almacenar archivos en una base de datos mediante el uso de BLOB, para ello he creado una base en Mysql con la siguiente tabla:

CREATE TABLE `peliculas` (
`id` int(11) NOT NULL auto_increment,
`titulo` varchar(50) default NULL,
`imagen` mediumblob,
`tipo` varchar(50) default NULL,
`tamano` varchar(50) default NULL,
`enlace` varchar(50) default NULL,
`descargas` varchar(50) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM

El siguiente cuestionario:

Código:
<form enctype="multipart/form-data" action="guardar_archivo.php" method="post">
  <table border="0">
    <tr> 
      <td><strong>Titulo:</strong></td>
      <td><input type="text" name="titulo" size="50"></td>
    </tr>
    <tr> 
      <td><strong>Imagen:</strong></td>
      <td><input type="file" name="archivo" size="50"></td>
    </tr>
    <tr> 
      <td><strong>Tamaño:</strong></td>
      <td><input type="text" name="tamano" size="20"><strong>&nbsp;Mb</strong></td>
    </tr>
    <tr> 
      <td><strong>Enlace:</strong></td>
      <td><input type="text" name="enlace" size="100"></td>
    </tr>
    <tr> 
      <td>&nbsp;</td>
      <td><input type="submit" value="Registrar"></td>
    </tr>
  </table>
</form>
Y con el siguiente script en php:

Código PHP:

<?php require_once('Connections/divXHispano.php'); ?>
<?php
mysql_select_db
($database_divXHispano$divXHispano);
$query_guardar_archivo "SELECT * FROM peliculas";
$guardar_archivo mysql_query($query_guardar_archivo$divXHispano) or die(mysql_error());
$row_guardar_archivo mysql_fetch_assoc($guardar_archivo);
$totalRows_guardar_archivo mysql_num_rows($guardar_archivo);
?>


<?php 
/* guardar_archivo.php */

$archivo$_FILES['archivo']['tmp_name'];
$tamanio$_FILES['archivo']['size'];
$tipo=$_FILES['archivo']['type'];
$nombre=$_FILES['archivo']['name'];
$titulo=$_POST['titulo'];
$tamano=$_POST['tamano'];
$enlace=$_POST['enlace'];

if ( 
$archivo != "none" )
{
$fp=fopen($archivo"rb");
$imagen=fread($fp,$tamanio);
$imagen=addslashes($imagen);
fclose($fp);

$qry="INSERT INTO peliculas VALUES
(0,'$titulo','$imagen','$tipo','$tamano','$enlace')"
;

mysql_query($qry);

if(
mysql_affected_rows($divXHispano)>0)
echo 
"Se ha guardado el archivo en la base de datos.";
else
echo 
"No se ha podido guardar el archivo en la base de datos.";
}
else
echo 
"No se ha podido subir el archivo al servidor.";
?>
</body>
</html>
<?php
mysql_free_result
($guardar_archivo);
?>
Pero introduzco los datos en el formulario, pincho en registrar y me comunica que No se ha podido guardar el archivo en la base de datos.

¿Tengo algun error en el código? ¿o tengo que definir algun dato mas?
  #2 (permalink)  
Antiguo 17/04/2003, 17:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Intenta identar el código y respetar las {} de apertura cierre de una instrucción .. pese que si solo ejecutas una instrucción puedeas omitirlas se ve más claro donde empieza/termina una instrucción ..

Código PHP:
if ( $archivo != "none" ){

   
// etc Código ...

    
if(mysql_affected_rows($divXHispano)>0){
        echo 
"Se ha guardado el archivo en la base de datos.";
    } else {
         echo 
"No se ha podido guardar el archivo en la base de datos.";
     } 

} else {
    echo 
"No se ha podido subir el archivo al servidor.";
}
?> 
Revisa ese punto .. (y revisa si sube la imagen a tu BD o no ...) pese que el mensaje de lo que no esperas....

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 17/04/2003 a las 17:06
  #3 (permalink)  
Antiguo 17/04/2003, 20:02
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
He hecho lo que me has sugerido pero sigue dandome error y no me guarda los datos en la DB

Un saludo
  #4 (permalink)  
Antiguo 17/04/2003, 22:53
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Bueno, ya esta solucionado, el problema esta en el insert
Código PHP:
$qry="INSERT INTO peliculas VALUES
 (0,'$titulo','$imagen','$tipo','$tamano','$enlace')"

Y residia en el hecho de que en mi DB había definido 7 variables, insertando el siguiente codigo
Código PHP:
$qry="INSERT INTO peliculas VALUES
 (0,'$titulo','$imagen','$tipo','$tamano','$enlace'.0)"

ya me permite insertar los valores en mi DB.

Ahora bien, cuando intento reproducir la imagen en el navegador, uso los siguientes escript:
Código PHP:
<!-- selecciono las variables -->
<?php $sSQL "select * from peliculas where id=".$id ?>
<?php $rs 
mysql_query($sSQL); ?>
<?php $fila 
mysql_fetch_object($rs); ?>
<?php $tipo
mysql_result($rs0"tipo"); ?>
<?php $contenido
mysql_result($rs0"imagen"); ?>
<?php $nombre
mysql_result($rs0"nombre"); ?>
Código PHP:
<!-- reproduzco la imagen -->
<?php 
header
("content-type; $tipo");
header("content-disposition: ; filename=\"$nombre\"");
echo 
$contenido;
?>
con el resultado que me presenta los siguiente errores:

Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\wwwroot\divx\descargar_archivo.php:3) in C:\Inetpub\wwwroot\divx\descargar_archivo.php on line 90

Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\wwwroot\divx\descargar_archivo.php:3) in C:\Inetpub\wwwroot\divx\descargar_archivo.php on line 91

¿Alguien sería tan amable de decirme en que me he equivocado esta vez? y ¿Por que no me deja modificar los header?
  #5 (permalink)  
Antiguo 18/04/2003, 19:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\wwwroot\divx\descargar_archivo.php:3) in C:\Inetpub\wwwroot\divx\descargar_archivo.php on line 90
Fijate en lo que dice el erro .. te habla de que no puedes enviar "cabeceras (header)" en tal línea (90) y que han sido enviados en tal linea (3)

Cuando usas header() .. NO puede existir nada de HTML o un echo "algo" .. o un simple espacio o salto de línea antes de <?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 19/04/2003, 05:14
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Gracias Cluster, ya he arreglado el error de los header, no obstante sigo sin poder ver la imagen, en su lugar me aparece el codigo binario. ¿Por que?
  #7 (permalink)  
Antiguo 19/04/2003, 05:19
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
ok arreglado, habia subido los header y se me habia olvidado subir el echo $contenido.

Gracias
  #8 (permalink)  
Antiguo 19/04/2003, 05:43
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0

Bueno pues sigo sin conseguir lo que quiero.

ya he modificado el codigo y queda de esta forma:

Código PHP:
<?php $sSQL "select * from peliculas where id=".$id ?>
<?php $rs 
mysql_query($sSQL); ?>
<?php $fila 
mysql_fetch_object($rs); ?>
<?php $qry
"SELECT imagen, tipo, nombre FROM peliculas WHERE id=".$id ?>
<?php $res
mysql_query($qry); ?>
<?php $tipo
mysql_result($res0"tipo"); ?>
<?php $contenido
mysql_result($res0"imagen"); ?>
<?php $nombre
mysql_result($res0"nombre"); ?>
<?php
header
("content-type: $tipo");
header("content-disposition: ; filename=\"$nombre\"");
echo 
$contenido;
?>
<?php
echo $fila->titulo;
echo 
$fila->tamano;
echo 
"<a href=".$fila->enlace.">Descargar enlace ED2K</a>";
?>
Pero con esto solo consigo que me muestre hasta la variable $contenido (que es la imagen y la muestra correctamente)
pero el siguiente trozo de codigo
Código PHP:
<?php
echo $fila->titulo;
echo 
$fila->tamano;
echo 
"<a href=".$fila->enlace.">Descargar enlace ED2K</a>";
?>
No me lo muestra.

¿Por que?
  #9 (permalink)  
Antiguo 19/04/2003, 13:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Es normal que no te funcione el 2 código ahi . junto al primero que le envia las cabeceras al navegador que le INDICAn que lo que se le vá a enviar va a ser un archivo binario de tal formato MIME (header("content-type: $tipo"); .. etc)

Lo que tienes que hacer es "llamar" a ese script que genera la imagen via HTML comun con el <tag> de imagen:

Código PHP:
// Haz tu consulta a tu BD .. para obtener los datos de esa tabla que necesites ..

// Llama al script que genera la imagen desde el Binario de tu BD.
<img src="tuscript_que_hace_la_imagen.php?id=nº">

// Haz lo que tengas que hacer .. ejemplo
<?php
echo $fila->titulo;
echo 
$fila->tamano;
echo 
"<a href=".$fila->enlace.">Descargar enlace ED2K</a>";
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 06:02.