PHP - Limitar el numero de archivos de un input type FILE

 
Vista:
Imágen de perfil de Eduardo
Val: 84
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Limitar el numero de archivos de un input type FILE

Publicado por Eduardo (28 intervenciones) el 04/06/2021 23:47:20
Buenas tardes.

Espero puedan ayudarme con lo siguiente; necesito subir 4 imágenes a mi servidor y renombrarlas de acuerdo al id del producto, hasta aquí todo bien, sie el usuario sube 4 imágenes todo sale bien pero si el usuario sube 5 o mas imágenes marca el siguiente error.

" Notice: Undefined offset: 4 in C:\wamp\www\smr\cp\includes_cp\registro_de_productos.php on line 62"

Mi código es el siguiente:

HTML

1
2
3
4
5
6
7
<div class="col-sm">
    <div class="file-field">
        <a class="btn-lg green lighten-1 mt-0">
            <i class="far fa-images" aria-hidden="true"></i>
                <input type="file" multiple="" id="imagenes[]" name="imagenes[]" required accept="image/jpg, image/jpeg, image/png">
        </a>
    </div>

PHP

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
foreach($_FILES["imagenes"]['tmp_name'] as $key => $tmp_name)
{
    //Condición si existe el fichero
    if($_FILES["imagenes"]["name"][$key]) {
 
        // Nombres de archivos de temporales
        $base = array($_FILES['imagenes']['name'][$key]);
 
        $reemplazos = array(3 => $id_producto.'-01.webp', 2 => $id_producto.'-02.webp',1 =>
         $id_producto.'-03.webp',0 => $id_producto.'-04.webp');
 
        $cesta = array_replace($base, $reemplazos);
 
        $archivonombre = $cesta[$key];
 
        $fuente = $_FILES["imagenes"]["tmp_name"][$key];
 
  $carpeta = '../imagenes_cp/productos/'.$id_producto.'/'; //Declaramos el nombre de la carpeta que guardara los archivos
 
        if(!file_exists($carpeta)){
            mkdir($carpeta, 0777) or die("Hubo un error al crear el directorio de almacenamiento");
        }
 
        $dir=opendir($carpeta);
        $destino = $carpeta.'/'.$archivonombre; //indicamos la ruta de destino de los archivos
 
 
        if(move_uploaded_file($fuente, $destino)) {
            echo "Los archivos $archivonombre se han cargado de forma correcta.<br>";
            } else {
            echo "Se ha producido un error, por favor revise los archivos e intentelo de nuevo.<br>";
        }
        closedir($dir); //Cerramos la conexion con la carpeta destino
    }
}
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
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Limitar el numero de archivos de un input type FILE

Publicado por joel (1269 intervenciones) el 05/06/2021 10:29:10
Hola Eduardo, cual es la linea 62 del archivo php?

Has probado con 5 imágenes de un tamaño inferior? lo digo porque no vaya a ser que sobrepases el limite de lo que puedes subir.
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 Eduardo
Val: 84
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Limitar el numero de archivos de un input type FILE

Publicado por Eduardo (28 intervenciones) el 07/06/2021 14:30:06
Buenos días.

La linea 62 es esta:

1
$archivonombre = $cesta[$key];

y si ya probé con imágenes inferiores y de distintos formatos. ¿Cómo puedo hacer para que aunque se suban mas de 4 imágenes solo se suban las primeras 4 y el resto ignorarlas?
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: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Limitar el numero de archivos de un input type FILE

Publicado por Jefferson (203 intervenciones) el 07/06/2021 16:40:07
Hola Eduardo

Pues nada cuentalas

1
$cuantas=count($_FILES['imagenes']['name']);

luego haces un bucle y condicionas
1
2
3
4
5
6
7
for ($i=0; $i <= $cuantas; $i++) {
 if($i<4){
   ##code...
 }else{
    ##code...
 }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 84
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Limitar el numero de archivos de un input type FILE

Publicado por Eduardo (28 intervenciones) el 07/06/2021 19:56:56
Muchas gracias por tu ayuda el for me funciono muy bien, aunque lo resolví de esta manera, así sin importar cuantos archivos suba el usuario solo se tomaran las primeras cuatro posiciones del array.

1
2
$temp_arch = $_FILES["archivos"]["tmp_name"];
 $tmp_archivos = array_slice($temp_arch, 0, 4);
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