在我的输入文件类型字段中获取空值
Getting a null value in my input file type field
我下载了一个网络应用程序,我发现它是使用 Smarty 模板引擎创建的。我想在创建新公司时添加一个头像字段,所以我在现有的 <form>
中添加了 enctype="multipart/form-data"
和 <input type="file" name="avatar">
并且我还在我的 companies table
中添加了 avatar
我的数据库。这是 HTML 代码:
<form class="form-horizontal" id="ib_modal_form" enctype="multipart/form-data">
<div class="form-group"><label class="col-lg-4 control-label" for="company_name">{$_L['Company Name']}<small class="red">*</small></label>
<div class="col-lg-8"><input type="text" id="company_name" name="company_name" class="form-control" value="{$val['company_name']}"></div>
</div>
<div class="form-group"><label class="col-lg-4 control-label" for="avatar">{$_L['Avatar']}</label>
<div class="col-lg-8"><input type="file" name="avatar"></div>
</div>
<div class="form-group"><label class="col-lg-4 control-label" for="email">{$_L['Email']}</label>
<div class="col-lg-8"><input type="text" id="email" name="email" class="form-control" value="{$val['email']}"> </div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-danger">{$_L['Cancel']}</button>
<button class="btn btn-primary modal_submit" type="submit" id="modal_submit"><i class="fa fa-check"></i> {$_L['Save']}</button>
</div>
我发现当点击“保存”按钮时,表单转到了这段 javascript 代码:
$modal.on('click', '.modal_submit', function(e){
e.preventDefault();
$.post( _url + "contacts/add_company_post/", $("#ib_modal_form").serialize())
.done(function( data ) {
if ($.isNumeric(data)) {
location.reload();
}
else {
$modal.modal('loading');
toastr.error(data);
}
});
});
控制器中的代码如下:
case 'add_company_post':
$data = ib_posted_data();
$company = Model::factory('Models_Company')->create();
$company->company_name = $data['company_name'];
$company->url = $data['url'];
$company->email = $data['email'];
$company->phone = $data['phone'];
$company->logo_url = $data['logo_url'];
$company->avatar = $_FILES['avatar']['name'];
$company->save();
break;
问题是它无法识别控制器中的 $_FILES['avatar']['name'];
每当我添加一家新公司时,我的数据库中都会得到一个 NULL 值。我似乎无法解决这个问题。任何帮助,将不胜感激。谢谢。
改变
来自
$("#ib_modal_form").serialize()
到
new FormData($("#ib_modal_form")[0])
您应该使用 FormData 使用 ajax 上传文件。 $(form).serialize() 只会给你键和值。
你能改变你的 ajax 调用方式吗
$modal.on('click', '.modal_submit', function(e){
e.preventDefault();
var formData = new FormData($("#ib_modal_form")[0]);
$.ajax({
url: _url + "contacts/add_company_post/",
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (data) {
if ($.isNumeric(data)) {
location.reload();
}
else {
$modal.modal('loading');
toastr.error(data);
}
},
});
});
我下载了一个网络应用程序,我发现它是使用 Smarty 模板引擎创建的。我想在创建新公司时添加一个头像字段,所以我在现有的 <form>
中添加了 enctype="multipart/form-data"
和 <input type="file" name="avatar">
并且我还在我的 companies table
中添加了 avatar
我的数据库。这是 HTML 代码:
<form class="form-horizontal" id="ib_modal_form" enctype="multipart/form-data">
<div class="form-group"><label class="col-lg-4 control-label" for="company_name">{$_L['Company Name']}<small class="red">*</small></label>
<div class="col-lg-8"><input type="text" id="company_name" name="company_name" class="form-control" value="{$val['company_name']}"></div>
</div>
<div class="form-group"><label class="col-lg-4 control-label" for="avatar">{$_L['Avatar']}</label>
<div class="col-lg-8"><input type="file" name="avatar"></div>
</div>
<div class="form-group"><label class="col-lg-4 control-label" for="email">{$_L['Email']}</label>
<div class="col-lg-8"><input type="text" id="email" name="email" class="form-control" value="{$val['email']}"> </div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-danger">{$_L['Cancel']}</button>
<button class="btn btn-primary modal_submit" type="submit" id="modal_submit"><i class="fa fa-check"></i> {$_L['Save']}</button>
</div>
我发现当点击“保存”按钮时,表单转到了这段 javascript 代码:
$modal.on('click', '.modal_submit', function(e){
e.preventDefault();
$.post( _url + "contacts/add_company_post/", $("#ib_modal_form").serialize())
.done(function( data ) {
if ($.isNumeric(data)) {
location.reload();
}
else {
$modal.modal('loading');
toastr.error(data);
}
});
});
控制器中的代码如下:
case 'add_company_post':
$data = ib_posted_data();
$company = Model::factory('Models_Company')->create();
$company->company_name = $data['company_name'];
$company->url = $data['url'];
$company->email = $data['email'];
$company->phone = $data['phone'];
$company->logo_url = $data['logo_url'];
$company->avatar = $_FILES['avatar']['name'];
$company->save();
break;
问题是它无法识别控制器中的 $_FILES['avatar']['name'];
每当我添加一家新公司时,我的数据库中都会得到一个 NULL 值。我似乎无法解决这个问题。任何帮助,将不胜感激。谢谢。
改变
来自
$("#ib_modal_form").serialize()
到
new FormData($("#ib_modal_form")[0])
您应该使用 FormData 使用 ajax 上传文件。 $(form).serialize() 只会给你键和值。
你能改变你的 ajax 调用方式吗
$modal.on('click', '.modal_submit', function(e){
e.preventDefault();
var formData = new FormData($("#ib_modal_form")[0]);
$.ajax({
url: _url + "contacts/add_company_post/",
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (data) {
if ($.isNumeric(data)) {
location.reload();
}
else {
$modal.modal('loading');
toastr.error(data);
}
},
});
});