2016-04-13 3 views
0

Я пытаюсь загрузить файл изображения.Загрузка файла в PHP, ajax показывает ошибку

Это мой Html

<form class="form-horizontal" role="form" enctype="multipart/form-data"> 
    <div class="form-group"> 
     <label for="a" class="control-label col-sm-2">A:</label> 
     <input type="text" class="form-control col-sm-10" id="a"> 
    </div> 
    <div class="form-group"> 
     <label for="b" class="control-label col-sm-2">B:</label> 
     <input type="text" class="form-control col-sm-10" id="b"> 
    </div> 
    <div class="form-group"> 
     <label for="c" class="control-label col-sm-2">C:</label> 
     <input type="text" class="form-control col-sm-10" id="c"> 
    </div> 
    <div class="form-group"> 
     <label for="d" class="control-label col-sm-2">D:</label> 
     <input type="text" class="form-control col-sm-10" id="d"> 
    </div> 
    <div class="form-group"> 
     <label for="fupload" class="control-label col-sm-2">Upload image:</label> 
     <input type="file" class="form-control col-sm-10" id="fupload"> 
    </div> 
    <button type="button" class="btn-lg btn-primary" style="margin-left:200px" id="new_save" onclick='save_all();'>Save</button> 
</form> 

Мой Javascript код

var a= _("a").value; //the _ function returns document.getElementById(x) 
var b = _("b").value; 
var c = _("c").value; 
var d = _("d").value; 

var file_data = $("#fupload").prop("files")[0]; 
var fileup = new FormData();     
fileup.append("file", file_data) 

var ajax = ajaxObj("POST", "./phps/saveall.php"); 
ajax.onreadystatechange = function() { 
     alert(ajax.responseText); 
    } 
ajax.send("a="+a+"&b="+b+"&c="+c+"&d="+d+"&fileup="+fileup); 

Наконец мой PHP

$a = preg_replace('#[^a-z0-9()., ]#i', '', $_POST['a']); 
    $b = preg_replace('#[^a-z0-9()., ]#i', '', $_POST['b']); 
    $c= htmlentities($_POST['c']); 
    $c= mysqli_real_escape_string($db_conx, $c); 
    $d = htmlentities($_POST['d']); 
    $d = mysqli_real_escape_string($db_conx, $d); 
    $fup = $_POST['fileup']; 
    //processing a-d 
    //this is where the problem comes 
    move_uploaded_file($_FILES[$fup]['tmp_name'], '../lyrics/'.$a.'.png'); 

Когда я запускаю это переменные объявление, обрабатывается хорошо, но файл не получает но отображается следующая ошибка

"Примечание: Undefined индекс: [объект FormData]"

Как я могу это исправить?

+0

сделать 'print_r ($ _ POST)' и 'print_r ($ _ FILES)' и убедитесь, что '$ _POST [ 'fileup'] 'является одним из ключевых в' $ _FILES' – cmorrissey

+0

кажется fileup не является ключ в '$ _FILES', но является ключом в' $ _POST'. Также он не содержит данные изображения только поддельный путь к изображению –

+0

Что такое 'ajaxObj'? – Musa

ответ

0

Начните с указания своей ФОРМЫ, что она будет содержать загруженный объект (или больше).

<form enctype="multipart/form-data" action="...put your URL here..." method="POST"> 

Подробнее здесь:

http://php.net/manual/en/features.file-upload.post-method.php

+0

Я добавил 'enctype =" multipart/form-data "'. Я хочу передать его через ajax, так что в зависимости от результата, полученного от php, я могу внести некоторые изменения на странице. и поэтому я не добавил атрибут action –

0

вопрос здесь:

ajax.send("a="+a+"&b="+b+"&c="+c+"&d="+d+"&fileup="+fileup); 

Вы пытаетесь добавить объект FormData в строку. Вместо этого вы должны добавить все остальные значения в объект FormData и отправить это.

var fileup = new FormData();     
fileup.append("file", file_data); 
fileup.append("a", a); 
fileup.append("b", b); 
fileup.append("c", c); 
fileup.append("d", d); 

ajax.send(fileup); 
+0

Спасибо, я попробовал '$ _POST [" a "]' в php, но он не работает. Он говорит _Указанный индекс: a_. Как получить значения в php –

+0

Я сделал 'print_r ($ _ POST)', и это получилось 'Array ([------ WebKitFormBoundaryaBJCF5t2LUcnvGBI Content-Disposition: _form-data; _name] =>" a "atext ------ WebKitFormBoundaryaBJCF5t2LUcnvGBI Content-Disposition: form-data; name = "b" btext ------ WebKitFormBoundaryaBJCF5t2LUcnvGBI Content-Disposition: form-data; name = "c" ctext ------ WebKitFormBoundaryaBJCF5t2LUcnvGBI Содержимое -Disposition: form-data; name = "d" dtext ------ WebKitFormBoundaryaBJCF5t2LUcnvGBI Content-Disposition: form-data; name = "file"; filename = "file.png" Content-Type: image/png PNG IHDReFZ). –

+0

В JavaScript перед вызовом отправки попробуйте 'ajax.setRequestHeader ('Content-type', 'multipart/form-data');' затем посмотрите, что находится в сообщении PHP снова. – MrCode

Смежные вопросы