2016-11-09 18 views
10

Tôi đang sử dụng một kịch bản ảnh tải lên có thể được tìm thấy tại https://github.com/CreativeDream/php-uploaderChèn tên file cơ sở dữ liệu

Đây là 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> 

Đây là Jquery đó gửi dữ liệu đến 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; 
    }); 
}); 

Đây là tệp PHP đặt lại tên tệp (hình ảnh) và tải chúng lên thư mục tải lên.

<?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; 
?> 

Bây giờ vấn đề:

Bạn có thể thấy có một textarea và nộp đầu vào trong biểu mẫu. Tôi muốn chèn dữ liệu văn bản và tên của hình ảnh được tải lên cơ sở dữ liệu. Nhưng hình ảnh đang được đổi tên và tải lên bằng tập lệnh PHP được nêu ở trên. Và trạng thái được đăng bởi một tập lệnh php tùy chỉnh được viết bởi tôi trong post-status.php. Những gì tôi muốn là tôi muốn đổi tên tập tin được đổi tên thành trang post-status.php để tôi có thể chèn nó vào cơ sở dữ liệu. Nhưng vì đây là một kịch bản bên ngoài mà tôi đang sử dụng để uplaoding hình ảnh tôi không thể kết hợp nó với kịch bản của tôi. Xin hãy giúp tôi. Bạn có thể tải xuống tập lệnh từ liên kết đã cho ở trên.

+0

Tôi nghĩ mã của bạn chưa hoàn thành, bạn có thể xem xét một số vấn đề cần khắc phục trước khi khắc phục sự cố thực sự, trước tiên bạn cần phải thêm nhiều/dữ liệu biểu mẫu như được trả lời dưới đây, dòng này "if (media == '') "đây không phải là jQuery ... làm việc trên mã của bạn và làm cho nó tải lên các tập tin thành công, sau đó xem xét việc giải quyết các vấn đề tên. –

+0

Bạn đang nhận được kết quả gì? Câu hỏi về cách làm việc với tệp và văn bản đến sau khi bạn biết nội dung được đăng là gì? Bạn đã cố gắng gỡ lỗi chúng? – Rahi

+0

mọi thứ Bạn làm hoàn toàn sai. Bạn nên làm 1 yêu cầu với tải lên và gửi dữ liệu từ đầu vào. Sử dụng plugin "jquery form", nó kết thúc tốt đẹp Hình thức của bạn với các công cụ ajax mà không cần mã hóa bổ sung, chỉ cần tái phát triển phần serverside. – num8er

Trả lời

7

Trước hết có một số vấn đề với các hình thức trong mã HTML của bạn, như đã đề cập bởi một số người đã . Một trong những vấn đề là bạn cần sử dụng mã hóa multipart-form-data để có thể tải lên tệp. Nếu không, thì mảng $_FILES sẽ trống và không có gì được tải lên.
Một điều khác thuộc tính runat="server" trong thẻ biểu mẫu. Điều này hoàn toàn không cần thiết và chỉ được sử dụng trong ASP.net.
Thứ ba, và hầu hết là ctritical, là $_SERVER['PHP_SELF']vulnerable for XSS attacks!

Sau đó, cho câu hỏi của bạn. Nếu bạn đã kiểm tra mã nguồn của lớp bạn đang sử dụng, bạn sẽ thấy rằng hàm onComplete được gọi sau khi tệp được tải lên thành công. Với mảng $metas làm đối số thứ hai của nó. Mảng này chứa tên tệp mới, dưới chỉ mục name.
Hoặc bạn có thể sử dụng phương thức onSuccess để chèn tên tệp khi các tệp được tải lên.

4

Có lẽ bạn nên sử dụng "enctype = multipart/form-data" tài sản trong <form> thẻ

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

đọc câu hỏi đúng cách ... –

Các vấn đề liên quan