Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавить переменную в массив POST (https://javascript.ru/forum/misc/85505-dobavit-peremennuyu-v-massiv-post.html)

zeroname 27.09.2023 09:24

Добавить переменную в массив 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 с ящиком отправителя.

zeroname 27.09.2023 10:02

Дополню 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);

voraa 27.09.2023 12:33

Вы опять не полностью код дали
Где определено field и message?
Вы поля в цикле перебираете?
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?

zeroname 27.09.2023 13:25

Цитата:

Сообщение от voraa (Сообщение 553411)
Вы опять не полностью код дали
Где определено 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.

zeroname 27.09.2023 13:28

Перед тем JS указал, есть ещё, если вы об этом:

let form = btn.closest('form');
			let fileds = form.querySelectorAll('input[data-field], select[data-field]');

zeroname 27.09.2023 14:05

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);

voraa 27.09.2023 15:55

Ну что то типа такого
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);

zeroname 27.09.2023 17:56

voraa, спасибо!
Хоть какой-то сдвиг. :)

Сейчас ящик пропал из тела письма, из переменной message и появился перед всей этой массой, т.е. выглядит так:

mail@mail,
<h1>Вам письмо, тема Новое</h1>
<p><b>Имя :</b> Василий</p>
<p><b>mail :</b> mail@mail</p>

А нужно оставить $message, как есть и передать в POST ещё одну переменную, $mail с ящиком отправителя.

Но если уж смогли выцарапать, то решение где-то совсем рядом. :)

voraa 27.09.2023 18:00

Я же спрашивал
Цитата:

Сообщение от voraa
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?

Ну просто строку 12 записать как раньше
if (field.type !== 'file') {

zeroname 27.09.2023 20:41

voraa, вы мой спаситель! :victory:
Огромнейшее вам спасибо! :)


Часовой пояс GMT +3, время: 16:13.