За последние 24 часа нас посетили 74182 программиста и 10165 роботов. Сейчас ищут 2483 программиста ...

Форма обратной связи PHP возврат на страницу после отправки сообщения

Тема в разделе "PHP для новичков", создана пользователем Alex1979, 17 апр 2017.

  1. Alex1979

    Alex1979 Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    Помогите, пожалуйста!

    Есть одна форма в модальном окне.

    И вторая - просто открытая.

    PHP:
    1. <?php
    2.  
    3. include 'functions.php';
    4.  
    5. if (!empty($_POST)){
    6.  
    7.   $data['success'] = true;
    8.   $_POST  = multiDimensionalArrayMap('cleanEvilTags', $_POST);
    9.   $_POST  = multiDimensionalArrayMap('cleanData', $_POST);
    10.  
    11.   //your email adress
    12.   $emailTo ="000@mail.ru"; //"yourmail@yoursite.com";
    13.  
    14.   //from email adress
    15.   $emailFrom ="admin@e.ru"; //"contact@yoursite.com";
    16.  
    17.   //email subject
    18.   $emailSubject = "Сообщение с сайта ";
    19.  
    20.   $name = $_POST["name"];
    21.   $email = $_POST["email"];
    22.   $telephone = $_POST["telephone"];
    23.   $msg = $_POST["msg"];
    24.   if($name == "")
    25.    $data['success'] = false;
    26.  
    27. if (!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
    28.    $data['success'] = false;
    29.  
    30.   if($name == "")
    31.    $data['success'] = false;
    32.  
    33. if($data['success'] == true){
    34.  
    35. header("Location: /indexsite.html");
    36.            
    37.   $message = "Имя: $name<br>
    38.  e-mail: $email<br>
    39.  Телефон: $telephone<br>
    40.  Сообщение: $msg";
    41.  
    42.  
    43.   $headers = "MIME-Version: 1.0" . "\r\n";
    44.   $headers .= "Content-type:text/html; charset=utf-8" . "\r\n";
    45.   $headers .= "From: <$emailFrom>" . "\r\n";
    46.   mail($emailTo, $emailSubject, $message, $headers);
    47.  
    48.   $data['success'] = true;
    49.   echo json_encode($data);
    50. }
    51. }

    Обе формы работают..НО
    После отправки не закрываются просто так, а происходит перекидывание на файл php в новом окне, а только потом я прописал возврат через n-секунд.

    Очень замучился!
    Подскажите, умные люди - первая (модальное окно), нужно чтобы после нажатия на кнопку окно просто закрывалось и данные отправлялись (а не перекидывало с подтверждением).

    Вторая - чтобы человек после нажатия на кнопку оставался на странице.
     
  2. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    849
    Симпатии:
    199
    Адрес:
    Санкт-Петербург
  3. Alex1979

    Alex1979 Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    В смысле - не на этом форуме?
     
  4. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    849
    Симпатии:
    199
    Адрес:
    Санкт-Петербург
    в смысле про ajax прочитай, это то, что тебе нужно)
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    вот эта строка перекидывает на другую страницу.
     
  6. Alex1979

    Alex1979 Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    PHP:
    1. <?php
    2. include 'functions.php';
    3.  
    4. if (!empty($_POST)){
    5.  
    6.   $data['success'] = true;
    7.   $_POST  = multiDimensionalArrayMap('cleanEvilTags', $_POST);
    8.   $_POST  = multiDimensionalArrayMap('cleanData', $_POST);
    9.  
    10.   //your email adress
    11.   $emailTo ="а@mail.ru"; //"yourmail@yoursite.com";
    12.  
    13.   //from email adress
    14.   $emailFrom ="admin@d.ru"; //"contact@yoursite.com";
    15.  
    16.   //email subject
    17.   $emailSubject = "Сообщение с сайта d";
    18.  
    19.   $name = $_POST["name"];
    20.   $telephone = $_POST["telephone"];
    21.   if($name == "")
    22.    $data['success'] = false;
    23.  
    24. if($data['success'] == true){
    25.      header("Location:/indexsite.html");
    26.  
    27.   $message = "Имя: $name<br>
    28.  Телефон: $telephone";
    29.  
    30.   $headers = "MIME-Version: 1.0" . "\r\n";
    31.   $headers .= "Content-type:text/html; charset=utf-8" . "\r\n";
    32.   $headers .= "From: <$emailFrom>" . "\r\n";
    33.   mail($emailTo, $emailSubject, $message, $headers);
    34.  
    35.   $data['success'] = true;
    36.   echo json_encode($data);
    37. }
    38. }
    Вот эта строка
    header("Location:/indexsite.html");

    должна вроде бы после отправки формы сразу перекидывать на главную страницу сайта. Но кидает в пустое окно с надписью


    Warning: Cannot modify header information - headers already sent by (output started at Z:\home\da.ru\www\php\application.php:1) in Z:\home\da.ru\www\php\application.php on line 25
    {"success":true}

    Письмо приходит, а страница так и висит с этой надписью.
    Во второй форме на этой же странице всё работает - секунду ожидания и автопереброс с отправкой данных.
    Полностью уже из неё скопировал код...НО...
     
  7. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    849
    Симпатии:
    199
    Адрес:
    Санкт-Петербург
    Нелепый вопрос, конечно, а ты ошибку то перевести на русский пробовал?)
     
  8. Alex1979

    Alex1979 Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    А в этом же скрипте можно что-то дописать, чтобы выводилось сообщение об успешной отправке?
    На главной странице сайта поверх всех окон?
    --- Добавлено ---
    Блин, сообщения новые неудобно отправлять на форум.


    Без BOM сохранил - заработало. Тупица я
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    + можно её еще и загуглить и в течении 1 минуты понять проблему, а может быть даже уже её исправить.
     
  10. Alex1979

    Alex1979 Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    Ну, звиняйте - я по другому направлению работаю, в сторону PHP мне только со словарём.
    Кто-то понимает, что за BOM и где его брать, а кого-то как собаку - мордой потыкать нужно.


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

    Сейчас копаюсь с echo, но не пойму - куда его вставлять.
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    изменить расширение с html на php, затем при перенаправлении выполнить следующий секретный и пока ни кому не известный финт:
    PHP:
    1. header("Location:/indexsite.php?send=1");
    А на странице indexsite.php в нужном месте:
    PHP:
    1. if( !empty( $_GET['send'] ) ) { echo "Спасибо, бла бла бла !" }
     
  12. Alex1979

    Alex1979 Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    а вставлять так на странице indexsite.php в нужном месте?

    PHP:
    1. <?php if( !empty( $_GET['send'] ) )
    2. echo "Спасибо, бла бла бла !"
    3. ?>
    оно просто текстом выводится сразу и висит независимо от отправки сообщения
     
    #12 Alex1979, 19 апр 2017
    Последнее редактирование модератором: 20 апр 2017
  13. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    я суть идеи передал. Дальше сам. Мне лень писать статьи о том, как всё работает.
    --- Добавлено ---
    в сотый раз...
     
  14. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Еперный театр ! Ребят мне вот интерестно вы сам разобраться пробовали в таких элементарных вещех?
    Автор ты искал в интернете что такое редирект и как им пользоваться? Вот только честно
     
  15. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Alex1979
    Автор тебе можно сделать так, вместо:
    PHP:
    1. if($data['success'] == true){
    2. header("Location:/indexsite.html");
    Подставить этот код:
    PHP:
    1. if($data['success'] == true){
    2. echo "<script>document.location.href='/indexsite.html';</script>";
    И тебя перенаправит куда ты хочешь, мини скрипт тебе в помощь :D
    Мне когда то подсказали, а я тебе советую!

    Кстати на счет твоей ошибки, ты отправляешь заголовки которые уже были отправлены. В гугл вбил и перевел :D