Вы сказали:
form.html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Email форма</title>
</head>
<body>
<h2>Добавить Email</h2>
<form id="emailForm">
<input type="email" id="emailInput" required placeholder="Введите email" />
<button type="submit">Сохранить</button>
<p id="message"></p>
</form><br>
<form id="subForm">
<input type="text" id="subInput" required placeholder="Введите тема письма" style=" width: 500px;"/><br><br>
<button type="submit">Сохранить</button>
<p id="sub"></p>
</form><br>
<form id="textForm">
<textarea name="textInput" id="textInput" required placeholder="Введите текст письма" style="height: 300px; width: 635px;"></textarea><br>
<button type="submit">Сохранить</button>
<p id="text"></p>
</form>
<script src="../js/tinymce/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#textInput',
//toolbar: false,
//menubar: false,
//statusbar: false,
plugins: 'image paste',
toolbar: 'undo redo | styles | bold italic | image',
//toolbar_sticky: true,
//toolbar_mode: 'floating',
//toolbar_mode: 'sliding',
language: 'ru', // Основной язык интерфейса
language_url: '../js/tinymce/langs/ru.js', // Путь к файлу перевода
paste_data_images: true, // Разрешить вставку Base64 изображений
/*
images_upload_handler: function (blobInfo, success, failure) {
success("cid:" + blobInfo.filename());
}*/
automatic_uploads: true, // Автозагрузка при перетаскивании
images_upload_handler: function (blobInfo) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result); // Возвращаем Base64
reader.readAsDataURL(blobInfo.blob());
});
}
});
const form = document.getElementById('emailForm');
const input = document.getElementById('emailInput');
const message = document.getElementById('message');
const subForm = document.getElementById('subForm');
const subInput = document.getElementById('subInput');
const sub = document.getElementById('sub');
const textForm = document.getElementById('textForm');
const textInput = document.getElementById('textInput');
const text = document.getElementById('text');
form.addEventListener('submit', async (e) => {
e.preventDefault();
const email = input.value.trim();
// Очистка сообщения перед новой отправкой
message.innerHTML = '';
// Простая проверка email
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
message.textContent = 'Неверный формат email.';
return;
}
const response = await fetch('form.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email })
});
const result = await response.json();
message.innerHTML = result.message;//message.textContent message.innerText
if (response.ok) {
input.value = '';
}
});
</script>
</body>
</html>
form.php
<?php
header('Content-Type: application/json');
$input = json_decode(file_get_contents('php://input'), true);
$email = trim($input['email'] ?? '');
if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
http_response_code(400);
echo json_encode(['message' => 'Неверный формат email']);
exit;
}
$file = 'email.json';
if (!file_exists($file)) {
file_put_contents($file, json_encode([]));
}
$emails = json_decode(file_get_contents($file), true);
// Проверка на дубликат
if (in_array($email, $emails)) {
http_response_code(409);
echo json_encode(['message' => '<span style="color:red">Email уже существует</span>']);
exit;
}
// Добавление email
$emails[] = $email;
file_put_contents($file, json_encode($emails, JSON_PRETTY_PRINT));
echo json_encode(['message' => '<span style="color:green">Email успешно сохранён</span>']);
Добавить в форму обработку дополнительных форм form.html
В form.php получить новые формы полученный $subInput обернуть в $md5sub = md5($subInput )
сохраняем $subInput, $textInput и $md5sub в файле form.json в массиве проверяя есть ли такая запись еще в массиве ранее и заменяя ее по теме письма по $md5sub
копируем полученный файл email.json с новым названием файла $md5sub