Как использовать перенаправление заголовка PHP после отправки данных REST? - PullRequest
1 голос
/ 19 марта 2020

Прежде всего, я хотел бы поблагодарить всех людей, участвующих в Stackoverflow, я всегда нахожу решения на этом сайте, но у меня никогда не было возможности помочь кому-то еще.

В настоящее время я работаю над форма, которая передает данные через REST API в нашу CRM, и все работает как надо, за исключением перенаправления.

Форма, которая разработана с помощью адаптации следующего кода, работает правильно: https://codepen.io/SethCalkins/pen/JoXymK:

<form id="theForm" class="simform" autocomplete="off" method="post" action="">
                    <div class="simform-inner">
                        <ol class="questions">
                            <li>
                                <span class="genericform"><label for="first_name">Name:</label></span>
                                <input id="first_name" name="first_name" type="text" pattern="{3,}" required autofocus="true" autocomplete="off"/>
                            </li>
                            <li>
                                <span><label for="last_name">Surname:</label></span>
                                <input id="last_name" name="last_name" type="text" pattern="{3,}" required/>
                            </li>
                            <li>
                                <span><label for="phone">Phone:</label></span>
                                <input id="phone" name="phone" type="tel" data-validate="phone" inputmode="numeric" required/>
                            </li>
                            <li>
                                <span><label for="email">Email:</label></span>
                                <input id="email" name="email" type="email" data-validate="email" required/>
                            </li>

                        </ol><!-- /questions -->

                        <div class="controls">
                            <button class="next"><i class="svg-inline--fa fa-arrow-right></i></button>
                            <div class="progress"></div>
                            <span class="number">
                                <span class="number-current"></span>
                                <span class="number-total"></span>
                            </span>
                            <span class="error-message"></span> 
                        </div><!-- / controls -->
                    </div><!-- /simform-inner -->
                    <span class="final-message generic-popup-form-fade"><button class="popup-form-button-icon" type="submit" value="send">Submit</button></span>
                </form>  
                </div>    
        <script>
// On form submit event

            var theForm = document.getElementById( 'theForm' );

            new stepsForm( theForm, {
                onSubmit : function( form ) {
                    // hide form
                    classie.addClass( theForm.querySelector( '.simform-inner' ), 'hide' );

                    var messageEl = theForm.querySelector( '.final-message' );
                    $(".submit").css({"display":"inline"});
                    $(".uk-heading-medium").css({"text-align":"center"});
                    classie.addClass( messageEl, 'show' );
                }
            } );
        </script>

PHP, использованный для отправки записи в файл журнала и отправки запроса, заключается в следующем. Он пишет журнал правильно, и лидер приходит в CRM aswel, просто перенаправление не работает:

<?
/**
 * Write data to log file.
 *
 * @param mixed $data
 * @param string $title
 *
 * @return bool
 */
function writeToLog($data, $title = '') {
 $log = "\n------------------------\n";
 $log .= date("Y.m.d G:i:s") . "\n";
 $log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n";
 $log .= print_r($data, 1);
 $log .= "\n------------------------\n";
 file_put_contents(getcwd() . '/logfile.log', $log, FILE_APPEND);
 return true;
}

$defaults = array('first_name' => '', 'last_name' => '', 'phone' => '', 'email' => '');

if (array_key_exists('saved', $_REQUEST)) {
 $defaults = $_REQUEST;
 writeToLog($_REQUEST, 'webform');

 $queryUrl = 'https://queryurl/rest/';
 $queryData = http_build_query(array(
 'fields' => array(
 "TITLE" => $_REQUEST['first_name'].' '.$_REQUEST['last_name'],
 "NAME" => $_REQUEST['first_name'],
 "LAST_NAME" => $_REQUEST['last_name'],
 "STATUS_ID" => "NEW",
 "PHONE" => array(array("VALUE" => $_REQUEST['phone'], "VALUE_TYPE" => "WORK" )),
 "EMAIL" => array(array("VALUE" => $_REQUEST['email'], "VALUE_TYPE" => "WORK" )),
 ),
 'params' => array("REGISTER_SONET_EVENT" => "Y")
 ));

 $curl = curl_init();
 curl_setopt_array($curl, array(
 CURLOPT_SSL_VERIFYPEER => 0,
 CURLOPT_POST => 1,
 CURLOPT_HEADER => 0,
 CURLOPT_RETURNTRANSFER => 1,
 CURLOPT_URL => $queryUrl,
 CURLOPT_POSTFIELDS => $queryData,
 ));

 $result = curl_exec($curl);
 curl_close($curl);

 $result = json_decode($result, 1);
 writeToLog($result, 'webform result');

if ($result) {
 header( 'Location: https://www.REDIRECTURL.com/thank-you/');
}


 if (array_key_exists('error', $result)) echo "Error al enviar la solicitud: ".$result['error_description']."<br/>";
}

?>

Я пытался просто добавить заголовок, например:

 header( 'Location: https://www.REDIRECTURL.com/thank-you/');

Я искал пробел после "?>", И в коде, похоже, нет ошибок.

Не уверен, что мне не хватает ..

1 Ответ

0 голосов
/ 27 марта 2020

Для тех, кто интересуется, я решил это, переместив перенаправление заголовка ('') и весь другой код php в заголовок, а не внизу страницы (нижний колонтитул).

Работает как надо сейчас.

...