Foros del Web » Programando para Internet » PHP »

Guardar dos imagenes desde un array

Estas en el tema de Guardar dos imagenes desde un array en el foro de PHP en Foros del Web. Hola a todos, tengo un código que me manda dos imágenes ( o las que yo quiera, pero tengo que validar que sean 2), ese ...
  #1 (permalink)  
Antiguo 18/07/2021, 13:17
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 8 meses
Puntos: 7
Pregunta Guardar dos imagenes desde un array

Hola a todos, tengo un código que me manda dos imágenes ( o las que yo quiera, pero tengo que validar que sean 2), ese no es el problema, el problema es como guardarlas

el html es asi:
Código HTML:
Ver original
  1. <div class="mb-3 fondo">
  2.   <label for="exampleFormControlInput1" class="form-label"><b>Elija una Imagen (2)</b></label>
  3.   <input type="file" class="form-control" name="file[]" multiple  >
  4. </div>

y el php es asi:
Código PHP:
Ver original
  1. if (isset($_FILES["file"]))
  2. {
  3.    $reporte = null;
  4.      for($x=0; $x<count($_FILES["file"]["name"]); $x++)
  5.     {
  6.         $file = $_FILES["file"];
  7.         $nombre = $file["name"][$x];
  8.         $cuantas=count($_FILES['file']['name']);//rebe
  9.         $tipo = $file["type"][$x];
  10.         $ruta_provisional = $file["tmp_name"][$x];
  11.         $size = $file["size"][$x];
  12.         $dimensiones = getimagesize($ruta_provisional);
  13.         $width = $dimensiones[0];
  14.         $height = $dimensiones[1];
  15.         $carpeta = "images/";
  16.         $src = $carpeta.$nombre;
  17.  
  18.  
  19.           //Caragamos imagenes al servidor
  20.           move_uploaded_file($ruta_provisional, $src);    
  21.  
  22.         $query="UPDATE alumnos SET img_a=$nombre[0] , img_b=$nombre[1] WHERE ClEmail='$email')";
  23.         $res = mysqli_query($cone, $query);
  24.      
  25.    
  26.     }
  27.    
  28.     }

obviamente explota el código.
he probado con

Código PHP:
Ver original
  1. $porciones = explode(" ", $nombre);
  2.      var_dump( $porciones[0]); // porción1
  3.      var_dump(   $porciones[1]); // porción2

No me sale
Quiero como separar el array y guárdalo en variables asi puedo manipular esas variable...
Gracias de antemano por su tiempo .!!!
saludos
  #2 (permalink)  
Antiguo 18/07/2021, 19:28
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Guardar dos imagenes desde un array

implode — Une elementos de un array en un string

https://www.php.net/manual/es/function.implode.php

explode — Divide un string en varios string

https://www.php.net/manual/es/function.explode.php

ahi hay ejemplos de como usarlos

saludos
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #3 (permalink)  
Antiguo 19/07/2021, 14:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Guardar dos imagenes desde un array

Tal y como sucede en tu publicación anterior, estás empleando mal el bucle.

Recorre el array de archivos con simplicidad:

Código PHP:
Ver original
  1. foreach ($_FILES as $file){
  2.     //...
  3. }

Una vez dentro del bucle, puedes tomar las propiedades de cada archivo verificando previamente que el archivo se haya subido exitosamente. Asimismo, puedes emplear un array y un contador para almacenar los nombres de los archivos a guardar, el cual te permitirá limitar el número de archivos a subir a dos:

Código PHP:
Ver original
  1. $names = [];
  2. $count = 0;
  3.  
  4. foreach ($_FILES as $file){
  5.     if ($file['error'] == UPLOAD_ERR_OK){
  6.         $name = $file['name'];
  7.         $temp = $file['tmp_name'];
  8.         $type = $file['type'];
  9.         $size = $file['size'];
  10.  
  11.         $names[$count] = $name;
  12.         $count++; //Se incrementa en uno cuando el archivo fue subido con éxito
  13.  
  14.         //Otras instrucciones...
  15.  
  16.         move_uploaded_file($temp, 'images/' . $name);
  17.  
  18.         if ($count == 2) break; //Se termina el bucle cuando se hayan subido dos archivos
  19.     }
  20. }

Y, finalmente, guardas los nombres en la base de datos una vez que se haya terminado el bucle:

Código PHP:
Ver original
  1. $query = "UPDATE alumnos SET img_a = '{$names[0]}', img_b = '{$names[1]}' WHERE ClEmail = '$email'";
  2. $res = mysqli_query($cone, $query);

Comentario: Te sugiero obtener la extensión real del archivo mediante las funciones del módulo Fileinfo.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 19/07/2021 a las 17:27 Razón: Comillas
  #4 (permalink)  
Antiguo 19/07/2021, 17:28
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 8 meses
Puntos: 7
Pregunta Respuesta: Guardar dos imagenes desde un array

Hola buenas noches, 1º quiero agradecerles a los dos, por las respuestas queme han dado, muchas gracias, enserio...

en el código del amigo Alexis88 me sale que las dos primeras variables o no están definidas y algo pasa..

Notice: Undefined offset: 0 in C:\xampp\htdocs\03_V.01_2021_ESTEEEE\userspublicar \CuaSaveD.php on line 29

Notice: Undefined offset: 1 in C:\xampp\htdocs\03_V.01_2021_ESTEEEE\userspublicar \CuaSaveD.php on line 29

en la linea 29 esta lo siguiente :

Código PHP:
Ver original
  1. $query = "UPDATE alumnos SET img_a = '{$names[0]}', img_b = {$names[1]}' WHERE ClEmail = '$email'";
  2. $res = mysqli_query($cone, $query);

pero supongo que es porque no tienen o agarran valor las primeras variables

Código PHP:
Ver original
  1. $names = [];
  2. $count = 0;
Ya que no sube los archivos... y eso de separar la extensión , si es verdad es lo que se debe hacer... pero de nuevo no se como hacerlo...

espero que me den 5 minutos mas de los que saben..
muchas gracias...
  #5 (permalink)  
Antiguo 19/07/2021, 19:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Guardar dos imagenes desde un array

Por favor, coloca todo el bloque de código crítico. Antes de hacer el guardado en la base de datos, verifica si $names tiene contenido.

Código PHP:
Ver original
  1. print_r($names);

Recuerda que el guardado en la base de datos se tiene que hacer por fuera del bucle.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 20/07/2021, 14:17
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 8 meses
Puntos: 7
Pregunta Respuesta: Guardar dos imagenes desde un array

Hola Alexis88, te pego el código, algo estoy haciendo mal,

el php quedo asi:

Código PHP:
Ver original
  1. include("../config.php");
  2. $cone=conectar();
  3. $email=$_SESSION['email'];//rebe
  4.  
  5.  
  6. $names = [];
  7. $count = 0;
  8.  
  9. foreach ($_FILES as $file){
  10.     if ($file['error'] == UPLOAD_ERR_OK){
  11.         $name = $file['name'];
  12.         $temp = $file['tmp_name'];
  13.         $type = $file['type'];
  14.         $size = $file['size'];
  15.  
  16.         $names[$count] = $name;
  17.         $count++; //Se incrementa en uno cuando el archivo fue subido con éxito
  18.  
  19.         //Otras instrucciones...
  20.  
  21.         move_uploaded_file($temp, 'images/' . $name);
  22.  
  23.         if ($count == 2) break; //Se termina el bucle cuando se hayan subido dos archivos
  24.      
  25.     }
  26. }
  27.  
  28.  
  29. $query = "UPDATE alumnos SET img_a = '{$names[0]}', img_b = {$names[1]}' WHERE ClEmail = '$email'"; // LINEA 31
  30. $res = mysqli_query($cone, $query); // LINEA  32
  31.  
  32.  
  33. ?>

si hago esto

Código PHP:
Ver original
  1. print_r($names);

me da el siguiente error:

Array ( )
Notice: Undefined offset: 0 in C:\xampp\htdocs\03_V.01_2021_ESTEEEE\userspublicar \CuaSaveD.php on line 31

Notice: Undefined offset: 1 in C:\xampp\htdocs\03_V.01_2021_ESTEEEE\userspublicar \CuaSaveD.php on line 31

mi formulario es así:
Código HTML:
Ver original
  1. <div class="mb-3 fondo">
  2.   <label for="exampleFormControlInput1" class="form-label"><b>Elija una Imagen (2)</b></label>
  3.   <input type="file" class="form-control" name="file[]" multiple  >
  4. </div>

No se que estoy fallando ....
Gracias por tu paciencia.
  #7 (permalink)  
Antiguo 20/07/2021, 14:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Guardar dos imagenes desde un array

Evidentemente el array no está siendo llenado, lo que indica que hay un problema en la subida de los archivos. En tal caso, imprime el array de los archivos para verificar si están llegando los archivos:

Código PHP:
Ver original
  1. print_r($_FILES);

También asegúrate de que el formulario tenga establecido este atributo:

Código HTML:
Ver original
  1. enctype="multipart/form-data"

Y en la consulta SQL agrega una comilla que está faltando en la segunda asignación (lo corregí en mi respuesta anterior):

Código PHP:
Ver original
  1. $query = "UPDATE alumnos SET img_a = '{$names[0]}', img_b = '{$names[1]}' WHERE ClEmail = '$email'";

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 20/07/2021 a las 14:58 Razón: Corrección
  #8 (permalink)  
Antiguo 20/07/2021, 15:24
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 8 meses
Puntos: 7
Pregunta Respuesta: Guardar dos imagenes desde un array

Hola.!!!

corregí el código ..

Código PHP:
Ver original
  1. $names = [];
  2. $count = 0;
  3. print_r($_FILES);
  4. foreach ($_FILES as $file){
  5.     if ($file['error'] == UPLOAD_ERR_OK){
  6.         $name = $file['name'];
  7.         $temp = $file['tmp_name'];
  8.         $type = $file['type'];
  9.         $size = $file['size'];
  10.  
  11.         $names[$count] = $name;
  12.         $count++; //Se incrementa en uno cuando el archivo fue subido con éxito
  13.  
  14.         //Otras instrucciones...
  15.  
  16.         move_uploaded_file($temp, 'images/' . $name);
  17.  
  18.         if ($count == 2) break; //Se termina el bucle cuando se hayan subido dos archivos
  19.      
  20.     }
  21. }
  22.  
  23.  
  24. $query = "UPDATE alumnos SET img_a = '{$names[0]}', img_b = '{$names[1]}' WHERE ClEmail = '$email'";//LINEA 31
  25. $res = mysqli_query($cone, $query);
  26.  
  27.  
  28. ?>

este s el error

Array ( [file] => Array ( [name] => Array ( [0] => 4.jpg [1] => 5.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => C:\xampp\tmp\phpAFA4.tmp [1] => C:\xampp\tmp\phpAFD4.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 2245406 [1] => 2463818 ) ) )
Notice: Undefined offset: 0 in C:\xampp\htdocs\03_V.01_2021_ESTEEEE\userspublicar \CuaSaveD.php on line 31

Notice: Undefined offset: 1 in C:\xampp\htdocs\03_V.01_2021_ESTEEEE\userspublicar \CuaSaveD.php on line 31


mi html:

Código HTML:
Ver original
  1. <form action="CuaSaveD.php" method="POST" id="frm-test" enctype="multipart/form-data">
  2. <div class="container fondo">
  3.  
  4.  
  5. <div class="mb-3 fondo">
  6.   <label for="exampleFormControlInput1" class="form-label"><b>Elija una Imagen (2)</b></label>
  7.   <input type="file" class="form-control" name="file[]" multiple  >
  8. </div>
  9. </form>

No se por donde buscar...


Saludos.!!!
alexis88. sos muy amable. y se agradece.
  #9 (permalink)  
Antiguo 20/07/2021, 21:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Guardar dos imagenes desde un array

Ya di con el error: el bucle que te propuse no es el adecuado para la estructura del array de archivos que se genera.

Lo correcto es que hagas algo similar a lo que inicialmente hiciste, añadiendo la verificación en cada iteración de la correcta subida del archivo:

Código PHP:
Ver original
  1. $names = [];
  2. $count = 0;
  3. $i = 0;
  4.  
  5. for ($i = 0, $files = $_FILES['file'], $l = count($files['name']); $i < $l; $i++){
  6.     if ($files['error'][$i] == UPLOAD_ERR_OK){
  7.         $name = $files['name'][$i];
  8.         $temp = $files['tmp_name'][$i];
  9.         $type = $files['type'][$i];
  10.         $size = $files['size'][$i];
  11.     }
  12.     else continue; //Si el archivo no se sube correctamente, se pasa a la siguiente iteración
  13.  
  14.     $names[$count] = $name;
  15.     $count++; //Se incrementa en uno cuando el archivo fue subido con éxito
  16.  
  17.     //Otras instrucciones...
  18.  
  19.     move_uploaded_file($temp, 'images/' . $name);
  20.  
  21.     if ($count == 2) break; //Se termina el bucle cuando se hayan subido dos archivos
  22. }
  23.  
  24. $query = "UPDATE alumnos SET img_a = '{$names[0]}', img_b = '{$names[1]}' WHERE ClEmail = '$email'";
  25. $res = mysqli_query($cone, $query);

La diferencia fundamental con lo que inicialmente hiciste radica en que intentaste acceder al array de los nombres de la manera inadecuada, además de que lo intentabas hacer dentro del bucle, cuando tiene que ser afuera de este. Le añadí una línea en la que se pasa a la siguiente iteración en el bucle en caso de no subirse correctamente el archivo.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 21/07/2021 a las 20:44 Razón: Línea extra
  #10 (permalink)  
Antiguo 21/07/2021, 11:15
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 8 meses
Puntos: 7
De acuerdo Respuesta: Guardar dos imagenes desde un array

Hola Alexis88..
Anduvo espectacular, te AGRADESCO MUCHO MUCHO.,..!!!..

Mil gracias.!!!

Etiquetas: imagenes, mysql
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:47.