Ajax (jQuery) PHP Script // move_uploaded_file-problem - PullRequest
0 голосов
/ 21 января 2019

Я работаю над функцией загрузки галереи с

  • jQuery Ajax
  • PHP

Весьфункция gallery содержит 3 части:

Форма как view_create-char.php

    <form id='gallery_upload' method='post' enctype='multipart/form-data'>
     <input type='file' name='file' id='file'>
     <input type='hidden' name='name' value='".$_GET['c']."' id='owner'>
     <input type='button' class='create_submit' value='Upload' 
     id='add_image_gallery'>
    </form>";

Ajax Script as main.js

$(document).ready(function(){

    $("#add_image_gallery").click(function(){

        var fd = new FormData();
        var files = $('#file')[0].files[0];
        var name = $('#owner').attr("value");
        fd.append('file',files);
        fd.append('name',name);


        $.ajax({
            url: 'includes/gallery_upload.php',
            type: 'post',
            data: fd,
            contentType: false,
            processData: false,
            success: function(response){
                if(response != 0){
                    alert('file  uploaded');


                }else{
                    alert('file not uploaded');
                }
            },
        });
    });
});

PHP-скрипт as gallery_upload.php

<?php
include 'dbh.inc.php';

        $owner = $_POST['name'];
        $file = $_FILES['file'];
        $fileName = $_FILES['file']['name'];
        $fileTmpName = $_FILES['file']['tmp_name'];
        $fileSize = $_FILES['file']['size'];
        $fileError = $_FILES['file']['error'];
        $fileType = $_FILES['file']['type'];

        $fileExt = explode('.', $fileName);
        $fileActualExt = strtolower(end($fileExt));
        $allowed = array('jpg', 'jpeg', 'png', 'gif');
        $fileNameNew = uniqid('', true).'.'.$fileActualExt;
        $fileDestination = 'uploads/'.$fileNameNew;
        move_uploaded_file($fileTmpName, $fileDestination);

        $sql = "INSERT INTO 
        characters_gallery (owner, image) VALUES ('$owner', 
        '$fileNameNew');";
        $result = mysqli_query($conn, $sql);

Цель состоит в том, чтобызагрузите изображение с помощью Ajax и вставьте два значения в файл characters_gallery-table.Сначала владелец таблицы, затем имя фактического изображения, созданного сценарием PHP. Это работает.

Но фактический файл не перемещается в указанную папку / загружается с помощью move_uploaded_file () .Он остается пустым, хотя таблица в моей базе данных заполнена двумя значениями $ owner и $ fileNamenew .Меня смущает то, что до того, как я использовал этот Ajax-скрипт, этот PHP-скрипт для перемещения файлов в папку загрузки работал нормально.Это не работает со сценарием, хотя.

Я благодарен за любую помощь

Редактировать --- Реакция на предупреждение, касающееся инъекций SQL:

Я не уверен, что я 'Я использую это редактирование, как я должен, но это дополнительная информация.Если я не прав, пожалуйста, удалите мою правку.

Я пытался добавить подготовленные операторы и задавался вопросом, исключил ли я какой-либо больший риск SQL-инъекций:

<?php
include_once 'characterfunctions.inc.php'; 
include 'dbh.inc.php';

        $owner = mysqli_real_escape_string($conn, $_POST['name']);
        $file = mysqli_real_escape_string($conn, $_FILES['file']);
        $fileName = $_FILES['file']['name'];
        $fileTmpName = $_FILES['file']['tmp_name'];
        $fileSize = $_FILES['file']['size'];
        $fileError = $_FILES['file']['error'];
        $fileType = $_FILES['file']['type'];

        $fileExt = explode('.', $fileName);
        $fileActualExt = strtolower(end($fileExt));
        $allowed = array('jpg', 'jpeg', 'png', 'gif');
        $fileNameNew = uniqid('', true).'.'.$fileActualExt;
        $fileDestination = '../uploads/'.$fileNameNew;
        move_uploaded_file($fileTmpName, $fileDestination);

        $sql = "INSERT INTO characters_gallery (owner, image) VALUES (?, ?);";
        $stmt = mysqli_stmt_init($conn);
        if (!mysqli_stmt_prepare($stmt, $sql)) {
            echo "SQL Error";
        } else {
            mysqli_stmt_bind_param($stmt, "ss", $owner, $fileNameNew);
            mysqli_stmt_execute($stmt);
        }
        $result = mysqli_query($conn, $sql);

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Попробуйте добавить ../ в $ fileDestination:

$fileDestination = '../uploads/'.$fileNameNew;

Похоже, вы перемещаете фотографии в включает / загружает , но в ваших заметках написано загрузка находится в / загружается .

0 голосов
/ 21 января 2019

Прежде всего, отследите результат move_uploaded_file и, если false, не выполняйте следующие шаги.

Что касается причины сбоя, это облако будет:

  • проблема с разрешениями - поэтому давайте проверим права доступа к каталогу uploads, который должен быть доступен для записи из PHP.
  • $_FILES['file'] не является допустимым файлом - так что проверьте с помощью is_uploaded_file($fileTmpName), а также проверьте переменную$_FILES['file']['error']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...