0

У меня сайт в котором есть блок новостей и каталог товаров. Так же есть админ панель, через который должен загружать информация. И не понимаю, где именно пробел что фотография не идет в серверную часть.

    <?php
    include "include/db.php";
    include "partials/header.php";
?>

<div class="content-body"> <div class="container"> <div class="row"> <div class="col-xl-9 col-xxl-10"> <div class="card"> <div class="card-body"> <div class="row align-items-center"> <nav> <div class="nav nav-tabs" id="nav-tab" role="tablist"> <a class="nav-link" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">На казахском</a> <a class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">На русском</a> <a class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">На английском</a> </div> </nav> <div class="tab-content" id="nav-tabContent"> <div class="tab-pane fade" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab"> <form id="addnews" class="addnews-form" method="POST" enctype="multipart/form-data"> <div class="form-group"> <input type="text" id="news_title-kaz" name="news_title-kaz" placeholder="Заголовок на казахском" class="form-control"> <textarea type="text" id="news_text-kaz" name="news_text-kaz" style="height: 300px;" placeholder="Текст на казахском" class="form-control"></textarea> </div> </div> <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab"> <div class="form-group"> <input type="text" id="news_title-rus" name="news_title-rus" placeholder="Заголовок на русском" class="form-control"> <textarea type="text" id="news_text-rus" name="news_text-rus" style="height: 300px;" placeholder="Текст на русском" class="form-control"></textarea> </div> </div> <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab"> <div class="form-group"> <input type="text" id="news_title-eng" name="news_title-eng" placeholder="Заголовок на английском" class="form-control"> <textarea rows="25" id="news_text-eng" name="news_text-eng" style="height: 300px;" placeholder="Текст на английском" class="form-control"></textarea> </div> <div class="form_control"> <label for="">Выбрать картинку</label> <input type="file" name="news_thumbnail" id="news_thumbnail"> </div> <button type="submit" name="submit" class="btn btn-primary">Добавить</button> </form> </div> <div id="responseMessage"></div>
</div> </div> </div> </div> </div> </div> </div> </div>

<?php include 'partials/footer.php'; ?>

<script> var triggerTabList = [].slice.call(document.querySelectorAll('.nav-link')); triggerTabList.forEach(function (triggerEl) { var tabTrigger = new bootstrap.Tab(triggerEl);

    triggerEl.addEventListener('click', function (event) {
        event.preventDefault();
        tabTrigger.show();
    });
});

$('.addnews-form').submit(function(event) {
    event.preventDefault();
    var formData = $(this).serialize();
    $.ajax({
        type: 'POST',
        url: 'add_news_logic.php',
        data: formData,
        success: function(response) {
            $('#responseMessage').html(response);
        }
    });
});

</script>

А здесь у меня серверная часть кода

    <?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    include "include/db.php";
$news_title_kaz = $_POST['news_title-kaz'];
$news_text_kaz = $_POST['news_text-kaz'];
$news_title_rus = $_POST['news_title-rus'];
$news_text_rus = $_POST['news_text-rus'];
$news_title_eng = $_POST['news_title-eng'];
$news_text_eng = $_POST['news_text-eng'];

$target_dir = &quot;images/&quot;;
$target_file = $target_dir . basename($_FILES[&quot;news_thumbnail&quot;][&quot;name&quot;]);
$uploadOk = 1;

// Debug output
echo &quot;Uploaded file: &quot; . $_FILES[&quot;news_thumbnail&quot;][&quot;name&quot;] . &quot;&lt;br&gt;&quot;;
echo &quot;File type: &quot; . $_FILES[&quot;news_thumbnail&quot;][&quot;type&quot;] . &quot;&lt;br&gt;&quot;;
echo &quot;File size: &quot; . $_FILES[&quot;news_thumbnail&quot;][&quot;size&quot;] . &quot;&lt;br&gt;&quot;;
echo &quot;Temporary file path: &quot; . $_FILES[&quot;news_thumbnail&quot;][&quot;tmp_name&quot;] . &quot;&lt;br&gt;&quot;;

$allowed_mime_types = array(&quot;image/jpeg&quot;, &quot;image/png&quot;, &quot;image/gif&quot;);

if (!in_array($_FILES[&quot;news_thumbnail&quot;][&quot;type&quot;], $allowed_mime_types)) {
    echo &quot;Sorry, only JPG, JPEG, PNG &amp; GIF files are allowed.&quot;;
    $uploadOk = 0;
}

if ($uploadOk) {
    if (move_uploaded_file($_FILES[&quot;news_thumbnail&quot;][&quot;tmp_name&quot;], $target_file)) {
        $stmt = $connection-&gt;prepare(&quot;INSERT INTO news (news_title_kaz, news_text_kaz, news_title_rus, news_text_rus, news_title_eng, news_text_eng, news_image) VALUES (?, ?, ?, ?, ?, ?, ?)&quot;);
        $stmt-&gt;bind_param(&quot;sssssss&quot;, $news_title_kaz, $news_text_kaz, $news_title_rus, $news_text_rus, $news_title_eng, $news_text_eng, basename($target_file));

        if ($stmt-&gt;execute()) {
            echo &quot;News added successfully!&quot;;
        } else {
            echo &quot;Error executing database query: &quot; . $stmt-&gt;error;
        }

        $stmt-&gt;close();
    } else {
        echo &quot;Error uploading file: &quot; . $_FILES[&quot;news_thumbnail&quot;][&quot;error&quot;];
    }

$connection-&gt;close();
}

} ?>

  • Покажите INSERT, полученный после подстановки параметров. Покажите полученное предупреждение / сообщение об ошибке. – Akina Aug 15 '23 at 05:26
  • Uploaded file: File type: File size: Temporary file path: Sorry, only JPG, JPEG, PNG & GIF files are allowed. – Yelkhan Amangeldy Aug 15 '23 at 05:36
  • $target_file должен содержать полный путь до файла, а не относительный. – Виктор Карев Aug 15 '23 at 05:41
  • only JPG, JPEG, PNG & GIF files are allowed - а что, собственно, непонятно в этом сообщении? – Akina Aug 15 '23 at 05:51
  • Так я выбираю JPG, JPEG, PNG & GIF файлы, но такое ощущение, будто бы он вообще не видит что я добавляю файл, вот почему так я думаю: Notice: Undefined index: news_thumbnail in C:\OSPanel\domains\Kazdreamsts2\admin\add_news_logic.php on line 15

    Notice: Undefined index: news_thumbnail in C:\OSPanel\domains\Kazdreamsts2\admin\add_news_logic.php on line 19 Uploaded file:

    Notice: Undefined index: news_thumbnail in C:\OSPanel\domains\Kazdreamsts2\admin\add_news_logic.php on line 20 File type:

    – Yelkhan Amangeldy Aug 15 '23 at 05:52
  • Так же пытался проверить загрузку файла через var_dump($_FILES) вывод такой: array(0) { } – Yelkhan Amangeldy Aug 15 '23 at 06:08
  • Попробуйте добавить contentType: false, processData: false, перед success: function(response) { ... – TemirStack Aug 15 '23 at 06:35

1 Answers1

0

Добавьте в ajax строчки

processData: false,
contentType: false,
  • Не помогло, появились теперь другие ошибки: Notice: Undefined index: news_title-kaz in C:\OSPanel\domains\Kazdreamsts2\admin\add_news_logic.php on line 7 – Yelkhan Amangeldy Aug 15 '23 at 06:44
  • 1
    Откройте отладку https://ru.stackoverflow.com/a/701146/191482 и посмотрите внимательно что у вас в итоге в $_POST .. – Алексей Шиманский Aug 15 '23 at 07:02