Произошла ошибка при отправке формы php

НА лендосе есть форма

<form action="handler.php" method="POST"  class="send_to_crm">
                        <input type="text" name="name" placeholder="Ваше Имя" required>
                        <input type="email" name="email" placeholder="Ваша e-mail" required>
                        <input type="tel" name="phone" placeholder="Ваше номер телефона" id="phone" required> 
                        <input type="submit" value="Отправить">
</form>

файл amoform.php

<?php

# Create a link for request
$link='https://forms.amocrm.ru/queue/add';

    $fields=array(
        'fields[name_1]'=> urlencode($_POST['name']),
        'fields[164585_1][330119]'=> urlencode($_POST['email']),
        'fields[164583_1][330107]'=> urlencode($_POST['phone']),
        'fields[217871_2]'=> urlencode($_POST['utm_medium']),
        'fields[217869_2]'=> urlencode($_POST['utm_source']),
        'fields[217873_2]'=> urlencode($_POST['utm_campaign']),
        'fields[217875_2]'=> urlencode($_POST['utm_term']),
        'fields[217877_2]'=> urlencode($_POST['overseer']),
        'form_id'=> 354166,
        'hash' => 'f1d4eb67587a61f75d4ee5b30b245b4a'
    );

//url-ify the data for the POST
$fields_string = '';
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$curl = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($curl,CURLOPT_URL, $link);
curl_setopt($curl,CURLOPT_POST, count($fields));
curl_setopt($curl,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$out = curl_exec($curl);

//close connection
curl_close($curl);

//var_dump($out);
?>

файл handler.php

<?php

$root=__DIR__.DIRECTORY_SEPARATOR;
require $root.'amoform.php';
header("Location: АДРЕС_САЙТА/thank-you.htm"); 
exit();
?>

Вместо переадресации на страницу благодарности выводит такую ошибку:

{«error_code»:400,»msg»:»invalid_data»}
Warning: Cannot modify header information — headers already sent by (output started at /АДРЕС_САЙТА/amoform.php:33) in / /АДРЕС_САЙТА/handler.php on line 5

I created new inquiry form for my website. But it’s giving the following error message.

Error
Sorry there was an error sending your form.
mail:Could not instantiate mail function.

Form HTML:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>PHP Contact Form Script With Validation - reusable form</title>
        <!-- Latest compiled and minified CSS -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
        <!-- Optional theme -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <link rel="stylesheet" href="form.css" >
        <script src="form.js"></script>
    </head>
    <body >
        <div class="container">
            <div class="row">
                <div class="col-md-6 col-md-offset-3">
                    <h2>Contact Us</h2> 
                    <p> Send us your message and we will get back to you as soon as possible </p>
                    <form role="form" method="post" id="reused_form">
                        <div class="row">
                            <div class="col-sm-6 form-group">
                                <label for="name"> First Name:</label>
                                <input type="text" class="form-control" id="firstname" name="firstname" maxlength="50">
                            </div>
                            <div class="col-sm-6 form-group">
                                <label for="name"> Last Name:</label>
                                <input type="text" class="form-control" id="lastname" name="lastname" maxlength="50">
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-6 form-group">
                                <label for="email"> Email:</label>
                                <input type="text" class="form-control" id="email" name="email" maxlength="50">
                            </div>
                            <div class="col-sm-6 form-group">
                                <label for="email"> Phone:</label>
                                <input type="tel" class="form-control" id="phone" name="phone" required maxlength="50">
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-12 form-group">
                                <label for="name"> Message:</label>
                                <textarea class="form-control" type="textarea" id="message" name="message" placeholder="Your Message Here" maxlength="6000" rows="7"></textarea>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-12 form-group">
                                <button type="submit" class="btn btn-lg btn-success btn-block" id="btnContactUs">Post It! </button>
                            </div>
                        </div>
                    </form>
                    <div id="success_message" style="width:100%; height:100%; display:none; "> <h3>Sent your message successfully!</h3> </div>
                    <div id="error_message" style="width:100%; height:100%; display:none; "> <h3>Error</h3> Sorry there was an error sending your form. </div>
                </div>
            </div>
        </div>
    </body>
</html>

Handler.php:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
/*
Tested working with PHP5.4 and above (including PHP 7 )

 */
require_once './vendor/autoload.php';

use FormGuide\Handlx\FormHandler;


$pp = new FormHandler(); 

$validator = $pp->getValidator();
$validator->fields(['firstname','lastname', 'email','phone'])->areRequired()->maxLength(50);
$validator->field('email')->isEmail();
$validator->field('message')->maxLength(6000);




$pp->sendEmailTo('name@mail.com'); // ← Your email here

echo $pp->process($_POST);

asked Oct 7, 2018 at 8:13

Mohammed's user avatar

3

You are not defining an action for the form.

<form role="form" method="post" id="reused_form" action="Handler.php">
    <!-- html goes here -->
</form>

answered Oct 7, 2018 at 15:50

Daniel Phillips's user avatar

0

maks_7

4 / 4 / 3

Регистрация: 14.10.2014

Сообщений: 321

1

Не работает отправка формы

09.05.2016, 14:09. Показов 3828. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

С праздником, уважаемые форумчане!
У меня есть файл отправки формы на php. Я его раньше уже использовал и он прекрасно работал. Но сейчас что-то пошло не так.

Вот форма:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<table style="margin:0 auto">
           <tr><td>
                 <form method="post" name="letter" action="handler.php">        
                    <div class="input-group "  style="margin-right:30px;">
                       <span class="input-group-addon text-form">Your name<span style="color:red"> *</span></span>       
                       <input name="name" type="text" class="form-control yourname" >             
                 </div>
               </td>
               <td> 
                  <div class="input-group ">
                       <span class="input-group-addon text-form">Your Email<span style="color:red"> *</span></span>      
                       <input name="email" type="email" class="form-control yourmail">            
                    </div>
                 </form>
              </td> 
           </tr>
           <tr>
              <td colspan="2">
                  <div style="margin-top:20px; width:100%;" class="input-group">
                       <span class="input-group-addon  textarea">Your Message<span style="color:red"> *</span></span>                     
                       <textarea name="text" rows="10" class="form-control message"></textarea>                                                    
                  </div>
              </td>
           </tr>
           <tr>
              <td colspan="2">
                <input type="submit" value="SEND MESSAGE" class="send"> 
              </td>
           </tr>
        </table>

И вот файл отправки формы:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
if( isset($_POST['name'],$_POST['email'],$_POST['text']) ) {
 $name = trim($_POST['name']);
 $email = trim($_POST['email']);
 $text = trim($_POST['text']);
  if(empty($name) || empty($email) || empty($text)) { //если что то не ввели
   echo 'Вы заполнили не все поля!';
  }
  else { //все поля заполнены, отправляем
   $mailto = 'k33@ya.ru';
   $subject = 'Тема письма';
//формируем текст сообщения
   $message  = 'Сообщение от пользователя <b>'.$name.'</b>';
   $message .= 'E-mail пользователя: <a href="mailto:' . $email . '">' . $email . '</a><br />';
   $message .= 'Текст сообщения:<br />' . $text;
//формируем заголовки (кодировку только, остальное сами добавите по желанию)
   $headers = 'Content-type: text/html; charset=utf-8';
//отправляем письмо
   $mail = mail($mailto, $subject, $message, $headers);
//проверяем отправку
    if(TRUE === $mail) echo 'Ваше сообщение успешно отправлено!';
    else echo 'Произошла ошибка при отправке сообщения.';
//проверку можно записать короче при помощи тернарного оператора, вот так:
//  echo (TRUE === $mail) ? 'Ваше сообщение успешно отправлено!' : 'Произошла ошибка при отправке сообщения.' ;
//тогда нужно будет раскомментировать строчку выше и закомментировать строчки выше с проверкой
  }
}
?>

Может это таблица мешает или то,что сайт на бутстрапе? Спасибо зарание.



0



Пифагор

2169 / 1652 / 840

Регистрация: 10.01.2015

Сообщений: 5,187

09.05.2016, 14:15

2

HTML5
1
<input type="submit" value="SEND MESSAGE" class="send">

помимо всего должно быть имя, которое потом передается при условии нажатия.

HTML5
1
<input type="submit" name="submit" value="SEND MESSAGE" class="send">

Добавлено через 1 минуту

PHP
1
2
3
if(isset($_POST['submit'])){
    //то, что выполняется
}



1



Kerry_Jr

Эксперт PHP

3106 / 2591 / 1219

Регистрация: 14.05.2014

Сообщений: 7,236

Записей в блоге: 1

09.05.2016, 14:47

3

Цитата
Сообщение от Пифагор
Посмотреть сообщение

помимо всего должно быть имя, которое потом передается при условии нажатия.

PHP
1
2
3
if(isset($_POST['submit'])){
    //то, что выполняется
}

Не понимаю, для чего проверять, нажата кнопка или нет.



0



2169 / 1652 / 840

Регистрация: 10.01.2015

Сообщений: 5,187

09.05.2016, 14:51

4

Цитата
Сообщение от Kerry_Jr
Посмотреть сообщение

Не понимаю, для чего проверять, нажата кнопка или нет.

А если кнопок несколько?



0



4 / 4 / 3

Регистрация: 14.10.2014

Сообщений: 321

09.05.2016, 14:57

 [ТС]

5

Спасибо, помогло! Теперь возникла следующая проблема. Когда должна открываться страница, где сообщается, что письмо успешно отправлено, вместо этого какие-то кракозябры и на почту тоже кракозябры приходят. Страница index.html сохранена в utf-8 и в php файле есть строчка
$headers = ‘Content-type: text/html; charset=utf-8’;
Как сделать нормальный текст?



0



maruo

133 / 133 / 48

Регистрация: 26.04.2013

Сообщений: 1,356

09.05.2016, 15:03

6

Пифагор, Так можно проверить на параметры которые есть , и должны приниматься

Добавлено через 1 минуту
maks_7,
Открываете через notepad++ файл преобразовываете в utf-8 без BOM
Прописываете в .htaccess строчку

HTML5
1
AddDefaultCharset utf-8

Если информация выбирается из Базы данных, то в соединении указываете кодировку.

PHP
1
mysqli_set_charset($link, "utf8");



1



Эксперт PHP

3106 / 2591 / 1219

Регистрация: 14.05.2014

Сообщений: 7,236

Записей в блоге: 1

09.05.2016, 15:03

7

Цитата
Сообщение от Пифагор
Посмотреть сообщение

А если кнопок несколько?

Тогда этот вопрос не возник бы



0



maruo

133 / 133 / 48

Регистрация: 26.04.2013

Сообщений: 1,356

09.05.2016, 15:11

8

maks_7, Насчет кодировки на почте, нужно отправить заголовок

PHP
1
$mailheaders = "Content-type: text/plain; charset=\"utf-8\"\r\n";



1



4 / 4 / 3

Регистрация: 14.10.2014

Сообщений: 321

09.05.2016, 15:17

 [ТС]

9

Спасибо, все отлично работает!



0



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

1. Неправильно настроенные параметры php.ini
Параметры файла php.ini могут быть настроены неправильно, что может привести к ошибкам при отправке формы. Например, если параметр upload_max_filesize в php.ini установлен слишком низко, то пользователю не будет разрешено загружать файлы, превышающие заданное значение. В этом случае следует проверить значения параметров, устанавливаемых в php.ini, и увеличить объем доступной памяти, если это необходимо.

2. Ошибки в коде PHP
При написании кода для обработки отправленной формы могут возникнуть ошибки, например, ошибка синтаксиса, ошибка в вызове функции или неправильно составленные условные выражения. Эти ошибки могут привести к невозможности обработки отправленной формы. В этом случае следует проверить код программы на наличие ошибок и исправить их.

3. Ошибки в коде HTML и JavaScript
При разработке HTML-страниц, которые содержат формы для отправки, могут быть допущены ошибки, которые приведут к тому, что форма не будет отправлена. Например, неправильная спецификация атрибута form в теге button или неправильное использование обработчика событий JavaScript. В этом случае следует проверить код HTML и JavaScript на наличие ошибок и исправить их.

4. Проблемы с загрузкой файлов
При отправке формы, которая содержит файлы, могут возникнуть проблемы с загрузкой и обработкой этих файлов на стороне сервера. Например, файл может быть слишком большим для загрузки, сервер может быть настроен неправильно или файл может быть поврежден. В этом случае следует проверить правильность настроек сервера и зависимости, связанные с загрузкой файлов, а также проконсультироваться со специалистом, если необходимо.

5. Не хватает прав на запись в файлы
При обработке отправленных данных формы может потребоваться запись данных в файлы на сервере. Если у пользователя не хватает прав для записи в эти файлы, то это может привести к ошибкам. В этом случае следует проверить доступ пользователя к файловой системе и убедиться, что пользователь имеет права на запись в необходимые файлы.

Итак, мы рассмотрели наиболее распространенные причины ошибок при отправке формы PHP и возможные способы их устранения. Нельзя не отметить, что очень важно писать качественный код и следить за его исполнением. К тому же, использование проверенных библиотек и различных утилит для диагностики, таких как логи ошибок, может существенно упростить и ускорить процесс отладки программы.

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

Такая задача: проверяя введённые данные на стороне сервера, прервать выполнение скрипта отправки и вывести соответствующее сообщение об ошибке (такое как «введённое имя слишком короткое», «неправильно введён номер телефона» и т. д.).

Чего я не понимаю — как вернуть какое-либо значение при завершении выполнения скрипта, чтобы его можно было перехварить в php-файле с формой ввода. Я себе это представляю как-то так:

<!-- action.php - файл проверки данных и отправки сообщения -->
<form id="FeedbackFrom" name="FeedbackFrom" method="post" action="request.php">

    <input type="text" id="name"  name="name">  

    <?php
        if ($_GET['mail'] == 0 && $errorCode == "TooShortName") {
            echo "<p class=\"error\"> Введённое имя слишком короткое </p>";
        }
        else if ($_GET['mail'] == 0 && $errorCode == "TooShortName") {
            echo "<p class=\"error\"> Введённое имя слишком длинное </p>";
        }
    ?>

    <input type="email" id="email"  name="email">

    <?php
        if ($_GET['mail'] == 0 && $errorCode == "InvalidMail") {
            echo "<p class=\"error\"> Адрес электронной почты ведён неправильно </p>";
        }
    ?>

    <input type ="submit" id="Submitt"/>

</form>
  • Есть exit, но он ничего не возвращает. Код ошибки там ловится какими-то извращенскими способами; непонятно, как поймать его в блоке if.
  • Есть исключения и конструкция try-catch. Но во-первых, нужно создавать отдельный класс для каждой ошибки, во-вторых как это «поймать» при аварийном завершении request.php?

задан 27 сен 2016 в 8:31

Боков Глеб's user avatar

Боков ГлебБоков Глеб

1,0142 золотых знака24 серебряных знака63 бронзовых знака

<?php
$error = array();

$name = '';
$email = '';

// Если пришло значение
if(isset($_POST['name'])){
  $name = $_POST['name']; 
  // Если там пусто
  if(!$_POST['name']){
     $error['name'] = 'Пустое имя';
  }
}
// Если пришло значение
if(isset($_POST['email'])){
  $email = $_POST['email'];
  // Если там пусто
  if(!$_POST['email']){
     $error['email'] = 'Пустой email';
  }
}


if(isset($_POST['name']) && isset($_POST['email']) && (!$error)){
  mail($_POST['email'], 'Вы правильно заполнили форму', 'Ok' );
  die(); // Тут должен быть редирект на другую страницу
}


?>


<form id="FeedbackFrom" name="FeedbackFrom" method="post" action="request.php">

<input type="text" id="name"  name="name" value="<?php echo $name; ?>">  
<?php
if(isset($error['name'])){
  echo '<p class="error">' . $error['name'] . '</p>'; 
}
?>

<input type="email" id="email"  name="email" value="<?php echo $email; ?>">
<?php
if(isset($error['email'])){
  echo '<p class="error">' . $error['email'] . '</p>'; 
}
?>
    <input type ="submit" id="Submitt"/>
</form>

ответ дан 27 сен 2016 в 8:52

Mrak's user avatar

Если вкратце — как вариант в этих блоках ставить метку что есть ошибки заполнения

if ($_GET['mail'] == 0 && $errorCode == "TooShortName") {
    $form_invalid = true;
    echo "<p class=\"error\"> Введённое имя слишком короткое </p>";
}

И в конце файла

if ( empty($form_invalid) ) {
    // http://www.w3schools.com/php/filter_sanitize_email.asp
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);  
    mail($_POST['email'], 'Вы правильно заполнили форму', 'Ok' );
    header('Location: action.php?mail_send=true');
    die(); // Тут должен быть редирект на другую страницу, иначе при каждой перезагрузке станицы будет отправляться письмо
}

Но как по мне лучше использовать AJAX, это гораздо удобнее.

ответ дан 27 сен 2016 в 9:19

MaxWell99's user avatar

3

Понравилась статья? Поделить с друзьями:
  • Произошла ошибка при поиске новых обновлений для компьютера
  • Произошла ошибка при отправке подарка одноклассники
  • Произошла ошибка при поиске новых обновлений windows 7
  • Произошла ошибка при открытии папки консоль разработчика
  • Произошла ошибка при отправке обращения гас правосудие