PDA

Ver la Versión Completa : Necesito abrir un archivo pdf alamcenado en una base de datos mysql


eli02
07-06-2012, 21:57:16
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:

<?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'";
$result1= select ($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 (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

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

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

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:


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):


<?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)


<?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
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:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

roman
12-06-2012, 18:38:01
[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:


$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