Добавить переменную в массив 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 с ящиком отправителя. |
Дополню 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); |
Вы опять не полностью код дали
Где определено field и message? Вы поля в цикле перебираете? В message все поля попадают, которые не type=file? type=email тоже туда попадает? |
Цитата:
Да, получается цикл. Да, type=email тоже там, получается $message=" <p><b>Телефон :</b> 123123123</p> ......... <p><b>Имя :</b> Василий</p> <p><b>mail :</b> mail@mail</p>" И весь $message передаётся в POST. А нужна ещё одна переменная с мылом, например, $mail и передать содержимое так же в POST. |
Перед тем JS указал, есть ещё, если вы об этом:
let form = btn.closest('form'); let fileds = form.querySelectorAll('input[data-field], select[data-field]'); |
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); |
Ну что то типа такого
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, спасибо!
Хоть какой-то сдвиг. :) Сейчас ящик пропал из тела письма, из переменной message и появился перед всей этой массой, т.е. выглядит так: mail@mail, <h1>Вам письмо, тема Новое</h1> <p><b>Имя :</b> Василий</p> <p><b>mail :</b> mail@mail</p> А нужно оставить $message, как есть и передать в POST ещё одну переменную, $mail с ящиком отправителя. Но если уж смогли выцарапать, то решение где-то совсем рядом. :) |
Я же спрашивал
Цитата:
if (field.type !== 'file') { |
voraa, вы мой спаситель! :victory:
Огромнейшее вам спасибо! :) |
Часовой пояс GMT +3, время: 16:13. |