Почему не происходит переадресация с форм

Почему не происходит переадресация с форм главной страницы maccoikt.beget.tech/ на страницу maccoikt.beget.tech/?q=good
Vladimir
20 июня 2023, 12:23
modx.pro
197
0

Комментарии: 15

Dan
Dan
20 июня 2023, 14:15
0
А по какой причине он должен происходить? Вы бы хоть показали, как редирект реализовываете, с помощью какого компонента сделана форма, если без компонента, то код обработчика. А то получается просто гадание на кофейной гуще.
    Vladimir
    20 июня 2023, 15:53
    0
    Но там же формы все видны -а раз есть форма то есть сабмит и файлы формы и action- просто можете сказать куда сейчас action идет — своим более опытным глазом — с форм главной страницы?
      Dan
      Dan
      20 июня 2023, 19:21
      +2
      Ну вижу я то, что и вы явно видите, что на mail.php идет отправка и что он возвращает status:true, но я не могу знать код обработчика mail.php и мне лень искать код js. Не проще ли вам все таки приложить код, нежели заставлять других его угадывать и искать?
        Vladimir
        20 июня 2023, 19:57
        0
        Хорощо приложу код. ТО есть вы хотите сказать что отправка форм идет нормально?? Не так ли?? Вот прикладываю код mail.php что лежал в корне? То есть код формы обрабатывается.
        <?php
        
        ini_set('error_reporting', E_ALL);
        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);
        
        /**@var modX $modx */
        define('MODX_API_MODE', true);
        require_once 'index.php';
        
        $modx->getService('error', 'error.modError');
        $modx->setLogLevel(modX::LOG_LEVEL_ERROR);
        $modx->setLogTarget('FILE');
        
        $to = 'webklweb@yandex.ru, sale@subelement.ru, macco@inbox.ru';//почта для заявок
        $email = 'noreply@site.ru';
        $sitename  = 'Элемент';
        $subject   = "Новая заявка с сайта \"$sitename\"";
        
        if($_FILES)
        {
          $filename = array();
          $i = 0;
          foreach ($_FILES["file"]["error"] as $key => $error) {
            if ($error == UPLOAD_ERR_OK) {
              $filename[$i][0] = $_FILES["file"]["tmp_name"][$key];
              $filename[$i][1] = $_FILES["file"]["name"][$key];
              $i++;
            }
          }
        }
        
        function table_tr($title,$value){
          if ($value=='') return false;
          return "
          <tr>
            <td width='200' height='40' bgcolor='#eee' style='padding: 5px;'>
              $title
            </td>
            <td width='300' style='padding: 5px;'>
              $value
            </td>
          </tr>";
        }
        function checkbox($array){
          $check = implode(", ", $array);
          $check = substr($check, 1);
          return $check;
        }
        
        $message="<table border='1'>";
        
        
        
        if (isset($_POST['form'])){
          $message .= table_tr('Форма',$_POST["form"]);
          $amo_mess = 'Форма: '.$_POST["form"].';'. PHP_EOL;
        }
        if (isset($_POST['name'])){
          $message .= table_tr('Имя',$_POST["name"]);
          $amo_mess .= 'Имя: '.$_POST["name"].'; '. PHP_EOL;
        }
        if (isset($_POST['phone'])){
          $message .= table_tr('Телефон',$_POST["phone"]);
          $amo_mess .= 'Телефон: '.$_POST["phone"].'; '. PHP_EOL;
        }
        if (isset($_POST['email'])){
          $message .= table_tr('Email',$_POST["email"]);
          $amo_mess .= 'Email: '.$_POST["email"].';'. PHP_EOL;
        }
        if (isset($_POST['volume'])){
          $message .= table_tr('Объем емкости',$_POST["volume"]);
          $amo_mess .= 'Объем емкости: '.$_POST["volume"].'; '. PHP_EOL;
        }
        if (isset($_POST['scope'])){
          $message .= table_tr('Сфера применения',$_POST["scope"]);
          $amo_mess .= 'Сфера применения: '.$_POST["scope"].'; '. PHP_EOL;
        }
        if (isset($_POST['drawing'])){
          $message .= table_tr('У меня есть проект/чертеж',$_POST["drawing"]);
          $amo_mess .= 'У меня есть проект/чертеж: '.$_POST["drawing"].'; '. PHP_EOL;
        }
        if (isset($_POST['question'])){
          $message .= table_tr('Вопрос',$_POST["question"]);
          $amo_mess .= 'Вопрос: '.$_POST["question"].'; '. PHP_EOL;
        }
        if (isset($_POST['question1'])){
          $message .= table_tr('Что планируете постороить',$_POST["question1"]);
          $amo_mess .= 'Что планируете постороить: '.$_POST["question1"].'; '. PHP_EOL;
        }
        if (isset($_POST['question2_1'])){
          $message .= table_tr('Ширина',$_POST["question2_1"]);
          $amo_mess .= 'Ширина: '.$_POST["question2_1"].'; '. PHP_EOL;
        }
        if (isset($_POST['question2_2'])){
          $message .= table_tr('Длина',$_POST["question2_1"]);
          $amo_mess .= 'Длина: '.$_POST["question2_2"].'; '. PHP_EOL;
        }
        if (isset($_POST['question2_3'])){
          $message .= table_tr('Высота',$_POST["question2_3"]);
          $amo_mess .= 'Высота: '.$_POST["question2_3"].'; '. PHP_EOL;
        }
        if (isset($_POST['question3'])){
          $message .= table_tr('Готов ли проект, эскиз',$_POST["question3"]);
          $amo_mess .= 'Готов ли проект, эскиз: '.$_POST["question3"].'; '. PHP_EOL;
        }
        if (isset($_POST['question4'])){
          $message .= table_tr('Сроки изготовления',$_POST["question4"]);
          $amo_mess .= 'Сроки изготовления: '.$_POST["question4"].'; '. PHP_EOL;
        }
        if (isset($_POST['question5'])){
          $message .= table_tr('Адрес',$_POST["question5"]);
          $amo_mess .= 'Адрес: '.$_POST["question5"].'; '. PHP_EOL;
        }
        
        if (isset($_POST['page'])){
          $message .= table_tr('Страница',$_POST["page"]);
          //$amo_mess = '<p>Страница: '.$_POST["page"].'; </p>';
        }
        
         if ($_SESSION['site_utm'] && is_array($_SESSION['site_utm'])) {
                  foreach ($_SESSION['site_utm'] as $key => $value) {
                    $message .= table_tr($key, $value);
                    $amo_mess .= ''.$key.': '.$value.'; '. PHP_EOL;
                  }
          }
        
        
        $message .="</table>";
        
        
        $responce['status'] = send_mail($to, $message, $email, $filename,$subject);
        
        
            
            
               //amo
        //ПРЕДОПРЕДЕЛЯЕМЫЕ ПЕРЕМЕННЫЕ
        $responsible_user_id = 2294887; //id ответственного по сделке, контакту, компании
        $lead_name = 'Заявка с сайта subelement.ru'; //Название добавляемой сделки
        $lead_status_id = '32775721';//'32681458'; //id этапа продаж, куда помещать сделку
        
        $contact_name = urldecode($_POST['name']); //Название добавляемого контакта
        $contact_phone = urldecode($_POST["phone"]); //Телефон контакта
        $contact_email = urldecode($_POST['email']); //Емейл контакта
        //АВТОРИЗАЦИЯ
        $user=array(
        	'USER_LOGIN'=>'ay@steelar-zmk.ru', #Ваш логин (электронная почта)
        	'USER_HASH'=>'b113966441f86ef98df904001ec3aa6629176f85' #Хэш для доступа к API (смотрите в профиле пользователя)
        );
        $subdomain='podarki';
        #Формируем ссылку для запроса
        $link='https://'.$subdomain.'.amocrm.ru/private/api/auth.php?type=json';
        $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
        #Устанавливаем необходимые опции для сеанса cURL
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
        curl_setopt($curl,CURLOPT_URL,$link);
        curl_setopt($curl,CURLOPT_POST,true);
        curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query($user));
        curl_setopt($curl,CURLOPT_HEADER,false);
        curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
        $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
        $code=curl_getinfo($curl,CURLINFO_HTTP_CODE); #Получим HTTP-код ответа сервера
        curl_close($curl);  #Завершаем сеанс cURL
        $Response=json_decode($out,true);
        //echo '<b>Авторизация:</b>'; echo '<pre>'; print_r($Response); echo '</pre>';
        //ПОЛУЧАЕМ ДАННЫЕ АККАУНТА
        $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/accounts/current'; #$subdomain уже объявляли выше
        $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
        #Устанавливаем необходимые опции для сеанса cURL
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
        curl_setopt($curl,CURLOPT_URL,$link);
        curl_setopt($curl,CURLOPT_HEADER,false);
        curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
        $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
        $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
        curl_close($curl);
        $Response=json_decode($out,true);
        $account=$Response['response']['account'];
        //echo '<b>Данные аккаунта:</b>'; echo '<pre>'; print_r($Response); echo '</pre>';
        //ПОЛУЧАЕМ СУЩЕСТВУЮЩИЕ ПОЛЯ
        $amoAllFields = $account['custom_fields']; //Все поля
        $amoConactsFields = $account['custom_fields']['contacts']; //Поля контактов
        //echo '<b>Поля из амо:</b>'; echo '<pre>'; print_r($amoConactsFields); echo '</pre>';
        //ФОРМИРУЕМ МАССИВ С ЗАПОЛНЕННЫМИ ПОЛЯМИ КОНТАКТА
        //Стандартные поля амо:
        $sFields = array_flip(array(
        		'PHONE', //Телефон. Варианты: WORK, WORKDD, MOB, FAX, HOME, OTHER
        		'EMAIL' //Email. Варианты: WORK, PRIV, OTHER
        	)
        );
        //Проставляем id этих полей из базы амо
        foreach($amoConactsFields as $afield) {
        	if(isset($sFields[$afield['code']])) {
        		$sFields[$afield['code']] = $afield['id'];
        	}
        }
        //ДОБАВЛЯЕМ СДЕЛКУ
        $leads['request']['leads']['add']=array(
        	array(
        		'name' => $lead_name,
        		'status_id' => $lead_status_id, //id статуса
        		'responsible_user_id' => $responsible_user_id, //id ответственного по сделке
        		//'date_create'=>1298904164, //optional
        		//'price'=>300000,
        		//'tags' => 'Important, USA', #Теги
        		//'custom_fields'=>array()
        		'custom_fields'=>array(
                  array(
                    'id' => 382333,
                    'values' => array(
                      array(
                        'value' => isset($_COOKIE['roistat_visit']) ? $_COOKIE['roistat_visit'] : null,
                      )
                    )
                  )
                )
        	)
        );
        $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/leads/set';
        $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
        #Устанавливаем необходимые опции для сеанса cURL
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
        curl_setopt($curl,CURLOPT_URL,$link);
        curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
        curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($leads));
        curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
        curl_setopt($curl,CURLOPT_HEADER,false);
        curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
        $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
        $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
        $Response=json_decode($out,true);
        //echo '<b>Новая сделка:</b>'; echo '<pre>'; print_r($Response); echo '</pre>';
        if(is_array($Response['response']['leads']['add']))
        	foreach($Response['response']['leads']['add'] as $lead) {
        		$lead_id = $lead["id"]; //id новой сделки
        		$responce['lead'] = $lead_id;
        	};
        //ДОБАВЛЯЕМ СДЕЛКУ - КОНЕЦ
        //ДОБАВЛЕНИЕ КОНТАКТА
        $contact = array(
        	'name' => $contact_name,
        	'linked_leads_id' => array($lead_id), //id сделки
        	'responsible_user_id' => $responsible_user_id, //id ответственного
        	'custom_fields'=>array(
        		array(
        			'id' => $sFields['PHONE'],
        			'values' => array(
        				array(
        					'value' => $contact_phone,
        					'enum' => 'MOB'
        				)
        			)
        		),
        		array(
        			'id' => $sFields['EMAIL'],
        			'values' => array(
        				array(
        					'value' => $contact_email,
        					'enum' => 'WORK'
        				)
        			)
        		)
        	)
        );
        $set['request']['contacts']['add'][]=$contact;
        #Формируем ссылку для запроса
        $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/set';
        $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
        #Устанавливаем необходимые опции для сеанса cURL
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
        curl_setopt($curl,CURLOPT_URL,$link);
        curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
        curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($set));
        curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
        curl_setopt($curl,CURLOPT_HEADER,false);
        curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
        $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
        $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
        //CheckCurlResponse($code);
        $Response=json_decode($out,true);
        //ДОБАВЛЕНИЕ КОНТАКТА - КОНЕЦ
        
        //ДОБАВЛЕНИЕ Примечания
        $note = array(
        	'element_id' => $lead_id,
                    'element_type' => '2',
                    'text' => $amo_mess,
                    'note_type' => '4',
                    'responsible_user_id' => $responsible_user_id,
                    'created_by' => $responsible_user_id,
        );
        $set['request']['notes']['add'][]=$note;
        #Формируем ссылку для запроса
        $link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/notes/set';
        $curl=curl_init(); #Сохраняем дескриптор сеанса cURL
        #Устанавливаем необходимые опции для сеанса cURL
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
        curl_setopt($curl,CURLOPT_URL,$link);
        curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
        curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($set));
        curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
        curl_setopt($curl,CURLOPT_HEADER,false);
        curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
        $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
        $code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
        //CheckCurlResponse($code);
        $Response=json_decode($out,true);
        //ДОБАВЛЕНИЕ Примечания - КОНЕЦ
        
        //amo
                
        
        
            echo json_encode($responce);
            exit;
        
        // Вспомогательная функция для отправки почтового сообщения с вложением
        function send_mail($to, $body, $email, $filename,$subject)
        {
          $boundary = "--".md5(uniqid(time())); // генерируем разделитель
          $headers = "From: ".$email."\r\n";   
          $headers .= "MIME-Version: 1.0\r\n";
          $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
          $multipart = "--".$boundary."\r\n";
          $multipart .= "Content-type: text/html; charset=\"utf-8\"\r\n";
          $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
        
          $body = $body."\r\n\r\n";
        
          $multipart .= $body;
          foreach ($filename as $key => $value) {
            $fp = fopen($value[0], "r"); 
            $content = fread($fp, filesize($value[0]));
            fclose($fp);
            $file .= "--".$boundary."\r\n";
            $file .= "Content-Type: application/octet-stream\r\n";
            $file .= "Content-Transfer-Encoding: base64\r\n";
            $file .= "Content-Disposition: attachment; filename=\"".$value[1]."\"\r\n\r\n";
            $file .= chunk_split(base64_encode($content))."\r\n";
          }
          $multipart .= $file."--".$boundary."--\r\n";
          
          $responce['status'] = mail($to, $subject, $multipart, $headers);
          return $responce['status'];
        }
        Ответте на два первых вопроса и как сделать чтобы после отправка форм шел редирект на maccoikt.beget.tech/?q=good, maccoikt.beget.tech/good
          Dan
          Dan
          20 июня 2023, 20:13
          0
          Да, отправка идет. Увидел во вкладке Network в DevTools. Так у вас нет редиректа в коде. Почитайте про modx sendredirect. И добавьте его в код в случае успешной отправки
            Vladimir
            20 июня 2023, 20:39
            0
            Хорошо я почитаю а куда именно вставлять код в mail.php или куда еще?
              Dan
              Dan
              20 июня 2023, 20:44
              0
              Да в mail.php. Прочитайте и поймете, в доке все есть
                Vladimir
                20 июня 2023, 23:50
                0
                пришлите доки ссылку
              Vladimir
              20 июня 2023, 20:43
              0
              Можете немного расширенно рассказать куда что вставлять?
      Vladimir
      20 июня 2023, 19:57
      0
      И во всех ли формах на Главной странице mail.php true.
        Vladimir
        20 июня 2023, 23:57
        0
        в какое место именно в моем случае в sendredirect
          Vladimir
          21 июня 2023, 00:26
          0
          в какое место mail.php именно в моем случае sendredirect в return $modx->sendRedirect('/?q=good', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently');
            Vladimir
            21 июня 2023, 00:26
            0
            cтавить — ответте точно
              Vladimir
              21 июня 2023, 00:49
              0
              и в каком виде?
                Vladimir
                21 июня 2023, 01:17
                0
                Вставил в нескольких местах — некуда не отправил- подскажите в моем случае в каком виде и в какое место вставить?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        15