Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-07-2003
gines gines is offline
Miembro
 
Registrado: jul 2003
Ubicación: Murcia
Posts: 10
Poder: 0
gines Va por buen camino
Insertar una imagen en BBDD con SQL Server y PHP

Hola a todos.

Creo estar siguiendo todos los pasos necesarios para "subir" un archivo JPG a un registro de bbdd SQl Server 2000. La función:
Código PHP:
function UploadFoto($ID)
{
  
$archivo $_FILES["archivo"]["tmp_name"];
  
$tamanio $_FILES["archivo"]["size"];
  
$tipo $_FILES["archivo"]["type"];
  
$nombre $_FILES["archivo"]["name"];
            
  if ( 
$archivo != "none" )
  {
    
$this->ConectaBBDD(); //script de acceso a la bbdd.

    
$fp fopen($archivo"rb");
    
$contenido fread($fp$tamanio);
    
$contenido addslashes($contenido);
    
fclose($fp);
    
$qry "update tb set foto = '$contenido' where IDReg = $ID";
    
$datos mssql_query($qry$this->id_conexion);
 } else print 
"No se ha podido subir el archivo al servidor";

... como es natural antes he seleccionado el archivo con un formulario debidamente codificado con enctype='multipart/form-data' y un input tipo "file".

El problema es que al intentar ejecutar el update, me da toda una secuencia de errores de los que adjunto alguno:

Warning: mssql_query() [function.mssql-query]: message: Line 8: Incorrect syntax near ')'. (severity 15) in C:\miprograma.php on line 1221


Warning: mssql_query() [function.mssql-query]: message: The identifier that starts with 'y$µwZ§ì‹ñªÃáîµâ _A³Ólôý\"k§_G½bŽ&l\0¥» ñ\'—`è¾iUÛÍjûÇןà û_õ>AÒö¿‡ìSû«òþ«µý—?d}\'ö¬ø£ñÃSøžo¾‡¤Á¨YÜ,\"xüù$EÛ\"ðJíßÐ× ¡³aÙù' is too long. Maximum length is 128. (severity 15) in C:\miprograma.php on line 1221

y no veo el origen ni la manera de solucionarlo.

¿ A alguien se le ocurre algo ?

Gracias de antemano y un saludo a todos.
Responder Con Cita
  #2  
Antiguo 08-07-2003
gines gines is offline
Miembro
 
Registrado: jul 2003
Ubicación: Murcia
Posts: 10
Poder: 0
gines Va por buen camino
Hola.

Vista la inexistencia de respuestas mucho me temo que se trate de un tema ajeno a casi todos. Por eso me he empeñado y al final creo haber conseguido solucionar el problema. Lo paso al foro por si ayuda a alguien.

- En primer lugar, el campo de la tabla SQl Server que contiene la imagen debe ser "binary" o "varbinary". Si usamos los predefinidos tipo "Image" no funciona.

- A la hora de actualizar el contenido, hay que usar la función CONVERT, que vuelca a datos binarios, de la forma:

update tabla set campobinary = convert(binary, '$contenido') where IDReg = $ID

De este modo sí funciona.

Lo que ahora no quiere funcionar, es la visualización del archivo, en mi caso jpg.

Intento lo que normalmente es correcto:

<img src='pruebas.php'>

donde pruebas.php hace un select del campo y luego un echo, precedido del correspondiente

header("Content-type: image/jpeg")

A ver si alguien puede echarme un cable con esto, aunque por las fechas que estamos parece que andemos bajo mínimos.

Gracias de nuevo y saludos.
Responder Con Cita
  #3  
Antiguo 31-05-2006
BlackFreD BlackFreD is offline
Registrado
 
Registrado: may 2006
Posts: 9
Poder: 0
BlackFreD Va por buen camino
Gines, estoy muy interesado en este tema ya que es justo lo que necesito hacer para uno de mis proyectos.

Estoy trabajando con MS SQL Server + PHP y hasta ahora tenia un directorio con permisos para usuarios anonimos donde subia las imagenes y las usaba. Pero ahroa me interesa guardar las imagenes en la bdd. Al igual que tu, ando un poco desesperado. He encontrado mucha info acerca de MySQL + PHP, pero en cuanto a SQL Server apenas encuentro nada. Se que hay que tener el formato de registro en binary en lugar de image y que hay que pasar la imagen a binario para guardarla.

Para visualizarla hay que cambiar el header antes de hacer el echo pero tampoco me funciona... Estoy en pruebas.

Quisiera saber si al fin lo lograste?

Muchas gracias!
Responder Con Cita
  #4  
Antiguo 31-05-2006
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Yo utilizao MySql y resuelvo ese problema simplemente con la función "addslashes" aplicada a contenido de la imagen.

El segundo tema, el que no te funcione el mostrar la imagen, es posible que sea por el echo de utilizar la función "convert", pienso yo, si has realizado una conversión para guardar supongo que para mostrar el contenido tendrás que hacer el paso contrario.

Prueba usar "addslashes" en vez de "convert" a ver si se soluciona el problema.

PD. "addslashes" es una función de PHP.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente

Última edición por kayetano fecha: 31-05-2006 a las 17:30:25.
Responder Con Cita
  #5  
Antiguo 01-06-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
¿Pero porque debe estar la imagen exactamente en la base de datos?, no sería mas fácil (además de ahorrarnos tiempo en la consulta) si solo guardamos la ubicación de la imagen en la base de datos, tomamos este dato con php y llamamos a la imagen despues de esto.

En general los servicios de hospedaje tienen una cantidad un tanto pequeña para las bases de datos, mientras que es todo lo contrario con el espacio en disco que ofrecen, ademas si el servidor de bd está en un equipo distinto al del servidor web, estará tardando mas tiempo en la consulta.

Saludos.
Responder Con Cita
  #6  
Antiguo 01-06-2006
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Cita:
Empezado por D-MO
¿Pero porque debe estar la imagen exactamente en la base de datos?, no sería mas fácil (además de ahorrarnos tiempo en la consulta) si solo guardamos la ubicación de la imagen en la base de datos, tomamos este dato con php y llamamos a la imagen despues de esto.
Razón tienes, yo cuando trabajo con muchas imágenes utilizo esta opción para na saturar la BBDD.

Pero gines no ha preguntado eso, y yo intento solucionar el problema en concreto, porque puede tener sus razones para hacerlo asín y oye saber algu nuevo nunca biene mal y puede servir en otras situaciones.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #7  
Antiguo 04-06-2007
Jiro-101 Jiro-101 is offline
Registrado
 
Registrado: jun 2007
Posts: 1
Poder: 0
Jiro-101 Va por buen camino
Solucion: insertar imagenes o archivos en una base de datos MSSQL con lenguaje PHP

...Primeramente un saludo a todos.

Se que este post en el foro ya tiene hace un buen, pero recientemente me encargaron hacer un sitio web con PHP y base de datos MSSQL y se necesitaba almacenar imagenes en una tabla en la BD sin encontrar una solucion viable , aunque afortunadamente vine a dar aqui, tuve que extender mi investigacion hasta libros de PHP/MSSQL tomando en cuenta que antes no programaba en PHP y ahora que si, este ejemplo se lleva a cabo con la version "PHP 5.2.2" y MSSQL 2000, para esto encontre ciertas configuraciones previas que hay que tomar en cuenta para que esto funcione, asi que si mas preambulos ay les va la receta:

primeramente creamos la tabla en la base de datos, el nombre que gusten los campos que gusten, y para este ejemplo vamos a manejar 4 campos para almacenar las imagenes:
[foto] [text] ,
[foto_nombre] [varchar] (100) ,
[foto_kb] [varchar] (20) ,
[foto_tipo] [varchar] (20)
En donde el campo foto, es un campo de texto normal, alli es donde vamos a guardar la imagen, los demas campos contendran la informacion de la imagen.

despues... antes de empezar a programar cualquier cosa en PHP, tenemos que tomar en cuenta 2 cosas importantes que deben estar configuradas en el archivo de PHP.INI:
la primera, tener activadas las extensiones de mssql
extension=php_mssql.dll
y la segunda, como vamos a manejar imagenes las cuales vamos a convertir a texto binario largo, tenemos que tener activada esta opcion para que PHP nos permita hacerlo, esto es en las 2 siguientes lineas:
; Valid range 0 - 2147483647. Default = 4096.
mssql.textlimit = 2147483647

; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 2147483647
aqui lo que hacemos es poner al maximo el rango valido para que PHP pueda manejar en un GET o POST la informacion que vamos a mandar a la base de datos.

ahora si... a programar.
vamos a hacerlo en 2 pasos, el upload y el download, en el upload, primeramente creamos un formulario con estas caracteristicas:
<form method="POST" enctype="multipart/form-data" action="inserta_imagen.php">
<input type="file" name="foto_a_subir" id="foto_a_subir" size="50">
<input type="submit" value=" Aceptar " name="aceptar">
</form>
despues creamos el archivo inserta_imagen.php, en donde la informacion que vamos a obtener la vamos a manejar asi:
$Imagen = $_FILES['foto_a_subir']['tmp_name'];
$FotoNombre = $_FILES['foto_a_subir']['name'];
$FotoTipo = $_FILES['foto_a_subir']['type'];
$FotoKb = $_FILES['foto_a_subir']['size'];
$Fotografia = base64_encode(addslashes(fread(fopen($Imagen, "r"), filesize($Imagen))));
las primeras 4 lineas es donde php obtiene la informacion de la imagen, primeramente la imagen, luego el nombre, tipo de archivo y la ultima linea es en donde esta el secreto de este asunto, lo que hacemos es convertir la imagen a codigo binario codificado a 64, incluyendo los slashes. esta informacion se va a guardar directamente asi tal cual, en el campo foto de la base de datos. hacemos el INSERT INTO y listo...
$Query = "INSERT INTO fotografias(id_foto, foto, foto_nombre, foto_kb, foto_tipo) VALUES(" . $Fotografia . "','" . $FotoNombre . "','" . $FotoKb . "','" . $FotoTipo . "')";
luego, para poder visualizar la imagen, es muy sencillo, simplemente tomamos la misma informacion en un SELECT, pero para esto tenemos que volver a convertir el codigo binario de 64, para eso hacemos lo siguiente, anteriormente solicitamos extraer la informacion de tipo de imagen, esto para posteriormente poder manipular el contenido a imprimir en pantalla:
$Query_fotos = mssql_query("SELECT foto,foto_nombre,foto_tipo,foto_kb FROM $Tabla WHERE $LaCondicion=$ID");
$rs_fotos = mssql_fetch_array($Query_fotos);
header("Content-type: " . $rs_fotos["foto_tipo"]);
print stripslashes(base64_decode($rs_fotos["foto"]));
aqui primeramente hacemos nuestro SELECT, traemos la info y lo ponemos en un array, luego, mandamos cambiar el header de la pagina, indicando el tipo de contenido el cual solicitamos cuando subimos la imagen, luego, convertimos el codigo binario con la funcion base64_encode y listo.

y asi es como consegui subir fotos o archivos a mi base de datos con PHP y MSSQL, sigan los pasos tal cual como se los puse aqui, y no van a tener ningun problema.

felices teclazos... hasta pronto.

Última edición por Jiro-101 fecha: 04-06-2007 a las 21:53:41.
Responder Con Cita
  #8  
Antiguo 11-04-2011
wcarval wcarval is offline
Registrado
NULL
 
Registrado: abr 2011
Posts: 1
Poder: 0
wcarval Va por buen camino
problemas al extraer imagen desde ms sql server 2005

buen día, he leído este post y es el único mas o menos referenciado con mi problema.

Resulta que necesito extraer una imagen desde sql server 2005, desde un campo tipo "image".... esto lo hago desde php, pero no lo he logrado, la salida es parcial y nunca completa la imagen.

he intentado infinidad de métodos según los que he conseguido y nada todavía.

estoy desarrollando una aplicación de integración remota de datos y necesito tomar esa imagen para insertarla en una base de datos mysql, o convertirla en un archivo físico para después trasladarla por ftp, lo que ya hago normalmente.

la verdad tengo bastante experiencia en php pero no he logrado dar con la solución, siempre me saca parcialmente la imagen, he intentado por odbc.... y ahora ya tengo configurado php con conexión directa a mssql y nada.

agradecería cualquier ayuda para la extracción de la imagen y su escritura en físico, o inserción en la base de datos...

gracias por su aporte, espero alguna noticia.

feliz dia
Responder Con Cita
  #9  
Antiguo 15-04-2011
Avatar de juliamo28
juliamo28 juliamo28 is offline
Registrado
NULL
 
Registrado: abr 2011
Ubicación: Pamplona
Posts: 6
Poder: 0
juliamo28 Va por buen camino
Súper util este tema, muchas gracias a todos por sus aportes.
Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:28:00.


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
Copyright 1996-2007 Club Delphi