buduję stronę opartą na Bootstrap 3. Podpiąłem do niego plugin bootstrapValidator, który działa super. Posiada on również integrację z Ajaxem jednak mam problem ze spięciem go z formularzem w php.
Czy znajdzie się dobra dusza, która pomoże mi dopiąć formularz? Nie jestem biegły w ajaxie i js'ach uczę się na własnych błędach jednak stanąłem w miejscu i od 2 dni nie mogę nic w tej materii wykminić.
Chodzi o przesłanie ajaxem informacji z formularza i wysłanie ich poprzez php bez przeładowania strony.
HTML
<form class="modalFormContainer"> <div class="form-group"> <input type="text" class="form-control input-lg" id="inputSubjectModal" name="url" placeholder="Your website URL" value=""> </div> <div class="form-group"> <input type="text" class="form-control input-lg" id="inputSubjectModal" name="email" placeholder="Your Email address" value=""> </div> <div class="form-group"> <input type="text" class="form-control input-lg" id="inputSubjectModal" name="name" placeholder="Your name (optional)" value=""> </div> <div class="row"> <div class="form-group"> <div class="col-md-6 selectContainer"> <select name="reach" class="form-control"> </select> </div> </div> </div> <div class="row"> <div class="col-md-6"> </div> </div> </form>
PHP
<?php if($_POST) { require_once('class.translation.php'); $translate = new Translator($lang); $to_Email = "pawel.slomka@adtaily.com"; // $to_Email = "jarek@adtaily.pl"; //check if its an ajax request, exit if not if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { //exit script outputting json data $output = json_encode( 'type'=>'error', 'text' => 'Request must come from Ajax' )); } //check $_POST vars are set, exit if any missing { } //Sanitize input data using PHP filter_var(). $user_Name = filter_var($_POST["name"], FILTER_SANITIZE_STRING); $user_Email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL); $user_Subject = filter_var($_POST["subject"], FILTER_SANITIZE_STRING); $user_Message = filter_var($_POST["message"], FILTER_SANITIZE_STRING); $user_Checked = $_POST["send_copy"]; //additional php validation if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation { } //proceed with PHP email. $headers = 'From: '.$user_Email.'' . "\r\n" . 'Reply-To: '.$user_Email.'' . "\r\n" . $body .= 'Imię: '.$user_Name."\r\n\r\n"; $body .= 'E-mail: '.$user_Email."\r\n\r\n"; $body .= 'Temat: '.$user_Subject."\r\n\r\n"; $body .= 'Wiadomość wysłana z formularza kontakowego na stronie YieldBird'; // send mail if( $user_Checked == true ) if(!$sentMail) { $output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.')); }else{ } } ?>
AJAX
$(document).ready(function() { $('.contactForm') .bootstrapValidator({ feedbackIcons: { valid: 'glyphicon glyphicon-ok', invalid: 'glyphicon glyphicon-remove', validating: 'glyphicon glyphicon-refresh' }, fields: { name: { message: 'The username is not valid', validators: { notEmpty: { message: 'The username is required' }, } }, email: { validators: { notEmpty: { message: 'The email is required' }, emailAddress: { message: 'The input is not a valid email address' } } }, subject: { validators: { notEmpty: { message: 'The subject is required' } } }, message: { validators: { notEmpty: { message: 'The message is required.' } } } } }) .on('success.form.bv', function(e) { // Prevent form submission e.preventDefault(); ga('send', 'event', 'Message', 'Sent', 'Messages has been sent successfully'); // Get the form instance var $form = $(e.target); // Get the BootstrapValidator instance var bv = $form.data('bootstrapValidator'); // Use Ajax to submit form data $.post($form.attr('action'), $form.serialize(), function(result) { $.ajax({ type: 'POST', url: 'lib/contact.php', data: $('.contactForm').serialize(), success: function () { alert('form was submitted'); }, dataType: 'json' }) }, 'json'); }); });