Foros del Web » Programando para Internet » PHP »

guardar imagen en Sql Server 2000

Estas en el tema de guardar imagen en Sql Server 2000 en el foro de PHP en Foros del Web. Cordial Saludo.. he leido en el foro pero todo es con mysql; necesito guardar imagenes en una tabla sql server pero siempre me sale el ...

  #1 (permalink)  
Antiguo 30/10/2008, 10:08
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
guardar imagen en Sql Server 2000

Cordial Saludo..

he leido en el foro pero todo es con mysql; necesito guardar imagenes en una tabla sql server pero siempre me sale el error: The name 'gif' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted

es un campo image; lo intente con un jpg y tampoco

agragezco la ayuda y sugerencias que me puedan brindar.
  #2 (permalink)  
Antiguo 30/10/2008, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Hola tattojk,

Si publicas el código de como lo estas haciendo es más fácil que te apoyemos.

Saludos.
  #3 (permalink)  
Antiguo 30/10/2008, 10:13
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: guardar imagen en Sql Server 2000

y su codigo para orientarlo, todo caso entre sql server y mysql no es mucha la diferencia de sentencias, lo otro su campo es tipo blob???? y lo mismo es necesario guardarlas en la DB no le seria mas comodo guardar las imagenes en el server?
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 30/10/2008, 10:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Gracias por responder tan rapido, kaninox lo mas facil es guardarlos en carpetas, pero la administración dijo que necesitan darles permisos a carpetas y no se que mas vainas que debo hacerlo en la base de datos y hacer una opcion de consultas de acuerdo a perfiles; ahi nada que hacer....
Sql Server no tiene el campo BLOB...
Aqui el codigo....

<html>
<head>
<title>Parametros Generales</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#97CBFF">
<form action="" method="post" enctype="multipart/form-data" name="form1">
<table width="64%" border="0" align="center" cellpadding="0" cellspacing="0" style="border-color:#003399;border-style:double;" class="textotabla">
<tr bgcolor="#003399">
<td colspan="7"> <div align="center"><font color="#FFFFFF" size="5">Parametros
Generales</font></div></td>
</tr>
<tr bgcolor="#CCCCCC">
<td rowspan="2"> <div align="right">Logo</div></td>
<td colspan="6" bgcolor="#CCCCCC"> <input name="file" type="file" class="texto" size="70"></td>
</tr>
</table>
<table width="64%" border="0" align="center">
<tr>
<td><div align="center">
<input name="Accion" type="hidden" id="Accion">
<input name="btnAdicionar" type="button" id="btnAdicionar" value="Adicionar" class="texto1"
style="border: white 1px solid; width: 60; height: 20;background-color: #DEDEDE;" onClick="form1.Accion.value='Adicionar';submit();" >
</div></td>
<td><div align="center">
<input name="btnCerrar" type="button" id="btnCerrar" onClick="window.location='Contenido.php';" class="texto1"
style="border: white 1px solid; width: 70; height: 20;background-color: #DEDEDE;" value="Cerrar">
</div></td>
</tr>
</table>
</form>
</body>
</html>
<?php
if($_POST['Accion']=='Adicionar')
{
$nombre = $_FILES['file']['name'];
$Sql = "Insert into prueba values(".$archivo.")";
$Ins = mssql_query($Sql,$conexion);
}
?>


ahhh antes de que se me olvide cree una tabla con dos campos consecutivo que es autonumerico y imagenes que es image...

Agradezco de antemano la ayuda que me faciliten
  #5 (permalink)  
Antiguo 30/10/2008, 11:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Hola tattojk,

No puedes subir el archivo de la forma que propones, tienes que primero leer todo el contenido del archivo a una variable usando fopen/fread/fclose, y luego esa cadena es la que insertas a SQL.

Saludos.
  #6 (permalink)  
Antiguo 30/10/2008, 13:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

gracias por tu respuesta gatorv; si te entendi bien debo subir la imagen al server y leer la imagen; pero lo que no entiendo es como enviar el contenido a guardar....

te refieres a la variable con la que abro la imagen??
$archivo = fopen('imagen.gif',r)


me puedes explicar mejor por favor

de antemano agradezco sus respuestas
  #7 (permalink)  
Antiguo 30/10/2008, 13:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Lee en el manual, tienes que leer todo el contenido o en su caso usa file_get_contents() eso te devolvera el stream binario de la imagen y luego lo puedes insertar, prueba algo así:
Código php:
Ver original
  1. $Sql = "Insert into prueba values(".addslashes(file_get_contents($archivo)).")";

Saludos.
  #8 (permalink)  
Antiguo 30/10/2008, 14:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

GatorV lo intente pero me sale este error:
Warning: file_get_contents(ÿØÿà): failed to open stream: No such file or directory in C:\Archivos de programa\Apache Group\Apache2\htdocs\CdiSql\Parametros\Prueba.php on line 99


y este es el codigo:
$nombre = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];

$uploaddir = "../imagenes/";

$file = $uploaddir . $nombre;

move_uploaded_file($temp, $file);

echo $file;
$arch = fopen($file,"r");
$content = fread($arch,filesize($file));

$Sql = "Insert into prueba values(".addslashes(file_get_contents($content))." )";
$Ins = mssql_query($Sql,$conexion);
fclose($arch);


no se que estare haciendo mal....

agradezco de antemano sus aportes...
  #9 (permalink)  
Antiguo 30/10/2008, 19:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Si ya tienes todo en $content, no es necesario que uses file_get_contents, esa función te sirve para hacer lo que pones de fopen,fread,fclose pero en una sola linea.

Saludos.
  #10 (permalink)  
Antiguo 04/11/2008, 09:35
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Cordial Saludo GatorV..

lo intente quitando el file_get_contents y deje el addslashes pero me sale estos warning

Warning: mssql_query(): message: Line 2: Incorrect syntax near '\'. (severity 15) in C:\Archivos de programa\Apache Group\Apache2\htdocs\CdiSql\Parametros\Prueba.php on line 103

Warning: mssql_query(): message: The identifier that starts with '¿w¦ÏðŠ4ã}`ym—=®õ-Ú/_N¶—msÿ\0Ã?÷ÿ\0Iü„Jž÷^Áã``1ôLêí¿ÊL9¥z\05ã–ÍÍã‰Ë C’1õåþ´ÿ\0Gû£ýWdaâ¸8Ç×ó{\'ÿ\0Öûú!7ÕV·öv+µß éDxb' is too long. Maximum length is 128. (severity 15) in C:\Archivos de programa\Apache Group\Apache2\htdocs\CdiSql\Parametros\Prueba.php on line 103

igualmente lo intente asi:
$Sql = "Insert into prueba values($content)"; y me sale estos warning

Warning: mssql_query(): message: Unclosed quotation mark before the character string 'ÿØÿà'. (severity 15) in C:\Archivos de programa\Apache Group\Apache2\htdocs\CdiSql\Parametros\Prueba.php on line 103

Warning: mssql_query(): message: Line 1: Incorrect syntax near 'ÿØÿà'. (severity 15) in C:\Archivos de programa\Apache Group\Apache2\htdocs\CdiSql\Parametros\Prueba.php on line 103


agradezco de antemano las sugerencias que me puedan aportar
  #11 (permalink)  
Antiguo 04/11/2008, 09:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Hola tatojk,

Si te fijas, SQL Server te rechaza el query porque es muy largo, necesitas ver la forma de poder incrementar ese valor en la configuración de tu SQL.

Saludos.
  #12 (permalink)  
Antiguo 04/11/2008, 15:43
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Cordial saludo

lo que pasa es que el ampo tipo image no es modificable y solo es length 16 y ni mas ni menos; intente con el tipo de dato binary de 100 y tampoco....

no se que otra cosa hacer...

agradezco la ayuda que me puedan ofrecer...
  #13 (permalink)  
Antiguo 04/11/2008, 16:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

No es el tipo de campo, es el query el que no lo acepta por ser muy largo, tienes que investigar como aumentar el tamaño del query pero lo tienes que hacer directo en tu SQL Server.

Saludos.
  #14 (permalink)  
Antiguo 05/11/2008, 14:45
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

saludos GatorV

bueno, supongo que no sera posible, ya le di todas las vueltas posibles y nada....

gracias por sus respuestas....
  #15 (permalink)  
Antiguo 05/11/2008, 14:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Segun lo que he leido, la forma correcta de subir los archivos es en base64, ya que si la subes como binario, te muestra ese error.

Saludos.
  #16 (permalink)  
Antiguo 10/11/2008, 14:20
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Que tal GatorV

estuve investigandpo acerca del base64 y le agregue las funciones pero sigue mostrando el mismo warning....


agradezco tus aportes
  #17 (permalink)  
Antiguo 10/11/2008, 14:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

¿Cual de todos los warnings te da ahora? ¿como quedo tu código?

Saludos.
  #18 (permalink)  
Antiguo 11/11/2008, 07:35
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Saludos GatorV; este es el codigo, no se si solo con la funcion bastaba...

$nombre = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
$size = $_FILES['file']['size'];

$uploaddir = "../imagenes/";

$file = $uploaddir . $nombre;

move_uploaded_file($temp, $file);

$arch = fopen($file,"rb");
$content = fread($arch,$size);

$Sql = "Insert into prueba values(".base64_encode($content).")";
$Ins = mssql_query($Sql,$conexion);
fclose($arch);

y este es el warning:
Warning: mssql_query(): message: Line 1: Incorrect syntax near '/'. (severity 15)

este es otro:
Warning: mssql_query(): message: The identifier that starts with 'SH1RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAA ABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAc AAAAcgEyAAIAAAAUAAAAjodpAAQAA' is too long. Maximum length is 128. (severity 15)

intente asi:
$Sql = "Insert into prueba values('".base64_encode($content)."')";
y sale este warning:
Warning: mssql_query(): message: Operand type clash: text is incompatible with image (severity 16)

intente cambiando el tipo de datos a binary y me sale los mismos warning...

Agradezco de antemano la ayuda que me brindas...
  #19 (permalink)  
Antiguo 11/11/2008, 19:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Creo ya vamos bien, el error te dice que el tipo de campo no es correcto, trata de cambiar el campo por Memo o LongText.

Saludos.
  #20 (permalink)  
Antiguo 12/11/2008, 08:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Cordial Saludo GatorV

en Sql Server no hay tipo de campo memo ni longtext...

Sin embargo probe con el tipo de campo text y me lo guarda pero cuando quiero visualizarla le coloco base64_decode y no me muestra la imagen ni el formulario...

intente con el tipo de dato varbinary y me sale el mismo warning:
Warning: mssql_query(): message: Line 1: Incorrect syntax near '/'. (severity 15)

Warning: mssql_query(): message: The identifier that starts with 'SH1RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAA ABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAc AAAAcgEyAAIAAAAUAAAAjodpAAQAA' is too long. Maximum length is 128. (severity 15)

no se que otra cosa hacer...

agradeciendo de antemano sus aportes....
  #21 (permalink)  
Antiguo 12/11/2008, 09:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

El tipo debe de ser text, que código utilizas para visualizar la imagen?

Saludos.
  #22 (permalink)  
Antiguo 01/12/2008, 17:06
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

saludos GatorV.

como convierto text a image????


Agradezco la ayuda y sugerencias que me puedan brindar.
  #23 (permalink)  
Antiguo 01/12/2008, 17:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Ya que este almacenado como base64, solo seleccionas el campo aplicas base64_decode y haces el stream de la imagen.

Saludos.
  #24 (permalink)  
Antiguo 02/12/2008, 10:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Saludos GatorV; he mirado el foro acerca del stream pero no entiendo exactamente como hago el stream a la cadena base64 que guarde....

Puedes explicarme con un ejemplo por favor????

Agradezco la ayuda y sugerencias que me brindas.
  #25 (permalink)  
Antiguo 02/12/2008, 10:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

Solamente imprimes el resultado de base64_decode pero asegurate de enviar antes las cabeceras de la imagen.

Saludos.
  #26 (permalink)  
Antiguo 02/12/2008, 13:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Cordial Saludo GatorV.

$Sql = "Select * from prueba";
$Busq = mssql_query($Sql,$conexion);
while($arr = mssql_fetch_array($Busq))
{
header("Content-Type: image/x-jpeg");
header('Content-Length: ' . filesize(base64_encode($arr[imagen])));
echo base64_encode($arr[imagen]);
}

Pero me abre una ventana de dialogo que si lo quiero abrir o guardar el archivo php

no entiendo mucho de esto....

Agradezco la ayuda que me estas brindando.
  #27 (permalink)  
Antiguo 02/12/2008, 15:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: guardar imagen en Sql Server 2000

No tienes que hacer un while, ya que eso causa errores en las cabeceras, solamente selecciona una imagen.

Por otro lado el mime debe de ser image/jpeg, no image/x-jpeg, saludos.
  #28 (permalink)  
Antiguo 02/12/2008, 15:42
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: guardar imagen en Sql Server 2000

(no he leido las demas respuestas)

te recomiendo que subas por medio de php el archivo a un directorio en el servidor (supongo que es con php)

y solo guardes la ruta del archivo en la base de datos como agregar un registro normal, es mas rapido y mejor a mi gusto, saludos.
  #29 (permalink)  
Antiguo 05/12/2008, 10:09
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: guardar imagen en Sql Server 2000

Saludos GatorV.

hice el cambio que me especificaste y solo aparece un cuadro con una x sin mostrar la imagen y el fondo blanco en la pagina


que otro consejo me puedes dar GatorV

agradezco de antemano la ayuda que me puedas brindar,
  #30 (permalink)  
Antiguo 05/12/2008, 10:32
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: guardar imagen en Sql Server 2000

bueno, sin palabras! suerte!
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 01:35.