Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Necesito abrir un archivo pdf alamcenado en una base de datos mysql (https://www.clubdelphi.com/foros/showthread.php?t=79106)

eli02 07-06-2012 21:57:16

Necesito abrir un archivo pdf alamcenado en una base de datos mysql
 
Hola, buenas tardes tengo un problema y me gustaria pedirle su ayuda, estoy programando en php y tengo que guardar documentos pdf en mi base de datos, logre hacerlo y pyedo descargarlo de la base de datos pero cuando lo quiero abrir me dice que el fichero esta dañado, y no se que puedo hacer.
Estoy utilizando el siguiente còdigo:

Código PHP:

<?php

include("conexconvenios.php");

$nombre $_POST["TextNombre"];
$uni=$_POST["TXT_Universidad"];
$ff=$_POST["TXT_Fecha_Firma"];
$fv=$_POST["TXT_Fecha_Vigencia"];
$pais=$_POST["LIS_Pais"];
$renovar=$_POST["CHB_Renovar"];
$resumen=$_POST["TXT_Resumen"];


echo 
"$nombre";
echo 
"$uni";
echo 
"$ff";
echo 
"$fv";
echo 
"$pais";
echo 
"$renovar";
echo 
"$resumen";


//Subir archivo pdf
//datos del arhivo 
$nombre_archivo $_FILES['userfile']['name']; 
$tipo_archivo $_FILES['userfile']['type']; 
$tamano_archivo $_FILES['userfile']['size']; 
 
$tem=$_FILES['userfile']['tmp_name'];


    if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $nombre_archivo)){ 
       echo 
"El archivo ha sido cargado correctamente.";
       
//$query4="INSERT INTO `documentos`(`DOC_Id`, `DOC_Nombre`) VALUES ('','$nombre_archivo')";
 //$result4=select($query4);
   
}else{ 
      echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
   } 

//funcion para seleccionar el id de la universidad
$query1="SELECT UNI_Id FROM universidades WHERE UNI_Nombre='$uni'";
$result1select ($query1);
$Idu=mysql_fetch_array($result1);
$Iduni=$Idu['UNI_Id'];


//funcion para seleccionar el id de pais
$query2="SELECT PAI_Id FROM paises WHERE PAI_Nombre='$pais'";
$result2=select($query2);
$Idpai=mysql_fetch_array($result2);
$Idpais=$Idpai['PAI_Id'];



//Consulta de inserción

$query="INSERT INTO `convenios`(`COV_Id`, `UNI_Id`, `PAI_Id`, `COV_Nombre`, `COV_Fecha_Firma`, `COV_Fecha_Vigencia`, `COV_Resumen`, `COV_Renovacion`, `COV_Documento`) VALUES ('',$Iduni','$Idpais','$nombre','ff','fv','$resumen','$renovar','$nombre_archivo')";
$result=select($query);

?>

Les agradezco de antemano su valiosa colaboraciòn...

roman 07-06-2012 22:24:41

No entiendo muy bien qué haces. Si la consulta final es con la que insertas el archivo, pues parece que en lugar del archivo en sí, lo que estás insertando es el nombre del archivo.

Tendrías que leer el archivo subido con, por ejemplo, file_get_contents, que te devuelve el contenido del archivo como un string e insertar ése en la tabla.

// Saludos

Casimiro Notevi 07-06-2012 22:40:51

Bienvenido a clubdelphi, eli02, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

eli02 08-06-2012 21:14:06

como lo hago? la verdad es primera vez que programa en php e intente usar lo que me dijo pero creo q no lo estoy haciendo bien

roman 08-06-2012 22:42:55

Va un ejemplo sencillo, sin ningún tipo de verificación ni seguridad pero para que se vea el mecanismo.

Primero, la estructura de la tabla que usé para el ejemplo:

Código SQL [-]
create table documentos
(
  id int(11) not null auto_increment,
  nombre char(75) not null,
  contenido blob not null,

  primary key(id)
)

Para subir un documento (subir.php):

Código PHP:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    
mysql_connect('servidor''usuario''contraseña');
    
mysql_select_db('base');

    
$nombre $_FILES['documento']['name'];
    
$contenido mysql_real_escape_string(file_get_contents($_FILES['documento']['tmp_name']));

    
$sql "insert into documentos values(0, '$nombre', '$contenido')";
    
mysql_query($sql) or die(mysql_error());
}
?>
<form method='post' enctype='multipart/form-data'>
    <input type='file' name='documento'>
    <input type='submit'>
</form>

Para descargar un documento (descargar.php)

Código PHP:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    
mysql_connect('servidor''usuario''contraseña');
    
mysql_select_db('base');

    
$nombre$_POST['nombre'];

    
$sql "select * from documentos where nombre = '$nombre'";
    
$data mysql_query($sql) or die(mysql_error());

    
$documento mysql_fetch_object($data);
    echo 
$documento->pdf;

    exit;
}
?>
<form method='POST'>
    <input type='text' name='nombre'>
    <input type='submit'>
</form>

// Saludos

eli02 11-06-2012 22:30:15

bajar un archivo pdf de una base de datos
 
Hola; utilize el codigo q me facilitaron y puedo cargar el archivo a la base de datos pero al querer desacargarlo me genera el siguiente error

Notice: Trying to get property of non-object in C:\wamp\www\recuperar\bajar.php on line 13

en el siguiente codigo:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
mysql_connect('localhost', 'root', '');
mysql_select_db('archivos');

$nombre= $_POST['nombre'];

$sql = "SELECT * FROM documentos where DOC_Nombre = '$nombre'";
$data = mysql_query($sql) or die(mysql_error());

$documento = mysql_fetch_object($data);
echo $documento->pdf;

exit;
}
?>

les agradezco su ayuda.

Casimiro Notevi 11-06-2012 22:39:30

Vuelvo a recordarte que debes poner los tags al código fuente, ejemplo:



Gracias :)

roman 12-06-2012 18:38:01

Cita:

Empezado por eli02 (Mensaje 434868)
[size=1][font=Arial][size=2]Notice: Trying to get property of non-object in C:\wamp\www\recuperar\bajar.php on line [i]13

Como dije, el código no verifica nada. Quizá podrías agregar esta verificación:

Código PHP:

$data mysql_query($sql) or die(mysql_error());

$documento mysql_fetch_object($data);

if (
$documento)
{
  echo 
$documento->pdf;
}
else
{
  echo 
'No se encontró el documento';



Dado que la consulta parece realizarse con éxito (de lo contrario el script acabaría desde la línea de la consulta por el die), cabe suponer que el problema es que la consulta no regresó nongún registro. Tienes entonces que asegurarte que pones el mismo nombre con el que guardaste el archivo.

// Saludos


La franja horaria es GMT +2. Ahora son las 17:26:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi