Всем привет!
Есть проблемка, над которой бьюсь уже сутки. Не пойму, что не так, а может просто глаз замылился )))
Есть простенькая форма:
<form id="upload-image" enctype="multipart/form-data">
<div class="image-preview">
<img class="logo_class" id="preview" src="../images/<?php echo $globals_data[1]['logo_file']; ?>" alt="Logo">
</div>
<input id="logo_file" name="logo_file" type="hidden" value="<?php echo $globals_data[1]['logo_file']; ?>" >
<input type="file" name="image" id="image">
<input class="form-group" name="site_name" value="<?php echo $globals_data[1]['site_name']; ?>" >
<input class="form-group" name="company_name" value="<?php echo $globals_data[1]['company_name']; ?>" >
<input class="form-group" name="description" value="<?php echo $globals_data[1]['description']; ?>" >
<input class="form-group" name="phone" value="<?php echo $globals_data[1]['phone']; ?>" >
<input class="form-group" name="email" value="<?php echo $globals_data[1]['email']; ?>" >
<input class="block-button" type="submit" name="gform_btn" value="Обновить данные сайта">
<div id="result"></div>
</form>
в ней поле для загрузки логотипа и разные текстовые поля.
Для предварительной загрузки картинки и отправки формы используется javascript:
$(document).ready(function () {
function readImage (input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#preview').attr('src', e.target.result);
$('#logo_file').val(input.files[0].name);
}
reader.readAsDataURL(input.files[0]);
}
}
function printMessage(destination, msg) {
$(destination).removeClass();
if (msg == 'success') {
$(destination).addClass('result_class_success').text('Логотип успешно обновлен');
}
if (msg == 'error') {
$(destination).addClass('result_class_error').text('Произошла ошибка');
}
}
$('#image').change(function(){
readImage(this);
});
$('#upload-image').on('submit',(function(e) {
e.preventDefault();
var formData = new FormData(this);
//for (var [key, value] of formData.entries()) {
// console.log(key, value);
//}
$.ajax({
type:'POST', // Тип запроса
url: 'handler.php', // Скрипт обработчика
data: formData, // Данные которые мы передаем
cache:false, // В запросах POST отключено по умолчанию, но перестрахуемся
contentType: false, // Тип кодирования данных мы задали в форме, это отключим
processData: false, // Отключаем, так как передаем файл
success:function(data){
printMessage('#result', data);
},
error:function(data){
console.log(data);
}
});
}));
И вот, скорее всего, главное: php-обработчик формы:
<code lang="php">
<?php
global $gform_data;
if(isset($_FILES) && isset($_FILES['image'])) {
$image = $_FILES['image'];
if ($image['size'] > 200000) {die('error');}
$imageFormat = explode('.', $image['name']);
$imageFormat = $imageFormat[1];
$imageFullName = '../images/' . $image['name'];
$imageType = $image['type'];
if ($imageType == 'image/jpeg' || $imageType == 'image/jpg' || $imageType == 'image/png' || $imageType == 'image/gif') {
if (move_uploaded_file($image['tmp_name'],$imageFullName)) { echo 'success'; } else { echo 'error'; }
}
}
update_globals ();
?>
До этого места все хорошо: картинка грузится и перемещается в указанную директорию. В переменную formData в js правильно записываются все поля формы (проверено - посмотрите закомметированный код в <code lang="java">
$('#upload-image')</code>. Но вот в базу данных эти значения не записываются функцией update_globals ():
<code lang="php">
global $bd_link;
db_connect();
$globals_data['logo_file'] = $_POST['logo_file'];
$globals_data['site_name'] = $_POST['site_name'];
$globals_data['company_name'] = $_POST['company_name'];
$globals_data['description'] = $_POST['description'];
$globals_data['phone'] = $_POST['phone'];
$globals_data['email'] = $_POST['email'];
$globals_query = "UPDATE globals_data SET
logo_file = '" . $globals_data['logo_file'] . "',
site_name = '" . $globals_data['site_name'] . "',
company_name = '" . $globals_data['company_name'] . "',
description = '" . $globals_data['description'] . "',
phone = '" . $globals_data['phone'] . "',
email = '" . $globals_data['email'] . "'";
$globals_result = $bd_link->query($globals_query);
}
</code>
Уважаемые эксперты! Пожалуйста, не комментируйте качество кода - я его еще не чистил, и не предлагайте принципиально других решений - у меня нет времени их тестировать и внедрять. Все части представленного кода по отдельности отлично работают, это проверено в других проектах. Мне непонятно, почему они не работают здесь вместе?