繁体   English   中英

如何使用Codeigniter和Ajax通过文件上载路径和验证插入多份职业形式的数据

[英]how to insert multipart career-form data with file uploading path and validation, using codeigniter and ajax

我正在尝试通过Ajax在PHP Codeigniter中通过文件上传和验证插入工作表单数据,但它不起作用。 作为参考,下面提到了我的代码。.请帮助我。我如何将数据与文件一起发送到数据库。


src =“ https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js”>

我的HTML表单代码是:

<?php echo form_open_multipart('MainController/submitjoinusForm', 'class="" id="joinusform"', $hidden = array());?>
        <div class="messages"> 
            <div class="col-md-12">
               <div id="status"></div>
           </div>
       </div>
       <div class="controls">
        <div class="form-group">
            <div class="col-md-12 col-sm-12">
                <label for="contactname">Name</label>
                <input id="contactname" name="name" class="form-control" required="required" placeholder="Enter your name *" data-error="Valid name required." value="" type="text">                                           
                <!--  <span class="help-block with-errors"></span> -->
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-12 col-sm-12">
                <label for="contactemail">Email Address</label>
                <input id="contactemail" name="email" class="form-control" required="required" placeholder="Enter your email *" value="" type="email">
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-12 col-sm-12">
                <label for="form_phone">Phone Number</label>
                <input id="contactphone" name="phone" class="form-control" required="required" placeholder="Enter your phone"  value="" type="tel">
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-12 col-sm-12">
                <label for="form_message">How Can We Help?</label>
                <textarea id="contactmessage" value="" name="message" class="form-control" required="required" placeholder="Message for us *" rows="5" 
                data-error="Leave us a message."></textarea>
                <div class="help-block with-errors"></div>
            </div>
        </div>
        <div class="form-group">                                       
            <div class="col-md-4 col-sm-4">
                <?php echo $captcha['image']; ?>
            </div>
            <div class="col-md-4 col-sm-4">                                            
                <input type="text" id="contactcaptcha" value="" name="captcha" required="required" class="form-control" placeholder="Type Captcha..."> 
            </div>
            <div class="col-md-4 col-sm-4">
                <input class="btn btn-secondary btn-send form-control" name="submit" value="Send message" type="submit">
            </div>                                   
        </div>
    </div>                                    
    </form> 

我的控制器代码是

function submitjoinusForm() 
    {
        $response = array();
        $oword = $this->session->userdata('captcha_key');
        $tword = $this->input->post('captcha');
        //form field validation rules
        $this->form_validation->set_rules('fullname', 'Name', 'trim|required');
        $this->form_validation->set_rules('dob', 'Date of Birth', 'trim|required');
        $this->form_validation->set_rules('gender', 'Gender', 'trim|required');
        $this->form_validation->set_rules('maritalstatus', 'Marital Status', 'trim|required');
        $this->form_validation->set_rules('nationality', 'Nationality', 'trim|required');
        $this->form_validation->set_rules('visastatus', 'Visa Status', 'trim|required');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('contact', 'Contact', 'trim|required');       
        $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required');   

        if ( ($this->form_validation->run() == TRUE) && (strtolower($oword) == strtolower($tword)) )
        {
            if($_FILES['file']['error'] != 0) 
            {
                $response = array(
                    'status' => 'alert-danger',                 
                    'data'=> 'Please upload your CV file in pdf or word file, maximum size of 2MB.',
                );
                echo json_encode($response);
                return FALSE;
            }
            else
            {
                $config['upload_path']      = './files/';
                $config['allowed_types']    = 'pdf|doc|docx';
                $config['max_size']         = 1024 * 3;
                $config['encrypt_name']     = TRUE;
                $this->load->library('upload',$config);
                $this->upload->initialize($config);

                if ($this->upload->do_upload('userfile'))
                {
                    $datafile['upload_data'] = $this->upload->data('userfile');
                    $userfile_name = $datafile['upload_data'];
                }
                else
                {
                    $userfile_name = '';
                }
                $data = array(

                    'fullname'      => $this->input->post('fullname'),
                    'dob'           => $this->input->post('dob'),
                    'gender'        => $this->input->post('gender'),
                    'maritalstatus' => $this->input->post('maritalstatus'),
                    'nationality'   => $this->input->post('nationality'),
                    'visastatus'    => $this->input->post('visastatus'),
                    'email'         => $this->input->post('email'),
                    'contact'       => $this->input->post('contact'),
                    'file'          => $userfile_name                   
                );              
                $this->joinusModel->submitJoinus($data);
                if($this->db->insert_id())
                {
                    $response = array(
                        'status' => 'alert-success',
                        'data' => "You message has been sent successfully. We'll get back to you shortly",
                    );
                    echo json_encode($response);
                }
                else
                {
                    $response = array(
                        'status' => 'alert-danger',
                        'data' => "Oops! Something went wrong while sending message to us.",
                    );
                    echo json_encode($response);
                }
            }

        }
    }

我的JavaScript代码是

 jQuery(document).ready(function($) 
    {
     $('#joinusform').ajaxForm( 
     {
       beforeSubmit: function(formData, jqForm, options)
       {
         $("div#status").html('');                 
     },
     $.ajax({
        url : $("#joinusform").attr('action'),
        dataType : 'json',
        type : 'POST',
        data : formData,
        contentType : false,
        processData : false,
    });     
     success:function(respnse)
     {             
      var result= $.parseJSON(respnse);
      $("div#status").html('<div class="alert '+result.status+' alert-dismissable" role="alert"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>'+result.data+'</div>');
      if (result.status == 'success') 
      {
        $('#contactform').clearForm();
    }
}           
});   
 }); 

我对您的代码进行了一些重构,以通过分隔.etc来使错误更明显。 我在这里发现错误: $this->upload->data('userfile') data的可选参数应该仅是例如file_namefull_path而不是file字段的名称。

https://www.codeigniter.com/userguide3/libraries/file_uploading.html#CI_Upload::data

我还消除了else一些语句,方法是先测试错误,然后再进行测试,然后再退出(如您所见)。 如果此操作仍然失败,则应取消对我已注释掉的第一行的注释,以查看是否获得了输入。 请注意,通过ajax发送的文件需要以某种方式处理: $ _POST是否不能以ajax格式提交?

function submitjoinusForm() {

    //echo '<pre>';
    //echo 'post data: <br>';
    //print_r($_POST);
    //echo 'files: <br>';
    //print_r($_FILES);

    $response = array();
    $oword = $this->session->userdata('captcha_key');
    $tword = $this->input->post('captcha');
    //form field validation rules
    $this->form_validation->set_rules('fullname', 'Name', 'trim|required');
    $this->form_validation->set_rules('dob', 'Date of Birth', 'trim|required');
    $this->form_validation->set_rules('gender', 'Gender', 'trim|required');
    $this->form_validation->set_rules('maritalstatus', 'Marital Status', 'trim|required');
    $this->form_validation->set_rules('nationality', 'Nationality', 'trim|required');
    $this->form_validation->set_rules('visastatus', 'Visa Status', 'trim|required');
    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('contact', 'Contact', 'trim|required');
    $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required');

    if (!$this->form_validation->run()) {
        echo json_encode(array('status' => 'alert-danger', 'data' => validation_errors('', '<br>')));
        exit;
    }

    if (strtolower($oword) !== strtolower($tword)) {
        echo json_encode(array('status' => 'alert-danger', 'data' => 'Incorrect captcha.'));
        exit;
    }

    $config['upload_path'] = './files/';
    $config['allowed_types'] = 'pdf|doc|docx';
    $config['max_size'] = 1024 * 3;
    $config['encrypt_name'] = TRUE;
    $this->load->library('upload', $config);
    $this->upload->initialize($config);

    if (!$this->upload->do_upload('userfile')) {
        $error = 'Please upload your CV file in pdf or word file, maximum size of 2MB. <br>';
        $error .= $this->upload->display_errors('', '<br>');
        echo json_encode(array('status' => 'alert-danger', 'data' => $error));
        exit;
    }

    $data = array(
        'fullname' => $this->input->post('fullname'),
        'dob' => $this->input->post('dob'),
        'gender' => $this->input->post('gender'),
        'maritalstatus' => $this->input->post('maritalstatus'),
        'nationality' => $this->input->post('nationality'),
        'visastatus' => $this->input->post('visastatus'),
        'email' => $this->input->post('email'),
        'contact' => $this->input->post('contact'),
        //https://www.codeigniter.com/userguide3/libraries/file_uploading.html#CI_Upload::data
        'file' => $this->upload->data('file_name')
    );

    $this->joinusModel->submitJoinus($data);

    if ($this->db->insert_id()) {
        $response = array(
            'status' => 'alert-success',
            'data' => "You message has been sent successfully. We'll get back to you shortly.",
        );
        echo json_encode($response);
    } else {
        $response = array(
            'status' => 'alert-danger',
            'data' => "Oops! Something went wrong while sending a message to us.",
        );
        echo json_encode($response);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM