27.09.2023, 09:24
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
Добавить переменную в массив POST
Коллеги, прошу помощи.
Есть такой скриптик:
try {
let data = new FormData();
const fileInput = Array.from(fileds).find(el => el.type === 'file');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
data.append('message', message);
Он создаёт переменную message и отдаёт в POST массив.
Данные берутся из HTML-формы, в которой имеется поле:
<input type="email" name="email" placeholder="Почта" data-field="Почта" required="">
Нужно добавить код в JS, чтобы этим же POST`ом передавалась и переменная MAIL из этого поля.
Т.е., чтобы в массиве POST были две переменные, message с данными всей формы, уже есть.
И переменна mail с ящиком отправителя.
|
|
27.09.2023, 10:02
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
Дополню JS, дал не полностью.
if (field.type !== 'file') {
if (field.type == 'checkbox') {
message += `<p><b>${field.dataset.field} :</b> ${(field.checked?'Да':'Нет')}</p>`;
}else{
message += `<p><b>${field.dataset.field} :</b> ${field.value}</p>`;
}
}
};
try {
let data = new FormData();
const fileInput = Array.from(fileds).find(el => el.type === 'file');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
data.append('message', message);
|
|
27.09.2023, 12:33
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Вы опять не полностью код дали
Где определено field и message?
Вы поля в цикле перебираете?
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?
|
|
27.09.2023, 13:25
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
Сообщение от voraa
|
Вы опять не полностью код дали
Где определено field и message?
Вы поля в цикле перебираете?
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?
|
field и значения из формы data-field="Почта"
Да, получается цикл.
Да, type=email тоже там, получается $message="
<p><b>Телефон :</b> 123123123</p>
.........
<p><b>Имя :</b> Василий</p>
<p><b>mail :</b> mail@mail</p>"
И весь $message передаётся в POST.
А нужна ещё одна переменная с мылом, например, $mail и передать содержимое так же в POST.
|
|
27.09.2023, 13:28
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
Перед тем JS указал, есть ещё, если вы об этом:
let form = btn.closest('form');
let fileds = form.querySelectorAll('input[data-field], select[data-field]');
|
|
27.09.2023, 14:05
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
voraa, спасибо, что указали.
Да, неверно чтобы не путать людей, лучше дать код полностью.
let formSendBtn = document.querySelectorAll('.formSend');
for (let btn of formSendBtn) {
btn.addEventListener('click', async () => {
let message = `<h1>Вам письмо, тема "${btn.dataset.form}"</h1>`;
let form = btn.closest('form');
let fileds = form.querySelectorAll('input[data-field], select[data-field]');
if(!form.reportValidity()) {
return;
}
for (let field of fileds) {
let valid = field.validity.valid;
if (field.type !== 'file') {
if (field.type == 'checkbox') {
message += `<p><b>${field.dataset.field} :</b> ${(field.checked?'Да':'Нет')}</p>`;
}else{
message += `<p><b>${field.dataset.field} :</b> ${field.value}</p>`;
}
}
};
try {
let data = new FormData();
const fileInput = Array.from(fileds).find(el => el.type === 'file');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
data.append('message', message);
|
|
27.09.2023, 15:55
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Ну что то типа такого
let formSendBtn = document.querySelectorAll('.formSend');
for (let btn of formSendBtn) {
btn.addEventListener('click', async () => {
let message = `<h1>Вам письмо, тема "${btn.dataset.form}"</h1>`;
let form = btn.closest('form');
let fileds = form.querySelectorAll('input[data-field], select[data-field]');
if(!form.reportValidity()) {
return;
}
for (let field of fileds) {
let valid = field.validity.valid;
if (field.type !== 'file' && field.type !== 'email') {
if (field.type == 'checkbox') {
message += `<p><b>${field.dataset.field} :</b> ${(field.checked?'Да':'Нет')}</p>`;
}else{
message += `<p><b>${field.dataset.field} :</b> ${field.value}</p>`;
}
}
};
try {
let data = new FormData();
const fileInput = form.querySelector('input[data-field][type="file"]');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
const emailInput = form.querySelector('input[data-field][type="email"]');
if (emailInput) {
data.append('mail', emailInput.value);
}
data.append('message', message);
Последний раз редактировалось voraa, 27.09.2023 в 16:08.
|
|
27.09.2023, 17:56
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
voraa, спасибо!
Хоть какой-то сдвиг.
Сейчас ящик пропал из тела письма, из переменной message и появился перед всей этой массой, т.е. выглядит так:
mail@mail,
<h1>Вам письмо, тема Новое</h1>
<p><b>Имя :</b> Василий</p>
<p><b>mail :</b> mail@mail</p>
А нужно оставить $message, как есть и передать в POST ещё одну переменную, $mail с ящиком отправителя.
Но если уж смогли выцарапать, то решение где-то совсем рядом.
|
|
27.09.2023, 18:00
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Я же спрашивал
Сообщение от voraa
|
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?
|
Ну просто строку 12 записать как раньше
if (field.type !== 'file') {
|
|
27.09.2023, 20:41
|
Новичок на форуме
|
|
Регистрация: 27.09.2023
Сообщений: 7
|
|
voraa, вы мой спаситель!
Огромнейшее вам спасибо!
|
|
|
|