• Передача данных из массива $_SESSION в обработчик формы, через AJAX на одной странице?

    alexvdv
    @alexvdv Автор вопроса
    В чем проблема обращаться к данным сессии в обработчике "любой формы"? При чем здесь AJAX?

    Проблема в том, что тогда придется : 1. Делать скрытые инпуты в каждой форме, получать в них значения из сессии и передавать пост-ом в PHP- обработчик формы, так :

    url: '/assets/modalform/mail.php

    либо в главный файл, подключать PHP-обработчик так: require_once('assets/modalform/mail.php');

    Иначе данные не получить из сессии, правильно?
  • Передача данных из массива $_SESSION в обработчик формы, через AJAX на одной странице?

    alexvdv
    @alexvdv Автор вопроса
    Alexander Pushkarev, хочу в сессию записывать все, потом может еще в БД буду отправлять
  • Передача данных из массива $_SESSION в обработчик формы, через AJAX на одной странице?

    alexvdv
    @alexvdv Автор вопроса
    Stalker_RED,

    Я хочу:

    Есть адрес такого вида: http:/site.ru/?utm_source=google&utm_medium=cpc&utm_campaign=kampaniya-gruppa&utm_content

    1. Собрать все параметры
    2. Записать их в сессию, так как пользователь может еще лазить по сайту
    3. Хранить сессию скажем 12 часов
    4. Передавать эти данные с любой из форм на сайте
    --------------------------------------------------
    Что я делаю:

    1. В файле index.php , проверяю наличие GET-параметров и записываю в сессию:

    <?php
    session_start();
    
        if (isset($_GET['ref'])) {
            if (!empty($_GET['ref'])){
                $ref = strip_tags($_GET['ref']);
                $_SESSION['ref'] = $ref;
            }
        }
        if (isset($_GET['utm_source'])) {
            if (!empty($_GET['utm_source'])){
                $utm_source = strip_tags($_GET['utm_source']);
                $_SESSION['utm_source'] = $utm_source;
            }
        }
        if (isset($_GET['utm_medium'])) {
            if (!empty($_GET['utm_medium'])){
                $utm_medium = strip_tags($_GET['utm_medium']);
                $_SESSION['utm_medium'] = $utm_medium;
            }
        }
        if (isset($_GET['utm_campaign'])) {
            if (!empty($_GET['utm_campaign'])){
                $utm_campaign = strip_tags($_GET['utm_campaign']);
                $_SESSION['utm_campaign'] = $utm_campaign;
            }
        }
        if (isset($_GET['utm_term'])) {
            if (!empty($_GET['utm_term'])){
                $utm_term = strip_tags($_GET['utm_term']);
                $_SESSION['utm_term'] = $utm_term;
            }
        }
        if (isset($_GET['utm_content'])) {
            if (!empty($_GET['utm_content'])){
                $utm_content = strip_tags($_GET['utm_content']);
                $_SESSION['utm_content'] = $utm_content;
            }
        }
        if (isset($_GET['type'])) {
            if (!empty($_GET['type'])){
                $type = strip_tags($_GET['type']);
                $_SESSION['type'] = $type;
            }
        }
        if (isset($_GET['source'])) {
            if (!empty($_GET['source'])){
                $source = strip_tags($_GET['source']);
                $_SESSION['source'] = $source;
            }
        }
        if (isset($_GET['block'])) {
            if (!empty($_GET['block'])){
                $block = strip_tags($_GET['block']);
                $_SESSION['block'] = $block;
            }
        }
        if (isset($_GET['position'])) {
            if (!empty($_GET['position'])){
                $position = strip_tags($_GET['position']);
                $_SESSION['position'] = $position;
            }
        }
        if (isset($_GET['keyword'])) {
            if (!empty($_GET['keyword'])){
                $keyword = strip_tags($_GET['keyword']);
                $_SESSION['keyword'] = $keyword;
            }
        }
    
    require_once('assets/Mobile_Detect.php');  // Подключаем скрипт Mobile_Detect.php
    
    $detect = new Mobile_Detect; // Инициализируем копию класса
    
    // Исключаем планшеты
    if( $detect->isMobile() && !$detect->isTablet() ){
        include "index-mobile.tpl";
    } else {
        include "index-desktop.tpl";
    }
    require_once('assets/modalform/mail.php');  /* Подключил php-обработчик так, потому что в первом варианте не виден массив сессий */
    ?>


    AJAX обработчик выглядит так:
    $(document).ready(function () {
        $("form").submit(function () {
            // Получение ID формы
            var formID = $(this).attr('id');
            // Добавление решётки к имени ID
            var formNm = $('#' + formID);
            var message = $(formNm).find(".msgs"); // Ищет класс .msgs в текущей форме  и записываем в переменную
            var formTitle = $(formNm).find(".formTitle"); // Ищет класс .formtitle в текущей форме и записываем в переменную
            $.ajax({
                type: "POST",
              //  url: '/assets/modalform/mail.php',
               url: '/',
                data: formNm.serialize(),
                success: function (data) {
                    // Вывод сообщения об успешной отправке
                    message.html(data);
                    formTitle.css("display","none");
                    setTimeout(function(){
                        //$(formNm).css("display","block");
                        $('.formTitle').css("display","block");
                        $('.msgs').html('');
                        $('input').not(':input[type=submit], :input[type=hidden]').val('');
                        $('textarea').not(':input[type=submit], :input[type=hidden]').val('');
                    }, 3000);
                    // $('.remodal-close').click();
                },
                error: function (jqXHR, text, error) {
                    // Вывод сообщения об ошибке отправки
                    message.html(error);
                    formTitle.css("display","none");
                    // $(formNm).css("display","none");
                    setTimeout(function(){
                        //$(formNm).css("display","block");
                        $('.formTitle').css("display","block");
                        $('.msgs').html('');
    
                    }, 3000);
                }
            });
            return false;
        });
        //для стилей формы
        var $input = $('.form-fieldset > input');
        $input.blur(function (e) {
            $(this).toggleClass('filled', !!$(this).val());
        });
        $(".linkButton").click(function() {
            $( "input[name*='formInfo']" ).val($(this).attr( "title" ));
        });
    });


    PHP -обработчик так:

    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (!empty($_POST['name']) && !empty($_POST['phone']) && isset($_POST['policy'])){
    
          $data = array();
    
            if (isset($_POST['name'])) {
              if (!empty($_POST['name'])){
                $name = strip_tags($_POST['name']);
                  $data['name'] = "Имя отправителя: $name";
              }
            }
            if (isset($_POST['phone'])) {
              if (!empty($_POST['phone'])){
                $phone = strip_tags($_POST['phone']);
                  $data['phone'] = "Телефон/email: $phone";
              }
            }
            if (isset($_POST['email'])) {
              if (!empty($_POST['email'])){
                $email = strip_tags($_POST['email']);
                  $data['email'] = "Email: $email";
              }
            }
            if (isset($_POST['formInfo'])) {
              if (!empty($_POST['formInfo'])){
                $formInfo = strip_tags($_POST['formInfo']);
                  $data['formInfo'] = "Название формы: $formInfo";
              }
            }
            if (isset($_POST['website'])) {
              if (!empty($_POST['website'])){
                  $website = strip_tags($_POST['website']);
                  $data['website'] = "Адресс сайта: $website";
              }
            }
            if (isset($_POST['budget'])) {
              if (!empty($_POST['budget'])){
                  $budget = strip_tags($_POST['budget']);
                  $data['budget'] = "Бюджет проекта: $budget";
              }
            }
            if (isset($_POST['policy'])) {
              if (!empty($_POST['policy'])){
                  $policy = strip_tags($_POST['policy']);
                  $data['policy'] = "Персональные данные: $policy";
              }
            }
            if (isset($_POST['message'])) {
            if (!empty($_POST['message'])){
                  $message = strip_tags($_POST['message']);
                  $data['message'] = "Сообщение: $message";
              }
            }
    
            // Внедряем аналитику
    
          if (isset($_SESSION['ref'])) {
              if (!empty($_SESSION['ref'])){
                  $ref = $_SESSION['ref'];
                  $data['ref'] = "Рефферальный хвост: $ref";
              }
          }
          if (isset($_SESSION['utm_source'])) {
              if (!empty($_SESSION['utm_source'])){
                  $utm_source = $_SESSION['utm_source'];
                  $data['utm_source'] = "Источник рекламы: $utm_source";
              }
          }
          if (isset($_SESSION['utm_medium'])) {
              if (!empty($_SESSION['utm_medium'])){
                  $utm_medium = $_SESSION['utm_medium'];
                  $data['utm_medium'] = "Тип кампании(СРМ или СРС): $utm_medium";
              }
          }
          if (isset($_SESSION['utm_campaign'])) {
              if (!empty($_SESSION['utm_campaign'])){
                  $utm_campaign = $_SESSION['utm_campaign'];
                  $data['utm_campaign'] = "Название компании: $utm_campaign";
              }
          }
          if (isset($_SESSION['utm_term'])) {
              if (!empty($_SESSION['utm_term'])){
                  $utm_term = $_SESSION['utm_term'];
                  $data['utm_term'] = "Ключевое слово: $utm_term";
              }
          }
          if (isset($_SESSION['utm_content'])) {
              if (!empty($_SESSION['utm_content'])){
                  $utm_content = $_SESSION['utm_content'];
                  $data['utm_content'] = "Содержание: $utm_content";
              }
          }
    // тут тоже код, который не влез в коммент
    
    
    
       
          foreach($data as $key) {
              $datatxt .= "<p>".$key."</p>";
          }
    // тут код который не влез в коммент
    
        $message = "
                <html>
                <head></head>
                <body>
                $datatxt
                </body>
                </html>
            ";
    
        $send = mail ($to, $subject, $message, $headers);
    
          if ($send){
              echo '<p class="good">Сообщение успешно отправлено!</p>';
            }
      } else {
            echo '<p class="fail">Ошибка. Вы заполнили не все обязательные поля!</p>';
          }
    } else {
      header ("Location: /");
    }
    
    ?>


    но тогда не видны данные из массива $_SESSION и это понятно.
    с чего вдруг?


    В таком варианте, php- обработчик не включен в файл, где создается сессия :
    url: '/assets/modalform/mail.php'
  • Отправка писем PHP, что я делаю не так?

    alexvdv
    @alexvdv Автор вопроса
    Антон, спасибо, об этом уже думал, а то как сейчас приходят пустые поля, а так только те, что будут заполнены.
  • Отправка писем PHP, что я делаю не так?

    alexvdv
    @alexvdv Автор вопроса
    Антон, спасибо за помощь, еще интересует вот этот момент:

    error: function (jqXHR, text, error) {
                    // Вывод сообщения об ошибке отправки
                    message.html(error);
                    formTitle.css("display","none");
                    // $(formNm).css("display","none");
                    setTimeout(function(){
                        //$(formNm).css("display","block");
                        $('.formTitle').css("display","block");
                        $('.msgs').html('');
                    //    $('input').not(':input[type=submit], :input[type=hidden]').val('');
                    }, 3000);
                }


    Хочу, чтобы при ошибке отправки запроса, не очищались поля input и textarea, но получается так, что поля все равно очищаются, хоть и ошибка, что не так?
  • Отправка писем PHP, что я делаю не так?

    alexvdv
    @alexvdv Автор вопроса
    Антон, Если я данные буду передавать через AJAX в класс так:

    $(document).ready(function () {
        $("form").submit(function () {
            // Получение ID формы
            var formID = $(this).attr('id');
            // Добавление решётки к имени ID
            var formNm = $('#' + formID);
            var message = $(formNm).find(".msgs"); // Ищет класс .msgs в текущей форме  и записываем в переменную
            var formTitle = $(formNm).find(".formTitle"); // Ищет класс .formtitle в текущей форме и записываем в переменную
            $.ajax({
                type: "POST",
                //url: 'modalform/mail.php',
                url: 'mail.php',
                data: formNm.serialize(),
                success: function (data) {
                    // Вывод сообщения об успешной отправке
                    message.html(data);
                    formTitle.css("display","none");
                    setTimeout(function(){
                        //$(formNm).css("display","block");
                        $('.formTitle').css("display","block");
                        $('.msgs').html('');
                        $('input').not(':input[type=submit], :input[type=hidden]').val('');
                    }, 3000);
                },
                error: function (jqXHR, text, error) {
                    // Вывод сообщения об ошибке отправки
                    message.html(error);
                    formTitle.css("display","none");
                    // $(formNm).css("display","none");
                    setTimeout(function(){
                        //$(formNm).css("display","block");
                        $('.formTitle').css("display","block");
                        $('.msgs').html('');
                        $('input').not(':input[type=submit], :input[type=hidden]').val('');
                    }, 3000);
                }
            });
            return false;
        });
        //для стилей формы
        var $input = $('.form-fieldset > input');
        $input.blur(function (e) {
            $(this).toggleClass('filled', !!$(this).val());
        });
    });


    а класс будет такого вида:

    <?php
    
    class Mail {
    
        public $name = null;
        public $phone = null;
        public $email = null;
        public $phone_email = null;
        public $website = null;
        public $message = null;
        public $formInfo = null;
    
        public function __construct(){
    
                if(!empty($_POST)) {
    
                $this->name = strip_tags($_POST['name']);
                $this->phone = strip_tags($_POST['phone']);
                $this->email =  strip_tags($_POST['email']);
                $this->phone_email = strip_tags($_POST['phone_email']);
                $this->website = strip_tags($_POST['website']);
                $this->message = strip_tags($_POST['message']);
                $this->formInfo = strip_tags($_POST['$formInfo']);
    
            }
    
        }
    
    
        public function sendmail () {
    
            $to = "seotapki@yandex.ru"; /*Укажите адрес, на который должно приходить письмо*/
            $sendfrom = "info@site.ru"; /*Укажите адрес, с которого будет приходить письмо */
            $headers  = "From: " . strip_tags($sendfrom) . "\r\n";
            $headers .= "Reply-To: ". strip_tags($sendfrom) . "\r\n";
            $headers .= "MIME-Version: 1.0\r\n";
            $headers .= "Content-Type: text/html;charset=utf-8 \r\n";
            $headers .= "Content-Transfer-Encoding: 8bit \r\n";
            $subject = "$this->formInfo";
            $message = "$this->name
                        $this->phone
                        $this->email
                        $this->phone_email
                        $this->formInfo
                        $this->message
                        $this->website
                        ";
    
            $send = mail ($to, $subject, $message, $headers);
    
            if ($send){
                echo '<p class="fail">Сообщение успешно отправлено!</p>';
            } else {
                echo '<p class="fail">Ошибка. Вы заполнили не все обязательные поля!</p>';
    
            }
    
        }
    
        public function sendcrm () {
            // отправка в CRM
        }
        public function sendtelegram () {
            // отправка в Telegram
        }
    
    
    
    }
    
    if(!empty($_POST)) {
        $startmail = new Mail();
        $startmail->sendmail();
        $startmail->sendsendcrm();
        $startmail->sendtelegram();
    
    }


    *И вообще, зачем Вам класс тут?

    Хочу, чтобы был один универсальный обработчик для всех форм , который мог отправлять данные куда необходимо, просто вызовом метода, при том, что количество полей в CRM, телеграмм или на почту, может быть разным.
  • Передача $_POST и $_FILES одновременно в метод?

    alexvdv
    @alexvdv Автор вопроса
    Ну у меня оказывается и так работает уже, просто не заметил сразу, это уже в моделе:

    $path = UPLOADS.'services'.DS;
            if (!@copy($_FILES['picture']['tmp_name'], $path . $_FILES['picture']['name'])){
                $picture = $this->db->escape($_FILES['picture']['name']);
            }
           // echo $path;
            $picture = $this->db->escape($_FILES['picture']['name']);
  • Можно ли сделать так и на сколько это будет правильно???

    alexvdv
    @alexvdv Автор вопроса
    Алексей Скобкин, Речь идет о том, чтобы хранить всю разметку HTML + некоторые php конструкции проверки мобильных устройств + условия в зависимости от GET параметров в базе данных, а при обращении к главной сайта и вызове метода index, собирать эти все блоки в шаблон landing page, как это все можно реализовать , чтобы шаблон лендинга можно было собирать из админки из блоков, а не лазить в код, можно и в код конечно, но хочется удобства и редактирования с админки
  • Можно ли сделать так и на сколько это будет правильно???

    alexvdv
    @alexvdv Автор вопроса
    Как тогда редактировать, добавлять и удалять блоки LP из админки?