#php #html #ajax #form-data
#php #HTML #ajax #форма-данные
Вопрос:
Помогите, попробуйте загрузить изображение из формы с помощью js, используя Ajax, FormData
МОДАЛЬНАЯ ФОРМА, ФОРМА, ИСПОЛЬЗУЕМАЯ ДЛЯ СБОРА ИНФОРМАЦИИ И ИЗОБРАЖЕНИЯ
<div id="modal-editar" style="display: none">
<form id="pais-editar" >
<div class="Listar-table">
<div class="Listar-table-dato">
<span class="">Nombre Empresa</span>
</div>
<div class="Listar-table-dato">
<span class="Forms-table">
<input type="text" name="conf[pais]" id="pais-ed" required="">
</span>
</div>
</div>
<div class="Listar-table">
<div class="Listar-table-dato">
<span class="">MONEDA (Abreviatura)</span>
</div>
<div class="Listar-table-dato">
<span class="Forms-table">
<input type="text" name="conf[moneda]" id="moneda-ed" required="">
</span>
</div>
</div>
<div class="Listar-table">
<div class="Listar-table-dato">
<span class="">Bandera</span>
</div>
<div class="Listar-table-dato">
<span class="Forms-table">
<input type="file" name="bandera" accept="image/x-png,image/gif,image/jpeg" />
</span>
</div>
</div>
<div id="mensaje-editar">
</div>
<div class="Contendedor-filtro-der Contener-btn" style="text-align: center;">
<input type="submit" class="Btn-naranja-auto" name="" value="Guardar Pais">
</div>
</form>
</div>
ФУНКЦИЯ JS, ЭТО БЕРЕТ ИНФОРМАЦИЮ ИЗ ФОРМЫ И ОТПРАВЛЯЕТ ЕЕ С ПОМОЩЬЮ AJAX
$('body').on('submit', '#pais-editar', function(e) {
e.preventDefault();
$('#modal-editar').iziModal('startLoading');
var data = new FormData();
$.each($('#bandera'), function(i, obj) {
$.each(obj.files, function(j, file) {
data.append('bandera', file);
});
});
otradata = $('#pais-editar').serializeArray();
$.each(otradata, function(key, input) {
data.append(input.name, input.value);
});
data.append('conf[id]', pais_id);
data.append('conf[opc]', 'pais-editar');
$.ajax({
url: 'libs/ac_configuracion',
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
dataType: 'json',
success: function(data) {
$('#modal-editar').iziModal('stopLoading');
if (data.status == true) {
$('#modal-editar').iziModal('resetContent');
iziToast.success({
title: 'Correcto',
message: data.msg,
position: 'center',
overlay: true,
displayMode: 1,
target: '#mensaje-editar',
pauseOnHover: false
});
lista_paises(1);
} else {
iziToast.error({
title: 'Error',
message: data.msg,
position: 'center',
overlay: true,
displayMode: 1,
target: '#mensaje-editar',
pauseOnHover: false
});
}
}
});
});
и, наконец, это мой php-код, который получает данные, загружает изображение и редактирует информацию
$codigo = explode('-', $data['id']);
@$nombre_adjunto = $_FILES['bandera']['name'];
@$tmp_adjunto = $_FILES['bandera']['tmp_name'];
$folder_gastos = '../banderas';
$trozo1=explode(".", $nombre_adjunto);
$nombre_archivo= 'bandera_'.($data['pais']).'.'.end($trozo1);
@$target_path = $folder_gastos.'/'.$nombre_archivo; //Indicamos la ruta de destino, así como el nombre del archivo
move_uploaded_file($tmp_adjunto, $target_path);
$dats = ['nombre_pa' => $data['pais'], 'moneda_pa' => $data['moneda'] , 'bandera' => $nombre_archivo];
$nuevo = $db
->where('Id_pa', $codigo[1])
->update('paises', $dats);
if ($nuevo) {
$msg['status'] = true;
$msg['msg'] = 'País Editado';
} else {
$msg['status'] = false;
$msg['msg'] = 'No se ha podido editar el país';
}
echo json_encode($msg);
предполагается, что это работает, текстовая информация поступает, но изображение не
Комментарии:
1. Что вам
var_dump($_FILES);
дает? Кроме того, при отладке кода удалите все@
перед вашими заявлениями (например@$nombre_adjunto = $_FILES['bandera']['name'];
), поскольку они подавляют сообщения об ошибках, что затрудняет отладку. Ошибки должны обрабатываться, а не просто подавляться. Проверьте, установлены ли они, используяisset()
или аналогичные вместо этого.2. Я также не вижу смысла перебирать
$('#bandera')
и файлы, когда есть только один элемент с этим идентификатором, и он содержит только один файл.