НА лендосе есть форма
<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
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
0
maks_7 4 / 4 / 3 Регистрация: 14.10.2014 Сообщений: 321 |
||||||||
1 |
||||||||
Не работает отправка формы09.05.2016, 14:09. Показов 3828. Ответов 8 Метки нет (Все метки)
С праздником, уважаемые форумчане! Вот форма:
И вот файл отправки формы:
Может это таблица мешает или то,что сайт на бутстрапе? Спасибо зарание.
0 |
Пифагор 2169 / 1652 / 840 Регистрация: 10.01.2015 Сообщений: 5,187 |
||||||||||||
09.05.2016, 14:15 |
2 |
|||||||||||
помимо всего должно быть имя, которое потом передается при условии нажатия.
Добавлено через 1 минуту
1 |
Kerry_Jr 3106 / 2591 / 1219 Регистрация: 14.05.2014 Сообщений: 7,236 Записей в блоге: 1 |
||||
09.05.2016, 14:47 |
3 |
|||
помимо всего должно быть имя, которое потом передается при условии нажатия.
Не понимаю, для чего проверять, нажата кнопка или нет.
0 |
2169 / 1652 / 840 Регистрация: 10.01.2015 Сообщений: 5,187 |
|
09.05.2016, 14:51 |
4 |
Не понимаю, для чего проверять, нажата кнопка или нет. А если кнопок несколько?
0 |
4 / 4 / 3 Регистрация: 14.10.2014 Сообщений: 321 |
|
09.05.2016, 14:57 [ТС] |
5 |
Спасибо, помогло! Теперь возникла следующая проблема. Когда должна открываться страница, где сообщается, что письмо успешно отправлено, вместо этого какие-то кракозябры и на почту тоже кракозябры приходят. Страница index.html сохранена в utf-8 и в php файле есть строчка
0 |
maruo 133 / 133 / 48 Регистрация: 26.04.2013 Сообщений: 1,356 |
||||||||
09.05.2016, 15:03 |
6 |
|||||||
Пифагор, Так можно проверить на параметры которые есть , и должны приниматься Добавлено через 1 минуту
Если информация выбирается из Базы данных, то в соединении указываете кодировку.
1 |
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, Насчет кодировки на почте, нужно отправить заголовок
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
Боков ГлебБоков Глеб
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
Если вкратце — как вариант в этих блоках ставить метку что есть ошибки заполнения
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
3