Foros del Web » Programando para Internet » PHP »

No Puedo Guardar Archivos En Mi Base De Datos

Estas en el tema de No Puedo Guardar Archivos En Mi Base De Datos en el foro de PHP en Foros del Web. Hola! Tengo un pequeño pero gran problema lo que pasa es que necesito guardar archivos *.doc, *.ppt, etc en mi base de datos tengo el ...
  #1 (permalink)  
Antiguo 30/09/2004, 15:28
 
Fecha de Ingreso: septiembre-2004
Mensajes: 11
Antigüedad: 19 años, 6 meses
Puntos: 0
Sonrisa No Puedo Guardar Archivos En Mi Base De Datos

Hola!
Tengo un pequeño pero gran problema lo que pasa es que necesito guardar archivos *.doc, *.ppt, etc en mi base de datos tengo el siguiente código:

//escoger_archivo.html
<form enctype="multipart/form-data" action="guardar_archivo.php" method="post">
Descripción <input type="text" name="titulo" size="50" maxlength="50">
<br>
<br>
Ubicación <input type="file" name="archivito" size="50">
<br>
<br>
<br>
<input type="submit" value="Enviar archivo">
</form>


//guardar_archivo.php

<?php require_once('Connections/conectar.php'); ?>
<?php
$archivo = $_FILES["archivito"]["tmp_name"];
$tamanio = $_FILES["archivito"]["size"];
$tipo = $_FILES["archivito"]["type"];
$nombre = $_FILES["archivito"]["name"];
$titulo = $_POST["titulo"];
if ( $archivo != "none" )
{
$fp = fopen($archivo, "rb");
$contenido = fread($fp, $tamanio);
$contenido = addslashes($contenido);
fclose($fp);
$qry = "INSERT INTO dweb_material VALUES (0,'01','$nombre','$titulo','$contenido','$tipo')" ;
mysql_query($qry);
if(mysql_affected_rows($conectar) > 0)
print "Se ha guardado el archivo en la base de datos.";
else
print "NO se ha podido guardar el archivo en la base de datos.";
}
else
print "No se ha podido subir el archivo al servidor";

?>

****************************************
aparentemente todo esta bien pero cuando lo ejecuto me manda el mensaje
NO se ha podido guardar el archivo en la base de datos.

Y la verdad ya no se que hacer porque lo he checado de arriba a abajo y no se en donde esta mi error, de hecho ayer cundo lo probe despues de no se cuantos intentos funciono pero ahora que volvi a ejecutarlo ya no.
Por favor necesito tu ayuda. Mil gracias

P.D.: No sabia como mandar mi duda en el foro por eso la mande como mensaje privado, Sorry!
  #2 (permalink)  
Antiguo 30/09/2004, 20:47
 
Fecha de Ingreso: septiembre-2004
Ubicación: Puebla, México
Mensajes: 81
Antigüedad: 19 años, 6 meses
Puntos: 0
No sera por el tamaño del archivo?
En el manual de php de Manejo de envío de archivos (http://mx.php.net/manual/es/features.file-upload.php) en la parte de notas, dos usuarios proponen una solucion para meter archivos grandes en mysql. Busca las notas de:
therebechips
06-Sep-2003 04:02
(por enmedio)

y

rynop2000 at hotmail dot com
19-Jul-2002 12:57
(casi al final)

Espero que te sirva
__________________
Revista DdS
Revista on-line sobre desarrollo de software
  #3 (permalink)  
Antiguo 01/10/2004, 06:20
 
Fecha de Ingreso: marzo-2004
Mensajes: 50
Antigüedad: 20 años, 1 mes
Puntos: 0
He intentado acceder al manual de php de Manejo de envío de archivos (http://www.forosdelweb.com/o.php?htt...ile-upload.php) y pero No se puede mostrar la página.
un saludo
vanax
  #4 (permalink)  
Antiguo 01/10/2004, 07:25
 
Fecha de Ingreso: septiembre-2004
Ubicación: Puebla, México
Mensajes: 81
Antigüedad: 19 años, 6 meses
Puntos: 0
Que raro, yo si puedo... si no trata con php.net te metes a documentation, en view online escoge spanish y en la tabla de contenido escoge el 20. Manejo de envío de archivos.

Pero de todos modos ahi te va:

therebechips
06-Sep-2003 04:02
Re: Handling uploads and downloads of large files and storing in MySQL.

Use two tables to store data about the file and the file data itself. ***Important: to preserve the integrity of the data use base64_encode() NOT addslashes().
Código PHP:
<?php
// Max packet size
   
define("MAX_SQL",50000);
   
$filehandle fopen($tmp"rb") or die( "Can't open file!" );
   
$query=    "INSERT INTO files (name, type, size) VALUES(".
             
$DB->quote($name).", ".
             
$DB->quote($type).", ".
             
$DB->quote($size).
             
")";

   
// Execute Query
   
$result $DB->query($query);
   
$file_id mysql_insert_id();

// Copy the binary file data to the filedata table in sequential rows each containing MAX_SQL bytes
// Your table should have an index set to auto_increment
// Store the file_id to identify the data fragments
   
while (!feof ($filehandle)) {
       
$data base64_encode(fread($filehandle,MAX_SQL));
       
$query "INSERT INTO filedata (file_id, data) VALUES($file_id,\"".$data."\")";
       
$result $DB->query($query);
   }
   
fclose ($filehandle);
?>

Decode the data fragments and recombine them:
<?php
   $file_id 
=$_GET ['file_id'];
   
$query ="select file_id, name, type, size from files where file_id='$file_id'";
   
$result $DB->query($query);
   
$rowmysql_fetch_array ($result);
   
$type $row ["type"];
   
$name $row ["name"];
   
$size $row ["size"];
   
$file_id $row ["file_id"];

   
// get the file data
   
$query "select id, data from filedata where file_id='$file_id' ORDER by id";
   
$result $DB->query($query);

// decode the fragments and recombine the file
   
$data "";
   while (
$row mysql_fetch_array($result)) {
       
$data .= base64_decode($row ["data"]); 
   }
  
// output the file
   
header ("Content-type: $type");
   
header ("Content-length: $size");
   
header ("Content-Disposition: attachment; filename=$name");
   
header ("Content-Description: PHP Generated Data");
   echo 
$data;
?>
y

--HANDLING LARGE FILE UPLOADS and entering into a MySQL blob field--

Hope this helps someone as it was hard to fig out. MySQL default buffer and packets are set small. here is a method to get aroudn it.
Código PHP:
$filehandle fopen($addfile"r");
$filesize filesize($addfile);

//now this is bullshit, but have to read the file piece by piece and insert because the mysql server is set up to only handle 1meg inserts (small buffer and packet).

$buffer addslashes(fread($filehandle906240));
$query "Insert into files (file, filename, size, userid ) values ('$filedata','$addfile_name', '$filesize')";
$this->query($query);
$id mysql_insert_id($this->link_id());
        
while (!
feof ($filehandle)) {
  
$buffer addslashes(fread($filehandle906240));
  
$query "UPDATE files SET file = concat('$buffer') where id='$id'";
  
$this->query($query);
}
fclose ($filehandle); 
__________________
Revista DdS
Revista on-line sobre desarrollo de software
  #5 (permalink)  
Antiguo 01/10/2004, 08:56
 
Fecha de Ingreso: septiembre-2004
Mensajes: 11
Antigüedad: 19 años, 6 meses
Puntos: 0
Gracias por tu respuesta satchb, ahora voy a probar el código espero que me funcione.
Hasta pronto
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 17:06.