Foros del Web » Programando para Internet » PHP »

problemas al grabar

Estas en el tema de problemas al grabar en el foro de PHP en Foros del Web. Tengo el siguiente codigo que me permite grabar o bien insertar una imagen jpg en una base de datos sql server, pero al intentar hacer ...
  #1 (permalink)  
Antiguo 17/07/2003, 13:55
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 15 años, 1 mes
Puntos: 2
problemas al grabar

Tengo el siguiente codigo que me permite grabar o bien insertar una imagen jpg en una base de datos sql server, pero al intentar hacer la misma operacion con una imagen png me da error.
Que puedo modificar del codigo para que me permita grabar una imagen PNG en la base de datos.
Ya que originalmente las imagenes que existen en la base de datos son PNG y fueron grabadas con un programita de C++
y los usuarios de la base de datos me exigen que sean imagenes PNG. ya que no tengo problemas para recuperar la informacion con un query y ver la imagen atravez de PHP

Código PHP:
<?php

//   $fichero = "C:/chuty/Noticias/firma.png";
     
$fichero "C:/chuty/Noticias/lulu.jpg";      // si graba

  
$fp fopen($fichero "rb"); // o "rb" si usas Windows
  
$contenido fread($fpfilesize($fichero)); 
  
  
// Se establece la conexión con la fuente de datos
  
$conex odbc_connect("miserver""sa""sa");
  
$consulta "INSERT dbo.tmp_image(IMAGEN, NOMBRE, LONG) values ('$contenido','file-name','1234')";

  
$resultado odbc_exec($conex$consulta);
 
  
//Se liberan recursos y se cierra la conexión
  
odbc_free_result($resultado);
  
odbc_close($conex);

?>
desde ya muchas gracias y saludos

Última edición por Chuty; 17/07/2003 a las 16:04
  #2 (permalink)  
Antiguo 17/07/2003, 16:10
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 15 años, 1 mes
Puntos: 2
Pregunta :
Cual es la diferencia de leer una imagen JPG a una PNG, para que no me funcione el codigo, desde ya muchas gracias y Ayudaaaaaa
saludos
  #3 (permalink)  
Antiguo 17/07/2003, 16:33
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

En principio creo que los dos son binarios. Lo que puede que pase es que en el PNG haya algun caracter que "corte" la sentencia SQL. Algo asi como lo que pasa al intentar meter una cadena con una ':
Código PHP:
$texto="texto con ' dentro";
$sql="insert into tabla values ('$texto'); 
Esto te da error de la consulta porque intenta ejecutar la consulta:

insert into tabla values ('texto con ' dentro')

que no tiene sintaxis valida.

Porque no creo que sea problema de tamaño (prueba con un PNG mas pequeño en bytes que el JPG).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 17/07/2003, 16:51
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 15 años, 1 mes
Puntos: 2
Gracias Josemi por la respuesta, ya que eh editado la imagen PNG y dentro de la imagen tengo ambas comillas "(dobles)" y '(simples)' .

Pero no sabria como hacer para que el insert este sin las comillas sean simples o dobles, me esplico,
Código PHP:
  $consulta "INSERT dbo.tmp_image(IMAGEN, NOMBRE, LONG) values ('$contenido','file-name','1234')"
desde ya muchas gracias por tu ayuda y si aportas algun otro dato te lo agradecere.
saludos
  #5 (permalink)  
Antiguo 17/07/2003, 17:46
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, una opcion seria "escapar" esos caracteres con addslashes() (www.php.net/addslashes) para guardarlo y "desescaparolo" con stripslashes() (www.php.net/stripslashes). Al escapar pone un \ delante, es un caracter especial. Al menos asi es en MySQL, no se si es un estandard SQL o si lo soporta tu BD.

Otra opcion puede ser guardarla codificado en base64, que creo que no utiliza esos caracteres. Seria usar las funciones base64_encode() (www.php.net/base64_encode) y base64_encode() (www.php.net/base64_encode). Ojo, el tamaño del fichero puede llegar a triplicarse. Esta es la forma en que se envian los ficheros binarios adjuntos a los emails.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 18/07/2003, 10:54
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 15 años, 1 mes
Puntos: 2
Gracias Josemio por contestar, pero sigo con este problema, con base64_encode grabo lo mas bien la informacion en la base de datos pero como tu me comentas me triplica el tamaño del archivo, por eso lo descarto, y con la funcion addslashes() no puedo grabar la informacion, no se si es por error de mssql pero no puedo grabar nada. y eh probado de distintas maneras, si se te ocurre alguna otra cosa te lo agradecere. saludos y gracias de antemano
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 19:06.