Обработчик для формы обратной связи

Тема в разделе "Как сделать...", создана пользователем puk2006, 29 окт 2014.

  1. puk2006

    puk2006 Создатель

    Регистр.:
    15 апр 2014
    Сообщения:
    49
    Симпатии:
    9
    Как сделать обработчик для формы обратной связи:
    Код:
    <div class="cm1-bg">
    <div class="cm1-form">
    <div class="cm1-form-inner">
    <div class="cm1-title">Заполните форму заказа</div>
    <a class="cm1-close" href="index.html#" title="Закрыть"></a>
    <div class="form purple">
    <form action="http://ссылка на обработчик" class="form2">
    <input type="hidden" name="source" value="" />
    <div class="form-input"><label class="name"><input type="text" name="name" value="" placeholder="Ваше имя" /></label></div>
    <div class="form-input"><label class="phone"><input type="text" name="phone" value="" placeholder="Ваш номер телефона" /></label></div>
    <div class="form-input"><label class="email"><input type="text" name="email" value="" placeholder="Ваш email" /></label></div>
    <div class="form-select">
    <select name="reason" class="styled">
    <option value="Необходима консультация1">Необходима консультация1</option>
    <option value="Необходима консультация2">Необходима консультация2</option>
    <option value="Необходима консультация3">Необходима консультация3</option>
    <option value="Необходима консультация4">Необходима консультация4</option>
    </select>
    </div>
    <div class="form-button"><input type="submit" value="Отправить" /></div>
    <div class="cm1-result"></div>
    </form>
    </div>
    </div>
    </div>
    </div>
    
    так же есть файл js
    Код:
    jQuery(function(){
    
        /*****************************************************************/
    
        jQuery('.show-form').click(function(){
           
            var link = jQuery(this);
            var hidden = jQuery('.cm1-form form input[name="source"]');
            hidden.val(jQuery(this).attr('data-source'));
           
            jQuery('.cm1-bg').fadeIn();
            return false;
        });
    
        jQuery('.cm1-close').click(function(){
            jQuery('.cm1-bg').fadeOut();
            return false;
        });
       
        /*****************************************************************/
       
        // форма в шапке и подвале
        jQuery('.form1').submit(function(){
            var form = jQuery(this);
            jQuery.ajax({
                type: form.attr('method'),
                url: form.attr('action'),
                data: form.serialize(),
                dataType: 'json',
                beforeSend: function(jqXHR, settings){
                    if( !validate_form(form) ){
                        jqXHR.abort();
                        return;
                    }
                    form.find('input[type="submit"]').attr('disabled', 'disabled');
                },
                success: function(data, textStatus, jqXHR){
                    // сообщение
                    window.alert(strip_tags(data.html));
                    // успешная обработка
                    if( data.status == 1 ){
                        // очистка данных
                        form.find('input[type="text"]').val('');
                    }
                    // возвращаем активность кнопке формы
                    form.find('input[type="submit"]').removeAttr('disabled');
                    return;
                },
                error: function(){
                    alert('error. try again');
                    return;
                }
            });
            return false;
        });
       
        /*****************************************************************/
       
        // скрытая форма в шапке, тарифах, подвале
        jQuery('.form2').submit(function(){
            var form = jQuery(this);
            jQuery.ajax({
                type: form.attr('method'),
                url: form.attr('action'),
                data: form.serialize(),
                dataType: 'json',
                beforeSend: function(jqXHR, settings){
                    if( !validate_form(form) ){
                        jqXHR.abort();
                        return;
                    }
                    form.find('input[type="submit"]').attr('disabled', 'disabled');
                },
                success: function(data, textStatus, jqXHR){
                    // удаляем дочерние элементы у result
                    form.find('.cm1-result').children().slideUp(function(){
                        jQuery(this).remove();
                    });
                    // добавляем новые дочерние элементы в result
                    var content = jQuery(data.html).hide();
                    form.find('.cm1-result').append(content);
                    content.slideDown();
                    setTimeout(function(){
                        content.slideUp(function(){
                            jQuery(this).remove();
                        });
                    }, 3000);
                    // успешная обработка
                    if( data.status == 1 ){
                        // очистка данных
                        form.find('input[type="text"]').val('');
                        // таймер для автозакрытия формы при успешной обработке
                        if( form.myTimer )
                            clearTimeout(form.myTimer);
                        form.myTimer = setTimeout(function(){
                            form.find('.cm1-close').click()
                        }, 3000);
                    }
                    // возвращаем активность кнопке формы
                    form.find('input[type="submit"]').removeAttr('disabled');
                    return;
                },
                error: function(){
                    alert('error. try again');
                    return;
                }
            });
            return false;
        });
       
        /*****************************************************************/
       
        function validate_form(form){
       
            var result = true;
            var name = form.find('.name input');
            var phone = form.find('.phone input');
            var email = form.find('.email input');
           
            form.find('.form-input input').on({
                click: function () {
                    jQuery(this).removeClass('error');
                },
            });
           
            name.on('click');
            if( name.val() == '' ){
                name.addClass('error');
                result = false;
            }
           
            phone.on('click');
            if( phone.val() == '' ){
                phone.addClass('error');
                result = false;
            }
           
            email.on('click');
            if( !valid_email(email.val()) ){
                email.addClass('error');
                result = false;
            }
           
            return result;
        }
       
        function valid_email(email){
            var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
            return regex.test(email);
        }
       
        function valid_phone(phone){
            var regex = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/;
            return regex.test(phone);
        }
       
        function strip_tags(content){
            return content.replace(/(<([^>]+)>)/ig,"");
        }
    
    });
    Вот обработчика нет, чтоб отправлял на маил.
     
  2. bat

    bat

    Регистр.:
    24 сен 2009
    Сообщения:
    974
    Симпатии:
    276
    ну любой дефолтный же можно, зачем изобретать велосипед?
     
  3. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    PHP:
    if (isset($_POST['email'])) {
      
    $encoding='utf8';
    $to='your@email.ru';//здесь ваш адрес почты;
    $from=$_POST['email'];
    $text=@$_POST['reason'];
    $sender=@$_POST['name'];
    $subj=@$_POST['phone'];
      
    $headers 'From: =?'.$encoding.'?B?' base64_encode($sender) . '?= <' $from ">\n";
       
    $headers .= "MIME-Version: 1.0\n";
       
    $headers .= 'Message-ID: <' md5(uniqid(time())) . "@" $sender ">\n";
       
    $headers .= 'Date: ' gmdate('D, d M Y H:i:s T'time()) . "\n";
       
    $headers .= "Content-type: text/plain; charset={$encoding}\n";
       
    $headers .= "Content-transfer-encoding: 8bit\n";
       
    mail($to'=?'.$encoding.'?B?' base64_encode($subj). '?='$text$headers);
    }
     
  4. puk2006

    puk2006 Создатель

    Регистр.:
    15 апр 2014
    Сообщения:
    49
    Симпатии:
    9
    Обязательно base64_encode ? Для чего он?
    Не отправляет, добавил:
    Код:
    в начале
    <?php
    вконце
    ?>    
    
     
    Последнее редактирование: 29 окт 2014
  5. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Этот код — небольшое улучшение штатной функции, чтобы в теме письма не было «кракозябликов».
    :facepalm:
    Ну уж это сами могли бы додумать — я ж не привожу вам весь файл, обычно включают вывод сообщения через шаблон, например «Письмо отправлено»:)
    Сейчас отправляет?
     
    Последнее редактирование: 29 окт 2014
  6. Bravis

    Bravis Писатель

    Регистр.:
    17 окт 2014
    Сообщения:
    7
    Симпатии:
    9
    jquery библиотеку не забудьте подключить, потому что не будет работать :)
     
  7. ARMRESTLENG

    ARMRESTLENG Писатель

    Регистр.:
    4 ноя 2014
    Сообщения:
    1
    Симпатии:
    0
    1. Здравствуйте,подскажите пожалуйста скрипт формы обратной связи без обновления страницы на php без ajax,или как-небудь но в php главное что бы после отправки меня не выкидывало на главную,после отправки сообщения что бы я оставался на странице с формой,подскажите как мне это сделать???
     
    Последнее редактирование: 6 ноя 2014