PHP - Modificar imagen en SQL server

 
Vista:
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 29/07/2020 21:02:58
Hola, he estado intentado modificar una imagen con el siguiente código pero por alguna razón solo actualiza la página sin realizar la modificación correctamente.
Si alguien pudiera ayudarme se los agradecería mucho:)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
if(isset($_POST['btnmodificar']))
{
  $foto  = $_FILES['imagen']['tmp_name'];
  //lo comvertimos en binario antes de guardarlo
  $foto=file_get_contents($_FILES["imagen"]["tmp_name"]);
 
 
  $actualizar_correo = $_POST['txtcorreo'];
  $actualizar_contrasena = $_POST['txtcontrasena'];
 
  // $consulta = "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena',imagen='$actualizar_imagen' WHERE IDalumnoinfo='18005131'";
 
  $consulta = "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=? WHERE IDalumnoinfo='18005131',array($foto)";
 
  $ejecutar = sqlsrv_query($con, $consulta);
 
 
  if($ejecutar)
  {
    if ($actualizar_correo==NULL)
    {
      echo "<script>alert('Debe ingresar un correo electrónico')</script>";
    }
    else if ($actualizar_contrasena==NULL)
    {
      echo "<script>alert('Debe ingresar una contraseña')</script>";
    }
    else
    {
      echo "<script>alert('Datos actualizados')</script>";
      echo "<script>window.open('perfil.php', '_self')</script>";
    }
  }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 93
Ha aumentado su posición en 38 puestos en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Luis (24 intervenciones) el 30/07/2020 09:37:33
Revisa la $consulta, ' = ? '
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 2.855
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por joel (865 intervenciones) el 30/07/2020 10:46:55
Hola Lizbeth, creo que esta mal... creo que tendría que ser algo así:

1
2
3
$consulta = "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=? WHERE IDalumnoinfo='18005131'";
 
$ejecutar = sqlsrv_query($con, $consulta, array($foto));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 31/07/2020 20:20:23
Hola Joel, he intentado como has dicho pero sigue igual, solo recarga la página sin modificarla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 2.855
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por joel (865 intervenciones) el 31/07/2020 21:40:05
Has probado ha hacer un:

1
die($consulta);

Haber que te devuelve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 31/07/2020 22:26:23
me devuelve lo siguiente
1
UPDATE ialumnosinfo SET correo='ejemplo@hotmail.com', contrasena='123', imagen=? WHERE IDalumnoinfo='18005131'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 2.855
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por joel (865 intervenciones) el 01/08/2020 09:06:09
Si la variable $foto es un valor correcto... deberia de funcionarte...

prueba a ejecutarlo directamente en la base de datos, cambiando el ? por cualquier texto... algo así:
1
UPDATE ialumnosinfo SET correo='ejemplo@hotmail.com', contrasena='123', imagen='xxxxx' WHERE IDalumnoinfo='18005131'

Te funciona?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 877
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por italo_pm (190 intervenciones) el 01/08/2020 17:25:53
Hola

hay mucha informacion que hace falta....

- tu form de update tiene la sentecia para el update de imagenes??

1
enctype='multipart/form-data'

a modo de debug, deberia de hacer el print_r($_FILES); para ver cual y como es el contenido del file que esta llegando....

cambia de esto

1
2
if(isset($_POST['btnmodificar']))
{

a esto:

1
2
3
4
5
6
7
8
9
10
11
if(isset($_POST['btnmodificar']))
 
{
 
//**** inicio - DEBUG
 
//* imprimo array $_FILES para comprobar contenido.
 
print_r($_FILES);
 
//**** final - DEBUG



doy por hecho que el campo "imagen" de tu tabla es de tipo blob ya que estas guardando el file.

en tu query el principal error es que no haces ningun tipo de control al momento de ejecutarla.

prueba de esto:

1
2
3
$consulta = "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=? WHERE IDalumnoinfo='18005131',array($foto)";
 
  $ejecutar = sqlsrv_query($con, $consulta);

a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=? WHERE IDalumnoinfo='18005131'";
 
$params = array($foto);
 
$ejecutar = sqlsrv_query( $con, $consulta, $params);
 
//************ DEBUG *********************//
// inicio - Si hay algun problema duranta la ejecucion del update, imprimo el error.
 
if( $ejecutar === false ) {
     die( print_r( sqlsrv_errors(), true));
}
 
// final
//************ DEBUG *********************//

primero controlaria si los campos son INT o Char etc etc para a su vez corregir las comillas etc etc etc.

prueba y escribe los resultados.

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 02/08/2020 00:43:57
Hola, el campo imagen es de tipo varbinary(MAX).
He agregado lo que me has puesto y lanza el siguiente error:

Array ( [imagen] => Array ( [name] => 0ac7f938a9f122dd43384e1a8d7b7a63.jpg [type] => image/jpeg [tmp_name] => C:\xampp\tmp\phpF349.tmp [error] => 0 [size] => 18654 ) ) Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -40 [code] => -40 [2] => An error occurred translating string for input param 1 to UCS-2: No hay ninguna asignaci�n en la p�gina de c�digos de m�ltiples bytes de destino para el car�cter Unicode. [message] => An error occurred translating string for input param 1 to UCS-2: No hay ninguna asignaci�n en la p�gina de c�digos de m�ltiples bytes de destino para el car�cter Unicode. ) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 877
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por italo_pm (190 intervenciones) el 02/08/2020 23:39:56
Hola

el prime print_r($_FILES) devuelve todo la informacion sobre el file:

1
Array ( [imagen] => Array ( [name] => 0ac7f938a9f122dd43384e1a8d7b7a63.jpg [type] => image/jpeg [tmp_name] => C:\xampp\tmp\phpF349.tmp [error] => 0 [size] => 18654 ) )

y el otro es mysql que devuelve los errores del update.

1
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -40  => -40 [2] => An error occurred translating string for input param 1 to UCS-2: No hay ninguna asignacin en la pgina de cdigos de mltiples bytes de destino para el carcter Unicode. [message] => An error occurred translating string for input param 1 to UCS-2: No hay ninguna asignacin en la pgina de cdigos de mltiples bytes de destino para el carcter Unicode. ) )

pues le faltaba convertirlo en binario...

prueba (dejando el control del error en el UPDATE):

de esto:

1
2
3
$foto  = $_FILES['imagen']['tmp_name'];
  //lo comvertimos en binario antes de guardarlo
  $foto=file_get_contents($_FILES["imagen"]["tmp_name"]);

a esto:

esto lo puedes comentar. //print_r($_FILES);

1
2
3
4
5
6
7
8
9
10
11
//$foto  = $_FILES['imagen']['tmp_name'];
//lo comvertimos en binario antes de guardarlo
//$foto=file_get_contents($_FILES["imagen"]["tmp_name"]);
 
 
$foto_tmp = $_FILES["imagen"]["tmp_name"];
 
$foto_to_convert = file_get_contents($foto_tmp);
 
// convierto en binario para guardarlo en la tabla.
$foto = base64_encode($foto_to_convert);

agrega un mensaje para saber si el update no dio error.

de esto:

1
2
3
4
5
6
7
8
9
//************ DEBUG *********************//
// inicio - Si hay algun problema duranta la ejecucion del update, imprimo el error.
 
if( $ejecutar === false ) {
     die( print_r( sqlsrv_errors(), true));
}
 
// final
//************ DEBUG *********************//


a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//************ DEBUG *********************//
// inicio - Si hay algun problema duranta la ejecucion del update, imprimo el error.
 
if( $ejecutar === false ) {
 
     die( print_r( sqlsrv_errors(), true));
 
} else  {
 
        echo "OK: Update ejecutado correctamente.";
 
}
 
// final
//************ DEBUG *********************//

solo una duda, tu lo que deseas o estas haciendo es guardar el file en tu tabla no?? y

prueba y escribes los resultados.

salud2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 04/08/2020 20:58:36
Hola, me da un problema con los tipos de datos:

Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 257 [code] => 257 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query. ) )

Muchas gracias por tu ayuda:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 877
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por italo_pm (190 intervenciones) el 05/08/2020 04:46:30
hola

bueno, normalmente no trabajo con sqlserver pero podemos buscar info para darle solución.

Al parecer el problema es al momento de guardar la imagen en el campo de tu tabla, comentas que es de tipo varbinary (max), a todo esto me nace la curiosidad de saber cómo es el código al mometo de inscribirse, esto que estás haciendo es cuando haces el UPDATE, pero en tu código cuando haces el INSERT como es el código??? se supone que si es la misma tabla y el mismo campo debería de funcionar con el INSERT, puedes revisar y escribirnos como esta esa secciona del código por favor.

siguiendo adelante con el UPDATE... se podria probar al momento del update haciendo un CONCAT dandole el dato y el tipo de dato.....

en el ultimo codigo que había escrito,

cambiar de esto:

1
2
// convierto en binario para guardarlo en la tabla.
$foto = base64_encode($foto_to_convert);

a esto:

1
2
// preparo la variable para el update y definirlo como varbinary para guardarlo en la tabla.
$foto = $foto_to_convert;

se debe se cambiar la instruccion de UPDATE

de esto:

1
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=? WHERE IDalumnoinfo='18005131'";

a esto:

1
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=CAST (? AS varbinary(max)) WHERE IDalumnoinfo='18005131'";

prueba y escribe los errores, responde sobre como esta hecho tu INSERT.

salud2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 05/08/2020 22:23:23
Hola, no tengo un código de insert ya que lo hago directamente en la bd, pero la sentencia que utilizo es la siguiente:

1
INSERT INTO ialumnosinfo(IDalumnoinfo,correo,contrasena,imagen) VALUES(18005131,'ejemplo@gmail.com','123','C:\Users\Usuario\Desktop\000.jpg')

He probado el código que has puesto y dado el siguiente error:(

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -40 [code] => -40 [2] => An error occurred translating string for input param 1 to UCS-2: No hay ninguna asignaci�n en la p�gina de c�digos de m�ltiples bytes de destino para el car�cter Unicode. [message] => An error occurred translating string for input param 1 to UCS-2: No hay ninguna asignaci�n en la p�gina de c�digos de m�ltiples bytes de destino para el car�cter Unicode. ) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 877
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por italo_pm (190 intervenciones) el 06/08/2020 11:24:21
Hola

bueno a esto punto, el error no es dado por php, es mas un problema de sqlserver por lo que sugiero que pidas soporte en la seccion de sqlserver del foro, ahi sabran ayudarte mejor...

el link: https://www.lawebdelprogramador.com/foros/SQL-Server/index1.html

por otra parte,

la sentencia de insert no te da error??

1
INSERT INTO ialumnosinfo(IDalumnoinfo,correo,contrasena,imagen) VALUES(18005131,'ejemplo@gmail.com','123','C:\Users\Usuario\Desktop\000.jpg')

ya que si tu campo imagen es de tipo varbinary(MAX) deberia darte error por 'C:\Users\Usuario\Desktop\000.jpg' aunque lo tiene solo como texto pero nada mas, tu logras ver las imagenes en tu web?

a modo de test, puedes probar cambiando tu sentencia de update:

de esto:


1
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=CAST (? AS varbinary(max)) WHERE IDalumnoinfo='18005131'";

a esto:

1
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=BulkColumn FROM OPENROWSET( Bulk '".?."', SINGLE_BLOB) AS BLOB WHERE IDalumnoinfo='18005131'";

la idea es que la query quede asi:

1
2
3
4
5
6
7
8
9
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=BulkColumn FROM OPENROWSET( Bulk '".$_FILES["imagen"]["tmp_name"]."', SINGLE_BLOB) AS BLOB WHERE IDalumnoinfo='18005131'";
 
//en la sentencia anterior el ? viene remplazado por:
 
// $foto que es:
 
//$foto_tmp = $_FILES["imagen"]["tmp_name"];
//$foto_to_convert = file_get_contents($foto_tmp);
//$foto = $foto_to_convert;

en todo caso lo mejor serà que abras un tema en la secciona sqlserver del foro.

prueba y escribenos los errores,

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Modificar imagen en SQL server

Publicado por Lizbeth (9 intervenciones) el 06/08/2020 23:32:18
Hola, el insert no da error al ingresarlo de esa manera y si muestra la imagen en la web :)
He realizado el ultimo código que has puesto:

1
$consulta= "UPDATE ialumnosinfo SET correo='$actualizar_correo', contrasena='$actualizar_contrasena', imagen=BulkColumn FROM OPENROWSET( Bulk '".$_FILES["imagen"]["tmp_name"]."', SINGLE_BLOB) AS BLOB WHERE IDalumnoinfo='18005131'";

y ha funcionado! Ya modifica la imagen sin problemas :)))
Muchísimas gracias por toda tu ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar