Foros del Web » Programando para Internet » PHP »

Ayuda PHP y PostgreSQL campo BYTEA

Estas en el tema de Ayuda PHP y PostgreSQL campo BYTEA en el foro de PHP en Foros del Web. Hola, necesito ayuda con un problema. Tengo una tabla llamada preguntas y tiene un campo tipo BYTEA donde quiero almacenar archivos. Tengo 2 paginas, index.php ...
  #1 (permalink)  
Antiguo 13/05/2010, 00:09
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Ayuda PHP y PostgreSQL campo BYTEA

Hola, necesito ayuda con un problema. Tengo una tabla llamada preguntas y tiene un campo tipo BYTEA donde quiero almacenar archivos.

Tengo 2 paginas, index.php y donwload.php. El archivo que quiero guardar es un Excel .xls de prueba llamado HorarioAbril-Mayo.xls, En la primera pagina guardo el archivo en la base de datos y en la segunda lo descargo. Todo funciona bien pero mi problema es que al momento de descargar el archivo me descarga un archivo llamado HorarioAbril-Mayo.xls y al momento de abrirlo se abre el Excel y me sale un error que dice:

El archivo que intenta abrir, 'HorarioAbril-Mayo.xls', tiene otro formato que el especificado por la extension de archivo. Compruebe que el archivo no esta dañado y procede de un origen de confianza antes de abrirlo. ¿Desea abrir el archivo ahora?

Le hago click a Si y se abre el archivo pero en codigo de maquina, me salen caracteres raros, x ejemplo:

ÐÏࡱá>þÿ Øþÿÿÿiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÚ 


Este es mi codigo de la pagina index.php:

<?php

$conexion_bd = pg_connect("host=localhost dbname=ISO17799 user=postgres password=postgres")
or die('No pudo conectarse: ' . pg_last_error());

$t='"';

$file = "C:\Users\Alfredo\Desktop\HorarioAbril-Mayo.xls";

$nombre = basename($file);

echo "<br>";

$data = file_get_contents($file);

$escaped = pg_escape_bytea($data);

$cod = "0";

$consulta = "UPDATE preguntas SET ".$t."bArchiv".$t."='$escaped' WHERE ".$t."cCodPre".$t."='$cod'";

$resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error());


$row=pg_fetch_array($resultado);



?>

<a href="download.php?id=$row&f=1" title="Baja el archivo">Bajar</a>



Y este es mi codigo de la pagina download.php:

<?php

$conexion_bd = pg_connect("host=localhost dbname=ISO17799 user=postgres password=postgres")
or die('No pudo conectarse: ' . pg_last_error());


$f=isset($_REQUEST['f'])?$_REQUEST['f']:0;

$cod = "0";
$t = '"';
$consulta = "SELECT * FROM preguntas WHERE ".$t."cCodPre".$t."='$cod'";

$resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error());

$row = pg_fetch_array($resultado);
pg_free_result($resultado);

$file=pg_unescape_bytea($row[4]);

header("Cache-control: private");
header("Content-type: txt");

if($f==1)
header("Content-Disposition: attachment; filename=HorarioAbril-Mayo.xls");

print $file;

?>



Porfavor espero puedan ayudarme, este problema no logro resolverlo de ninguna manera. Gracias


Saludos.

Última edición por alfredo22r; 13/05/2010 a las 11:24 Razón: problema anterior solucionado
  #2 (permalink)  
Antiguo 14/05/2010, 07:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Ayuda PHP y PostgreSQL campo BYTEA

La mejor forma de almacenar un archivo es subiendolo al servidor y en la base de datos solo almacenas la ruta donde está la imagen. Si deseas subir un archivo a la base de datos (no recomendado), te sugiero que pases por la parte de aportes, allí hay un ejemplo de como subir una imagen a la base de datos (en ese caso es usando mysql) pero puedes tomar el ejemplo para poder lograrlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 14/05/2010, 09:23
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Ayuda PHP y PostgreSQL campo BYTEA

Muchas gracias por tu respuesta, tienes razon, estuve pensando en tu sugerencia y tienes razon, ¿como podria subir los archivos al servidor?, lo de guardar la ruta imagino que solo la guardo en un campo varchar y listo, pero como hago para subir un archivo al servidor?. Muchas gracias x tu ayuda.

Saludos.

Última edición por alfredo22r; 14/05/2010 a las 09:28
  #4 (permalink)  
Antiguo 14/05/2010, 09:26
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Ayuda PHP y PostgreSQL campo BYTEA

Te recomiendo que busques en el foro ya anteriormente han solicitado como subir archivos y/o en internet hay mucho material de como subir archivos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 14/05/2010, 15:30
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Ayuda PHP y PostgreSQL campo BYTEA

Hola, te agradesco mucho la ayuda, busque la informacion y pude resolver mi problema. Aqui dejo el código por si alguien lo necesita:

<?php


if (isset($_POST['boton'])) {

if (is_uploaded_file($_FILES['archivo']['tmp_name']))
{
$local = $_FILES['archivo']['name'];
$remoto = $_FILES['archivo']['tmp_name'];
$tipo = $_FILES['archivo']['type'];
$extension = explode(".", $local);


if (!is_dir("archivos")) mkdir("archivos",0777);

$ruta = "archivos/" . $local;


if(move_uploaded_file($remoto, $ruta))
{
$conexion_bd = pg_connect("host=localhost dbname=ISO17799 user=postgres password=postgres")
or die('No pudo conectarse: ' . pg_last_error());

$pregunta=($_GET['pregunta']);

$t = '"';
$consulta = "UPDATE preguntas SET ".$t."cRutArc".$t."='$ruta' WHERE ".$t."cCodPre".$t."='$pregunta'";

$resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error());

?>
<style type>
#mensaje {

visibility:hidden;
}

</style>
<?php

echo "<div style='font-size:16px' align='center' ><br><br>Archivo subido correctamente</br></br></div>";

}

else

echo "Error al Mover el archivo";

}

}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Guardar Archivo</title>
</head>

<style type>
body {
margin: 0;
padding: 0;

font: normal 11px Tahoma, Arial, Helvetica, sans-serif;
color: #666666;
background-color:#F49500;
}

</style>

<body>

<?php $pregunta=($_GET['pregunta']); ?>

<form action="Guardar.php?pregunta=<?php echo $pregunta; ?>" method="POST" enctype="multipart/form-data" name="form1">
<div id="mensaje">
<p align="center">Archivo
<input name="archivo" type="file" id="archivo">
</p>
<p align="center">
<input name="boton" type="submit" id="boton" value="Guardar">
</p>
</div>
</form>




</body>
</html>

Etiquetas: postgresql, campos
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 07:02.