0

есть файл js с ajax запросом, этот запрос должен отправить изображение в php файл, который сохранит это фото в папку media, а название фото сохранит в БД.

php файл changeData.php

function savePhoto($photo) {
    $fileSuccess = 'No';
    $fileName = $photo['name'];
    $fileTmp = $photo['tmp_name'];
$uploadFolder = 'media/';

$moveFile = move_uploaded_file($fileTmp, $uploadFolder . $fileName);

if ($moveFile) {
    $fileSuccess = 'photo uploaded successful';
}

$user = R::findOne('users', 'id = ?', array($_SESSION['logged user']->id));
if ($user) {
    $user->photo = $fileName;
    $_SESSION['logged user'] = $user;
    R::store($user);
    echo 'success';
}

} $userPhoto = $_FILES['photo'];

if (isset($userPhoto)) { savePhoto(($userPhoto)); }

function renderImg(file) {
  let reader = new FileReader();
  reader.onload = function(e) {
    photoPreviewNode.innerHTML = `<img src="${e.target.result}" alt="photo">`
  }
  reader.onerror = function(e) {
    alert('error')
  }
  reader.readAsDataURL(file.files[0])
}

$('.addPhotoForm').on('submit', function(e) { e.preventDefault() let fd = new FormData(); let photo = $('.photoInput')[0].files; fd.append('photo', photo[0])

$.ajax({ url: 'changeData.php', method: 'POST', data: fd, processData: false, contentType: false, success: renderImg(inputPhoto) }).done(function() { console.log(1) alert(1) }) })

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="row">
  <div class="column">Photo</div>

  <form method="POST" enctype="multipart/form-data" class="addPhotoForm column">
    <div class="column">
      <label for="photoInput">Add photo</label>
      <button type="submit" class="button formPhotoFormButton">Change</button>
    </div>
    <div class="column photoPreview">
      <input name="photo" type="file" class="photoInput" id="photoInput" placeholder="add photo" style="display:none">
    </div>

  </form>
</div>
  • Вопрос в чём заключается? – Алексей Шиманский Sep 01 '22 at 08:32
  • ты запрос отправляешь на файл....... но метод-то никак не отрабатывает – Алексей Шиманский Sep 01 '22 at 08:33
  • нужно чтобы php файл получил фото и отправил его в бд, а сам файл добавил в папку media –  Sep 01 '22 at 08:34
  • нужно - ок......... а проблема-то в чём? – Алексей Шиманский Sep 01 '22 at 08:37
  • Опять же. ты запрос отправляешь на файл....... но метод-то никак не отрабатывает – Алексей Шиманский Sep 01 '22 at 08:37
  • массив $_FILES пустой –  Sep 01 '22 at 08:38
  • Где в представленном коде массив FILES? – Алексей Шиманский Sep 01 '22 at 08:50
  • извините, сейчас вставлю этот кусок в вопрос –  Sep 01 '22 at 08:51
  • Воспользуйся отладкой.....точнее так..... прочитай все ответы в тех дубликатах, что висят выше. Обязательно! Прямо сегодня и по многу раз......... в целом... если бы ты это уже читал, то ты бы увидел ошибки в консоли....... а всё потому, что писать так success: renderImg(inputPhoto) - некорректно........ надо вставлять ссылку на функцию success: renderImg или писать анонимную фунцию........ в целом тема отладки и нахождения ошибок - очень важна для разработчиков, так что срочно изучать – Алексей Шиманский Sep 01 '22 at 09:01
  • спасибо большое! обязательно прочту и изучу, но если удалить строку success: renderImg(inputPhoto), фото тоже не отправляется в файл php –  Sep 01 '22 at 09:09
  • не удалить а заменить........ вполне отправляется....... либо у тебя путь неверный до обработчика – Алексей Шиманский Sep 01 '22 at 09:12
  • путь верный, 100% –  Sep 01 '22 at 09:37
  • смотри консоль, network отправки данных и отладку...... я воспроизвёл данный код.... если заменить код, как я привёл выше - всё отправляется и в FILES есть данные ¯\(ツ)/¯ ..... возможно ещё а) в кэше данные остались - надо разрабатывать без кэширования....... и ты мог забыть сохранить файл после внесения изменений. – Алексей Шиманский Sep 01 '22 at 09:40
  • кэш браузера очистил, файл сохраняю всегда, в вкладке network есть отправка, но когда я в самом файле changeData.php делаю var_dump($_FILES), то на странице выведено NULL, не знаю что не так( –  Sep 01 '22 at 09:58

0 Answers0