在我的输入文件类型字段中获取空值

时间:2018-04-24 04:00:43

标签: php jquery smarty3

我下载了一个Web应用程序,我发现它是使用Smarty Template Engine创建的。我想在创建新公司时添加头像字段,因此我将enctype="multipart/form-data"<input type="file" name="avatar">添加到现有<form>,我还将avatar添加到我的companies table我的数据库。这是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);
                    }

                });

        });

以下是Controller中的代码:

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值。我似乎无法解决这个问题。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

更改

$("#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);
                }
            },
        });

    });