Подтвердить что ты не робот

Вставка имени файла в базу данных

Я использую загрузку фотографий script, которую можно найти на https://github.com/CreativeDream/php-uploader

Это HTML:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="newstatus" runat="server">
      <textarea name="status" class="textarea newstatuscontent" placeholder="What are you thinking?"></textarea>
      <div class="media"><input type="file" name="files[]" id="filer_input2" multiple="multiple"></div>
      <input type="submit" name="post" value="Post" class="post-btn" id="submit" />
</form>

Это JQuery, который отправляет данные в post-status.php:

//Get Image Value and Assign it to class mediafile
$('#filer_input2').change(function(){
    var files = $(this)[0].files;
    var output = "";
    for(var i = 0; i < files.length; i++){
        console.log(files[i].name);
        output += files[i].name+";";
    }
    var media = $(".mediafile").val(output);
});

// STATUS UPDATE
$(function() {
    $("#submit").click(function() {
        var textcontent = $(".newstatuscontent").val();
        if(media == ''){
            if(textcontent == ''){
                $('.cap_status').html("Status cannot be empty. Please write something.").addClass('cap_status_error').fadeIn(500).delay(3000).fadeOut(500);
            }
        }else{
            $.ajax({
                type: "POST",
                url: "post-status.php",
                data: {content:textcontent},
                cache: true,
                success: function(html){
                    $("#shownewstatus").after(html);
                    $(".newstatuscontent").val('');
                }  
            });
        }
        return false;
    });
});

Это файл PHP, который переименовывает файлы (изображения) и загружает их в папку uploads.

<?php
    include('class.uploader.php');

    $uploader = new Uploader();
    $data = $uploader->upload($_FILES['files'], array(
        'limit' => 10, //Maximum Limit of files. {null, Number}
        'maxSize' => 10, //Maximum Size of files {null, Number(in MB's)}
        'extensions' => null, //Whitelist for file extension. {null, Array(ex: array('jpg', 'png'))}
        'required' => false, //Minimum one file is required for upload {Boolean}
        'uploadDir' => '../uploads/', //Upload directory {String}
        'title' =>  array('{{random}}{{.extension}}', 32), //New file name {null, String, Array} *please read documentation in README.md
        'removeFiles' => true, //Enable file exclusion {Boolean(extra for jQuery.filer), String($_POST field name containing json data with file names)}
        'replace' => false, //Replace the file if it already exists  {Boolean}
        'perms' => null, //Uploaded file permisions {null, Number}
        'onCheck' => null, //A callback function name to be called by checking a file for errors (must return an array) | ($file) | Callback
        'onError' => null, //A callback function name to be called if an error occured (must return an array) | ($errors, $file) | Callback
        'onSuccess' => null, //A callback function name to be called if all files were successfully uploaded | ($files, $metas) | Callback
        'onUpload' => null, //A callback function name to be called if all files were successfully uploaded (must return an array) | ($file) | Callback
        'onComplete' => null, //A callback function name to be called when upload is complete | ($file) | Callback
        'onRemove' => null //A callback function name to be called by removing files (must return an array) | ($removed_files) | Callback
    ));

    if($data['isComplete']){
        $files = $data['data'];

        echo json_encode($files['metas'][0]['name']);
    }

    if($data['hasErrors']){
        $errors = $data['errors'];
        echo json_encode($errors);
    }

    exit;
?>

Теперь проблема:

Вы можете видеть, что в форме есть вход textarea и файл. Я хочу вставить текстовые данные и имена изображений, загруженных в базу данных. Но изображение переименовывается и загружается с помощью PHP скрипт, приведенного выше. И статус публикуется пользовательским PHP скрипт, написанным мной в post-status.php. Я хочу, чтобы я хотел, чтобы имя переименованного файла было отправлено на страницу post-status.php, чтобы я мог вставить его в базу данных. Но так как это внешний script, который я использую для uplaoding фото, я не могу совместить его с моим script. Пожалуйста, помогите мне, ребята. Вы можете загрузить script из приведенной выше ссылки.

4b9b3361

Ответ 1

Прежде всего, есть некоторые проблемы с формой в вашем HTML-коде, как уже упоминалось некоторыми людьми. Одна из проблем заключается в том, что вам нужно использовать multipart-form-data enctype, чтобы иметь возможность загружать файл. Если нет, то массив $_FILES будет пустым и ничего не будет загружен.
Другое свойство атрибут runat="server" в теге формы. Это совершенно не нужно и используется только в ASP.net.
Третий и самый cpritical, что $_SERVER['PHP_SELF'] уязвим для атак XSS!

Тогда, на ваш вопрос. Если вы проверили исходный код используемого вами класса, вы увидите, что функция onComplete вызывается после того, как файл был загружен успешно. С массивом $metas в качестве второго аргумента. Этот массив содержит новое имя файла под индексом name.
Или вы можете использовать метод onSuccess, чтобы вставить имена файлов при загрузке файлов.

Ответ 2

Возможно, вы должны использовать свойства "enctype = multipart/form-data" в теге <form>

<form method="post" enctype= multipart/form-data action="<?php echo $_SERVER['PHP_SELF']; ?>" id="newstatus" runat="server">