Skip to content

Commit 66413fb

Browse files
author
itchief
committed
Update
1 parent f89d1d7 commit 66413fb

File tree

6 files changed

+274
-50
lines changed

6 files changed

+274
-50
lines changed

feedback/examples/form-processing.php renamed to feedback/examples/form-processing-1.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
}
2020

2121
// имя файла для хранения логов
22-
define('LOG_FILE', 'logs/' . date('Y-m-d') . '.log');
22+
define('LOG_FILE', '../logs/' . date('Y-m-d') . '.log');
2323
// писать предупреждения и ошибки в лог
2424
const HAS_WRITE_LOG = true;
2525
// проверять ли капчу
@@ -31,7 +31,7 @@
3131
// максимально-допустимый размер файла
3232
const MAX_FILE_SIZE = 512 * 1024;
3333
// директория для хранения файлов
34-
define('UPLOAD_PATH', dirname(__FILE__) . '/uploads/');
34+
const UPLOAD_PATH = '../uploads/';
3535

3636
// отправлять письмо
3737
const HAS_SEND_EMAIL = true;
@@ -110,7 +110,7 @@ function itc_log($message)
110110
// проверка капчи
111111
if (HAS_CHECK_CAPTCHA) {
112112
session_start();
113-
if ($_POST['captcha'] === $_SESSION['captcha']) {
113+
if ($_POST['captcha'] === $_SESSION['captcha-1']) {
114114
$data['form']['captcha'] = $_POST['captcha'];
115115
} else {
116116
$data['result'] = 'error';
@@ -174,13 +174,13 @@ function itc_log($message)
174174
//use PHPMailer\PHPMailer\SMTP;
175175
use PHPMailer\PHPMailer\Exception;
176176

177-
require 'vendor/phpmailer/phpmailer/src/Exception.php';
178-
require 'vendor/phpmailer/phpmailer/src/PHPMailer.php';
179-
require 'vendor/phpmailer/phpmailer/src/SMTP.php';
177+
require '../vendor/phpmailer/phpmailer/src/Exception.php';
178+
require '../vendor/phpmailer/phpmailer/src/PHPMailer.php';
179+
require '../vendor/phpmailer/phpmailer/src/SMTP.php';
180180

181-
if ($data['result'] == 'success' && HAS_SEND_EMAIL == true) {
181+
if ($data['result'] == 'success' && HAS_SEND_EMAIL) {
182182
// получаем содержимое email шаблона и заменяем в нём
183-
$template = file_get_contents(dirname(__FILE__) . '/template/email.tpl');
183+
$template = file_get_contents('../template/email.tpl');
184184
$search = ['%subject%', '%name%', '%email%', '%message%', '%date%'];
185185
$replace = [EMAIL_SETTINGS['subject'], $data['form']['name'], $data['form']['email'], $data['form']['message'], date('d.m.Y H:i')];
186186
$body = str_replace($search, $replace, $template);
@@ -239,7 +239,7 @@ function itc_log($message)
239239
$mail->clearAllRecipients();
240240
$mail->clearAttachments();
241241
// получаем содержимое email шаблона и заменяем в нём плейсхолдеры на соответствующие им значения
242-
$template = file_get_contents(dirname(__FILE__) . '/template/email_client.tpl');
242+
$template = file_get_contents('../template/email_client.tpl');
243243
$search = ['%subject%', '%name%', '%date%'];
244244
$replace = [SUBJECT_FOR_CLIENT, $data['form']['name'], date('d.m.Y H:i')];
245245
$body = str_replace($search, $replace, $template);
@@ -267,7 +267,7 @@ function itc_log($message)
267267
}
268268
}
269269
$output = '=====================';
270-
error_log($output, 3, 'logs/forms.log');
270+
error_log($output, 3, '../logs/forms.log');
271271
}
272272

273273
echo json_encode($data);

feedback/examples/form-processing-2.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
}
2020

2121
// имя файла для хранения логов
22-
define('LOG_FILE', 'logs/' . date('Y-m-d') . '.log');
22+
define('LOG_FILE', '../logs/' . date('Y-m-d') . '.log');
2323
// писать предупреждения и ошибки в лог
2424
const HAS_WRITE_LOG = true;
2525
// проверять ли капчу
@@ -31,7 +31,7 @@
3131
// максимально-допустимый размер файла
3232
const MAX_FILE_SIZE = 512 * 1024;
3333
// директория для хранения файлов
34-
define('UPLOAD_PATH', dirname(__FILE__) . '/uploads/');
34+
const UPLOAD_PATH = '../uploads/';
3535

3636
// отправлять письмо
3737
const HAS_SEND_EMAIL = true;
@@ -110,7 +110,7 @@ function itc_log($message)
110110
// проверка капчи
111111
if (HAS_CHECK_CAPTCHA) {
112112
session_start();
113-
if ($_POST['captcha'] === $_SESSION['captcha']) {
113+
if ($_POST['captcha'] === $_SESSION['captcha-2']) {
114114
$data['form']['captcha'] = $_POST['captcha'];
115115
} else {
116116
$data['result'] = 'error';
@@ -174,13 +174,13 @@ function itc_log($message)
174174
//use PHPMailer\PHPMailer\SMTP;
175175
use PHPMailer\PHPMailer\Exception;
176176

177-
require 'vendor/phpmailer/phpmailer/src/Exception.php';
178-
require 'vendor/phpmailer/phpmailer/src/PHPMailer.php';
179-
require 'vendor/phpmailer/phpmailer/src/SMTP.php';
177+
require '../vendor/phpmailer/phpmailer/src/Exception.php';
178+
require '../vendor/phpmailer/phpmailer/src/PHPMailer.php';
179+
require '../vendor/phpmailer/phpmailer/src/SMTP.php';
180180

181-
if ($data['result'] == 'success' && HAS_SEND_EMAIL == true) {
181+
if ($data['result'] == 'success' && HAS_SEND_EMAIL) {
182182
// получаем содержимое email шаблона и заменяем в нём
183-
$template = file_get_contents(dirname(__FILE__) . '/template/email.tpl');
183+
$template = file_get_contents('../template/email.tpl');
184184
$search = ['%subject%', '%name%', '%email%', '%message%', '%date%'];
185185
$replace = [EMAIL_SETTINGS['subject'], $data['form']['name'], $data['form']['email'], $data['form']['message'], date('d.m.Y H:i')];
186186
$body = str_replace($search, $replace, $template);
@@ -239,7 +239,7 @@ function itc_log($message)
239239
$mail->clearAllRecipients();
240240
$mail->clearAttachments();
241241
// получаем содержимое email шаблона и заменяем в нём плейсхолдеры на соответствующие им значения
242-
$template = file_get_contents(dirname(__FILE__) . '/template/email_client.tpl');
242+
$template = file_get_contents('../template/email_client.tpl');
243243
$search = ['%subject%', '%name%', '%date%'];
244244
$replace = [SUBJECT_FOR_CLIENT, $data['form']['name'], date('d.m.Y H:i')];
245245
$body = str_replace($search, $replace, $template);
@@ -267,7 +267,7 @@ function itc_log($message)
267267
}
268268
}
269269
$output = '=====================';
270-
error_log($output, 3, 'logs/forms.log');
270+
error_log($output, 3, '../logs/forms.log');
271271
}
272272

273273
echo json_encode($data);

feedback/examples/two-forms.html

Lines changed: 219 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,224 @@
11
<!DOCTYPE html>
2-
<html lang="en">
2+
<html lang="ru">
3+
34
<head>
4-
<meta charset="UTF-8">
5-
<title>$Title$</title>
5+
<meta charset="utf-8">
6+
<title>Форма обратной связи</title>
7+
<link rel="stylesheet" href="/feedback/css/style.css">
68
</head>
9+
710
<body>
8-
$END$
11+
12+
<div class="container">
13+
<h1>Форма обратной связи</h1>
14+
15+
<div class="form-container form__wrapper">
16+
<!-- Форма обратной связи -->
17+
<form id="form-1" action="/feedback/examples/form-processing-1.php" enctype="multipart/form-data" novalidate>
18+
<div class="form-row">
19+
<!-- Имя пользователя -->
20+
<div class="form-group">
21+
<label for="form-1-name" class="control-label">Имя</label>
22+
<input id="form-1-name" type="text" name="name" class="form-control" value="" placeholder="Имя" minlength="2"
23+
maxlength="30" required="required">
24+
<div class="invalid-feedback"></div>
25+
</div>
26+
<!-- Email пользователя -->
27+
<div class="form-group">
28+
<label for="form-1-email" class="control-label">Email-адрес</label>
29+
<input id="form-1-email" type="email" name="email" required="required" class="form-control" value=""
30+
placeholder="Email-адрес">
31+
<div class="invalid-feedback"></div>
32+
</div>
33+
</div>
34+
<!-- Сообщение пользователя -->
35+
<div class="form-group">
36+
<label for="form-1-message" class="control-label">Сообщение (не менее 20 символов)</label>
37+
<textarea id="form-1-message" name="message" class="form-control" rows="3"
38+
placeholder="Сообщение (не менее 20 символов)" minlength="20" maxlength="500"
39+
required="required"></textarea>
40+
<div class="invalid-feedback"></div>
41+
</div>
42+
43+
<!-- Файлы, для прикрепления к форме -->
44+
<div class="form-group form-attach" data-count="5">
45+
<div class="form-attach__label">Файлы (не более <span class="form-attach__count">5</span>)</div>
46+
<div class="form-attach__wrapper">
47+
<input type="file" name="attach[]" multiple required>
48+
<div class="form-attach__description">
49+
<div>Нажмите для загрузки файлов или перетащите их</div>
50+
<div class="text-sm">PNG, JPG, GIF (до 512 Кбайт)</div>
51+
</div>
52+
<div class="form-attach__items"></div>
53+
</div>
54+
<div class="invalid-feedback"></div>
55+
</div>
56+
57+
<!-- Капча -->
58+
<div class="form-group form-captcha">
59+
<img class="form-captcha__image" src="/feedback/captcha/captcha.php?id=captcha-1" data-src="/feedback/captcha/captcha.php?id=captcha-1"
60+
width="132" height="46" alt="Капча">
61+
<div class="form-captcha__refresh">
62+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="16">
63+
<path fill="currentColor"
64+
d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z">
65+
</path>
66+
</svg>
67+
</div>
68+
<div class="form-group form-captcha__input">
69+
<label for="form-1-captcha" class="control-label d-none">Код, показанный на изображении</label>
70+
<input type="text" name="captcha" maxlength="6" required="required" id="form-1-captcha"
71+
class="form-control captcha" placeholder="******" autocomplete="off" value="">
72+
<div class="invalid-feedback"></div>
73+
</div>
74+
</div>
75+
76+
<!-- Пользовательское солашение -->
77+
<div class="form-group form-agree form-check">
78+
<input class="form-check-input" type="checkbox" name="agree" id="form-1-agree" required value="true">
79+
<label class="form-check-label" for="form-1-agree">Нажимая кнопку, я принимаю условия <a href="#">Пользовательского
80+
соглашения</a> и даю своё согласие на обработку моих персональных данных</label>
81+
<div class="invalid-feedback"></div>
82+
</div>
83+
84+
<!-- Сообщение об ошибке -->
85+
<div class="form-error form-error_hide">Исправьте данные и отправьте форму ещё раз.</div>
86+
87+
<!-- Кнопка для отправки формы на сервер -->
88+
<div class="form-submit">
89+
<button type="submit">Отправить сообщение</button>
90+
</div>
91+
</form>
92+
93+
<!-- Сообщение об успешной отправки формы -->
94+
<div class="form-success form-success_hide">
95+
<div class="form-success__message">
96+
Форма успешно отправлена.
97+
Нажмите <button type="button" class="form-success__btn">здесь</button>, если нужно отправить ещё одну форму.
98+
</div>
99+
</div>
100+
</div>
101+
102+
<div class="form-container form__wrapper">
103+
<!-- Форма обратной связи -->
104+
<form id="form-2" action="/feedback/examples/form-processing-2.php" enctype="multipart/form-data" novalidate>
105+
<div class="form-row">
106+
<!-- Имя пользователя -->
107+
<div class="form-group">
108+
<label for="form-2-name" class="control-label">Имя</label>
109+
<input id="form-2-name" type="text" name="name" class="form-control" value="" placeholder="Имя" minlength="2"
110+
maxlength="30" required="required">
111+
<div class="invalid-feedback"></div>
112+
</div>
113+
<!-- Email пользователя -->
114+
<div class="form-group">
115+
<label for="form-2-email" class="control-label">Email-адрес</label>
116+
<input id="form-2-email" type="email" name="email" required="required" class="form-control" value=""
117+
placeholder="Email-адрес">
118+
<div class="invalid-feedback"></div>
119+
</div>
120+
</div>
121+
<!-- Сообщение пользователя -->
122+
<div class="form-group">
123+
<label for="form-2-message" class="control-label">Сообщение (не менее 20 символов)</label>
124+
<textarea id="form-2-message" name="message" class="form-control" rows="3"
125+
placeholder="Сообщение (не менее 20 символов)" minlength="20" maxlength="500"
126+
required="required"></textarea>
127+
<div class="invalid-feedback"></div>
128+
</div>
129+
130+
<!-- Файлы, для прикрепления к форме -->
131+
<div class="form-group form-attach" data-count="5">
132+
<div class="form-attach__label">Файлы (не более <span class="form-attach__count">5</span>)</div>
133+
<div class="form-attach__wrapper">
134+
<input type="file" name="attach[]" multiple required>
135+
<div class="form-attach__description">
136+
<div>Нажмите для загрузки файлов или перетащите их</div>
137+
<div class="text-sm">PNG, JPG, GIF (до 512 Кбайт)</div>
138+
</div>
139+
<div class="form-attach__items"></div>
140+
</div>
141+
<div class="invalid-feedback"></div>
142+
</div>
143+
144+
<!-- Капча -->
145+
<div class="form-group form-captcha">
146+
<img class="form-captcha__image" src="/feedback/captcha/captcha.php?id=captcha-2" data-src="/feedback/captcha/captcha.php?id=captcha-2"
147+
width="132" height="46" alt="Капча">
148+
<div class="form-captcha__refresh">
149+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="16">
150+
<path fill="currentColor"
151+
d="M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z">
152+
</path>
153+
</svg>
154+
</div>
155+
<div class="form-group form-captcha__input">
156+
<label for="form-2-captcha" class="control-label d-none">Код, показанный на изображении</label>
157+
<input type="text" name="captcha" maxlength="6" required="required" id="form-2-captcha"
158+
class="form-control captcha" placeholder="******" autocomplete="off" value="">
159+
<div class="invalid-feedback"></div>
160+
</div>
161+
</div>
162+
163+
<!-- Пользовательское солашение -->
164+
<div class="form-group form-agree form-check">
165+
<input class="form-check-input" type="checkbox" name="agree" id="form-2-agree" required value="true">
166+
<label class="form-check-label" for="form-2-agree">Нажимая кнопку, я принимаю условия <a href="#">Пользовательского
167+
соглашения</a> и даю своё согласие на обработку моих персональных данных</label>
168+
<div class="invalid-feedback"></div>
169+
</div>
170+
171+
<!-- Сообщение об ошибке -->
172+
<div class="form-error form-error_hide">Исправьте данные и отправьте форму ещё раз.</div>
173+
174+
<!-- Кнопка для отправки формы на сервер -->
175+
<div class="form-submit">
176+
<button type="submit">Отправить сообщение</button>
177+
</div>
178+
</form>
179+
180+
<!-- Сообщение об успешной отправки формы -->
181+
<div class="form-success form-success_hide">
182+
<div class="form-success__message">
183+
Форма успешно отправлена.
184+
Нажмите <button type="button" class="form-success__btn">здесь</button>, если нужно отправить ещё одну форму.
185+
</div>
186+
</div>
187+
</div>
188+
189+
190+
</div>
191+
192+
<script src="/feedback/js/form-processing.js"></script>
193+
<script>
194+
/*
195+
attachMaxItems: 3,
196+
attachMaxFileSize: 128,
197+
attachExt: ['png', 'jpg']
198+
*/
199+
200+
document.querySelectorAll('form').forEach((el) => {
201+
ItcSubmitForm.getOrCreateInstance(el);
202+
})
203+
204+
document.addEventListener('itc.successSendForm', (e) => {
205+
const el = e.target.closest('.form-container').querySelector('.form-success');
206+
el.classList.remove('form-success_hide');
207+
});
208+
209+
// при клике на .form-success__btn
210+
document.addEventListener('click', (e) => {
211+
if (!e.target.closest('.form-success__btn')) {
212+
return;
213+
}
214+
const el = e.target.closest('.form-container').querySelector('form');
215+
const form = ItcSubmitForm.getOrCreateInstance(el);
216+
form.reset();
217+
e.target.closest('.form-container').querySelector('.form-success').classList.add('form-success_hide');
218+
});
219+
220+
</script>
221+
9222
</body>
10-
</html>
223+
224+
</html>

0 commit comments

Comments
 (0)