Я должен исправить патч PHP Mail. Дело в том, что переменная $_FILES
управляет только первым вводом файла. Как все установлено, вход выглядит так:
<input type="file" name="form.steps.0.field.4" />
.
Дело в том, что следующий вход является тем же, где имя увеличивается, например: <input type="file" name="form.steps.0.field.5" />
.
При зацикливании $_FILES
это текущая логика:
foreach($_FILES as $input) {
...
}
В этом случае $_FILES
имеет только файл <input type="file" name="form.steps.0.field.4" />
, тогда как второй входной файл обрабатывается как текст, и его значение равно C:\\fakepath\\
{имя_файла} .
Как мне этого добиться, не используя одно имя ввода, например <input type="file" name="files[]" />
?
Edit:
var_dump
из $_FILES
производит следующее:
array(1) {
["files"]=>
array(5) {
["name"]=>
array(1) {
[0]=>
string(22) "Checklist-template.pdf"
}
["type"]=>
array(1) {
[0]=>
string(15) "application/pdf"
}
["tmp_name"]=>
array(1) {
[0]=>
string(14) "/tmp/phpZxkSFz"
}
["error"]=>
array(1) {
[0]=>
int(0)
}
["size"]=>
array(1) {
[0]=>
int(115033)
}
}
}
Редактировать # 2
Добавление действия (для использования на передней и задней части):
add_action('wp_ajax_sp_form_submit', 'spForm_submit', 10, 1);
add_action('wp_ajax_nopriv_sp_form_submit', 'spForm_submit', 10, 1);
PHP, выполняющий данные:
function spForm_submit(){
if(!(is_array($_POST) && defined('DOING_AJAX') && DOING_AJAX)){
return;
}
var_dump( $_FILES );
die();
}
JS с вызовом AJAX:
$('.sp-form .btn-submit').unbind('click').bind('click', function(e){
e.preventDefault();
e.stopPropagation();
$('input[type="hidden"]', form).each(function(){
data[$(this).attr('name')] = $(this).val();
});
var fd = new FormData(),
file_inputs = $('input[type="file"]', form);
$.each($(file_inputs), function(i, obj) {
$.each(obj.files,function(j,file){
fd.append('files[' + j + ']', file);
});
});
function appendFormdata(FormData, data, name, cback){
name = name || '';
if (typeof data === 'object'){
$.each(data, function(index, value){
if (name === ''){
appendFormdata(FormData, value, index, cback);
} else {
appendFormdata(FormData, value, name + '['+index+']', cback);
}
});
} else {
FormData.append(name, data);
}
}
appendFormdata(fd, {form: data}, null);
fd.append( 'action', 'sp_form_submit' );
$.ajax({
url : window.forms_cback, // AJAX URL
type : "POST",
data : fd,
contentType : false,
processData : false,
dataType : "json",
success : function(response) {
// removed for the purpose of the post
}
});
});
И вывод массива $_FILES
:
array(1) {
["files"]=>
array(5) {
["name"]=>
array(1) {
[0]=>
string(22) "Checklist-template.pdf"
}
["type"]=>
array(1) {
[0]=>
string(15) "application/pdf"
}
["tmp_name"]=>
array(1) {
[0]=>
string(14) "/tmp/phpZxkSFz"
}
["error"]=>
array(1) {
[0]=>
int(0)
}
["size"]=>
array(1) {
[0]=>
int(115033)
}
}
}