php - form - Codeigniter y HTML5: intentar subir varias imágenes a la vez
form_input php (3)
El loop que necesitas:
for($i=0; $i<count($_FILES[''name'']); $i++){
if ($_FILES[''error''][$i] == 0) {
//do your stuff here, each image is at $_FILES[''tmp_name''][$i]
}
}
Tenga en cuenta que no utiliza la clase de carga de CI, sino PHP simple, que normalmente me resulta más fácil de trabajar en lugar de la clase de CI.
Ver se parece a esto
<?=form_open_multipart(''upload/process'');?>
<input type="file" multiple="multiple" name="userfile[]" id="userfile" />
<?=form_submit(''upload'', ''Upload'');?>
<?=form_close();?>
Quiero que el usuario pueda subir varias imágenes a la vez. una vez cargado, quiero hacer una entrada de los detalles de la imagen en la base de datos, y finalmente mover la imagen a la carpeta de carga.
Tengo conocimiento básico de Codeigniter
ps: no quiero usar complementos de carga de uploadify o similar. tratando de mantenerlo tan liviano como sea posible
Actualice que este es el tipo de matriz que obtengo cuando pruebo var_dump ($ _ FILES [''userfile'']). qué tipo de ciclo debería usar para separar los datos de las imágenes respectivas.
array
''name'' =>
array
0 => string ''01.jpg'' (length=6)
1 => string ''1 (26).jpg'' (length=10)
''type'' =>
array
0 => string ''image/jpeg'' (length=10)
1 => string ''image/jpeg'' (length=10)
''tmp_name'' =>
array
0 => string ''C:/wamp/tmp/php2AC2.tmp'' (length=23)
1 => string ''C:/wamp/tmp/php2AD3.tmp'' (length=23)
''error'' =>
array
0 => int 0
1 => int 0
''size'' =>
array
0 => int 409424
1 => int 260343
Me encontré con este problema también. Los datos $_FILES
se envían como una estructura difentada (debido al atributo multiple=""
) por lo que codeigniter no puede manejarlo. Anteponga esto antes del proceso de carga:
$arr_files = @$_FILES[''userfile''];
$_FILES = array();
foreach(array_keys($arr_files[''name'']) as $h)
$_FILES["file_{$h}"] = array( ''name'' => $arr_files[''name''][$h],
''type'' => $arr_files[''type''][$h],
''tmp_name'' => $arr_files[''tmp_name''][$h],
''error'' => $arr_files[''error''][$h],
''size'' => $arr_files[''size''][$h]);
Luego, en la función de bucle, usa esto:
$this->load->library(''upload'');
$arr_config = array( ''allowed_types'' => ''gif|jpg|png'',
''upload_path'' => ''url_path/'');
foreach(array_keys($_FILES) as $h) {
// Initiate config on upload library etc.
$this->upload->initialize($arr_config);
if ($this->upload->do_upload($h)) {
$arr_file_data = $this->upload->data();
}
}
Explicación:
Simplemente cambio la estructura de $_FILES
a la estructura común que se envía en un <input type="file" />
predeterminado y ejecuta un ciclo, obteniendo todos sus nombres de clave.
Consulte esta clase para cargar archivos múltiples https://github.com/stvnthomas/CodeIgniter-Multi-Upload
Esto hizo el truco para mí.