Bootstrap Modal Popup Form Submit with Ajax & PHP

If your web application uses Twitter Bootstrap framework, modal popup integration is very easy. Bootstrap helps you to add a popup to button or link without using additional JavaScript code. Also, using Bootstrap, you can build a well-designed HTML form in less time.

This tutorial will show how you can integrate a modal popup form to your website using Bootstrap and submit the form with jQuery, Ajax, and PHP. For example, we’ll build a contact form with Bootstrap modal popup and submit the form after validation using jQuery, Ajax, and PHP. The following functionality will be implemented in Bootstrap modal form script.

  • Modal popup with contact form using Bootstrap.
  • Validate form data before submit using jQuery.
  • Submit form data with jQuery, Ajax, and PHP.
  • Send the email to website admin using PHP.

Bootstrap & jQuery Library

Bootstrap is used to create modal popup and design HTMl form, include the bootstrap and jQuery library first.

<!-- Latest minified bootstrap css -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

<!-- Latest minified bootstrap js -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

HTML Code: Bootstrap Modal Popup Form

The following HTML creates a dialog popup window using bootstrap. A button is used to trigger this modal window and open a form for submitting the contact request. The button or link needs two data-* attributes, data-toggle="modal" and data-target="#modalForm". Also, the modal div must have and id attribute that should be the same as data-target attribute of trigger link or button.

<!-- Button to trigger modal -->
<button class="btn btn-success btn-lg" data-toggle="modal" data-target="#modalForm">
    Open Contact Form
</button>

<!-- Modal -->
<div class="modal fade" id="modalForm" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <!-- Modal Header -->
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">
                    <span aria-hidden="true">&times;</span>
                    <span class="sr-only">Close</span>
                </button>
                <h4 class="modal-title" id="myModalLabel">Contact Form</h4>
            </div>
            
            <!-- Modal Body -->
            <div class="modal-body">
                <p class="statusMsg"></p>
                <form role="form">
                    <div class="form-group">
                        <label for="inputName">Name</label>
                        <input type="text" class="form-control" id="inputName" placeholder="Enter your name"/>
                    </div>
                    <div class="form-group">
                        <label for="inputEmail">Email</label>
                        <input type="email" class="form-control" id="inputEmail" placeholder="Enter your email"/>
                    </div>
                    <div class="form-group">
                        <label for="inputMessage">Message</label>
                        <textarea class="form-control" id="inputMessage" placeholder="Enter your message"></textarea>
                    </div>
                </form>
            </div>
            
            <!-- Modal Footer -->
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary submitBtn" onclick="submitContactForm()">SUBMIT</button>
            </div>
        </div>
    </div>
</div>

JavaScript Code: Validate and Submit Form

The submitContactForm() function is triggered on clicking the form submit button. In the submitContactForm() function, popup form data is validated before submit and submitted to the submit_form.php file for further processing using jQuery and Ajax.

<script>
function submitContactForm(){
    var reg = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i;
    var name = $('#inputName').val();
    var email = $('#inputEmail').val();
    var message = $('#inputMessage').val();
    if(name.trim() == '' ){
        alert('Please enter your name.');
        $('#inputName').focus();
        return false;
    }else if(email.trim() == '' ){
        alert('Please enter your email.');
        $('#inputEmail').focus();
        return false;
    }else if(email.trim() != '' && !reg.test(email)){
        alert('Please enter valid email.');
        $('#inputEmail').focus();
        return false;
    }else if(message.trim() == '' ){
        alert('Please enter your message.');
        $('#inputMessage').focus();
        return false;
    }else{
        $.ajax({
            type:'POST',
            url:'submit_form.php',
            data:'contactFrmSubmit=1&name='+name+'&email='+email+'&message='+message,
            beforeSend: function () {
                $('.submitBtn').attr("disabled","disabled");
                $('.modal-body').css('opacity', '.5');
            },
            success:function(msg){
                if(msg == 'ok'){
                    $('#inputName').val('');
                    $('#inputEmail').val('');
                    $('#inputMessage').val('');
                    $('.statusMsg').html('<span style="color:green;">Thanks for contacting us, we\'ll get back to you soon.</p>');
                }else{
                    $('.statusMsg').html('<span style="color:red;">Some problem occurred, please try again.</span>');
                }
                $('.submitBtn').removeAttr("disabled");
                $('.modal-body').css('opacity', '');
            }
        });
    }
}
</script>

Send Contact Request Email (submit_form.php)

In the submit_form.php file, the following works are done for processing the form submit request.

  • Check whether submitted form is not empty and validate email by FILTER_VALIDATE_EMAIL filter in PHP.
  • Get the form data using PHP $_POST method.
  • Send HTML email with contact details to site admin using PHP mail() function.

Once the required action is completed, the status message is rendered that would be used by the Ajax success method.

<?php
if(isset($_POST['contactFrmSubmit']) && !empty($_POST['name']) && !empty($_POST['email']) && (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) && !empty($_POST['message'])){
    
    
// Submitted form data
    
$name   $_POST['name'];
    
$email  $_POST['email'];
    
$message$_POST['message'];
    
    
/*
     * Send email to admin
     */
    
$to     'admin@example.com';
    
$subject'Contact Request Submitted';
    
    
$htmlContent '
    <h4>Contact request has submitted at CodexWorld, details are given below.</h4>
    <table cellspacing="0" style="width: 300px; height: 200px;">
        <tr>
            <th>Name:</th><td>'
.$name.'</td>
        </tr>
        <tr style="background-color: #e0e0e0;">
            <th>Email:</th><td>'
.$email.'</td>
        </tr>
        <tr>
            <th>Message:</th><td>'
.$message.'</td>
        </tr>
    </table>'
;
    
    
// Set content-type header for sending HTML email
    
$headers "MIME-Version: 1.0" "\r\n";
    
$headers .= "Content-type:text/html;charset=UTF-8" "\r\n";
    
    
// Additional headers
    
$headers .= 'From: CodexWorld<sender@example.com>' "\r\n";
    
    
// Send email
    
if(mail($to,$subject,$htmlContent,$headers)){
        
$status 'ok';
    }else{
        
$status 'err';
    }
    
    
// Output status
    
echo $status;die;
}

Conclusion

This example script provides an easy and quick way to integrate popup form and send form data to email. If you want to store the form data for future use, insert the form data into the MySQL database before sending the email.

Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request

10 Comments

  1. James Said...
  2. Mahesh Swami Said...
  3. Brian Said...
  4. Ram Said...
  5. RaviKant Said...
  6. Ramlee Mat Said...
  7. Fayyaz Ahmad Said...
  8. EtsyTeleMart Said...
  9. Twim32 Said...
  10. Ruby Said...

Leave a reply

keyboard_double_arrow_up