在现有的ajax代码中添加图像上传功能

My code here works fine except image uploading. It inserts all data in database .

<input type="file" name="image2" class="file" id="imgInp"/>

But after adding file type input in php it is showing

Notice: Undefined index: image2 in C:\xampp\htdocs\upload\submit.php on line 18

How can I add image uploading function in my existing code.

<div id="form-content">
            
<form method="post" id="reg-form" enctype="multipart/form-data" autocomplete="off">
                
<div class="form-group">
<input type="text" class="form-control" name="txt_fname" id="lname" placeholder="First Name" required /></div>
                
<div class="form-group">
  <input type="text" class="form-control" name="txt_lname" id="lname" placeholder="Last Name" required /></div>
                
<div class="form-group">
<input type="text" class="form-control" name="txt_email" id="lname" placeholder="Your Mail" required />
</div>
                
<div class="form-group">
<input type="text" class="form-control" name="txt_contact" id="lname" placeholder="Contact No" required />
</div>
                
                // here is the problem 
 
 <input type="file" name="image2" class="file" id="imgInp"/>
                
                 //here is the problem

  <hr />
                
                
<div class="form-group">
<button class="btn btn-primary">Submit</button>
</div>
                
</form>
</div>

<script type="text/javascript">
$(document).ready(function() {  
    
    // submit form using $.ajax() method
    
    $('#reg-form').submit(function(e){
        
        e.preventDefault(); // Prevent Default Submission
        
        $.ajax({
            url: 'submit.php',
            type: 'POST',
            data: $(this).serialize() // it will serialize the form data
        })
        .done(function(data){
            $('#form-content').fadeOut('slow', function(){
                $('#form-content').fadeIn('slow').html(data);
            });
        })
        .fail(function(){
            alert('Ajax Submit Failed ...');        });
    });
  
  </script>

submit.php

<?php

$con = mysqli_connect("localhost","root","","table"  ) or die

( "unable to connect to internet");

include ("connect.php");
include ("functions.php");

if( $_POST ){
    

    $fname = $_POST['txt_fname'];
    $lname = $_POST['txt_lname'];
    $email = $_POST['txt_email'];
    $phno = $_POST['txt_contact'];
    


$post_image2 = $_FILES['image2']['name'];  // this line shows error
$image_tmp2 = $_FILES['image2']['tmp_name'];




move_uploaded_file($image_tmp2,"images/$post_image2");
    

$insert =" insert into comments 

(firstname,lastname,email,number,post_image) values('$fname','$lname','$email','$phno','$post_image2' ) ";

$run = mysqli_query($con,$insert);

    ?>
    

</div>

You can use FormData, also I suggest you can change the elements id of the form, now all of them have ('lname') Try this with your current:

In yout HTML, put an ID to your file input

<input type="file" name="image2" id="name="image2"" class="file" id="imgInp"/>

And change the id of the other input.

In your JavaScript:

var frmData = new FormData();

//for the input
frmData.append('image2', $('#image2')[0].files[0]);
//for all other input    
$('#reg-form :input').each(function(){  
    if($(this).attr('id')!='image2' ){
        frmData.append($(this).attr('name'), $(this).val() );
    }
});     

$.ajax( {
    url: 'URLTOPOST',
    type: 'POST',
    data: frmData,
    processData: false,
    contentType: false
}).done(function( result ) {
    //When done, maybe show success dialog from JSON
}).fail(function( result ) {
    //When fail, maybe show an error dialog
}).always(function( result ) {
    //always execute, for example hide loading screen
});

In your PHP code you can access the image with $_FILE and the input with $_POST

FormData() works on the modern browsers.If you want for older browser support use malsup/form plugin

Your Form

<form method="post" action="action.php" id="reg-form" enctype="multipart/form-data" autocomplete="off">

Javscript

<script type="text/javascript">
var frm = $('#reg-form');
frm.submit(function (ev) {
var ajaxData = new FormData(frm);
    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: ajaxData,
        contentType: false,             
        cache: false,           
        processData:false, 
        success: function (data) {
            alert('ok');
        }
    });

    ev.preventDefault();
});

In php extract($_POST) to get all input data and $_FILE for files