Подскажите по отправке checkbox

12
S
На сайте с 24.08.2015
Offline
48
398

Приветствую!

Есть e-mail форма, которая отправляет данные из полей text, date и checkbox. Все отправляется нормально, но есть неольшая проблема с чекбоксами: отправляется только первый выбранный параметр, даже если я отмечаю 2 или 3 чекбокса. Вот как это реализовано (указываю только поле с чекбоксом, чтоб не громоздить простыню):

form.html

<input type="checkbox" name="fieldname" id="unic1" value="Значение 1"> 

<input type="checkbox" name="fieldname" id="unic2" value="Значение 2">
<input type="checkbox" name="fieldname" id="unic3" value="Значение 3">

script.js

$(document).ready(function(){

$('#btn_submit').click(function(){
var rtype = $('input[name="fieldname"]:checked').val();
$.ajax({
url: "/mail.php",
type: "post",
dataType: "json",
data: {
"fieldname": fieldname
},
success: function(data){
$('.messages').html(data.result);
}
});
});
});

mail.php

<?php

$msg_box = "";
$errors = array();
if($_POST['user_email'] == "") $errors[] = "Поле 'Ваш e-mail' не заполнено!";
if(empty($errors)){
// собираем данные из формы
$message .= "E-mail пользователя: " . $_POST['user_email'] . "<br/>";
$message .= "Данные поля с чекбоксами: " . $_POST['fieldname'] . "<br/>";
send_mail($message);
// отправим письмо
// выведем сообщение об успехе
$msg_box = "<style>#resform{display:none;}</style>Успено отправлено!";
}else{
// если были ошибки, то выводим их
$msg_box = "";
foreach($errors as $one_error){
$msg_box .= "<span style='color: red;'>$one_error</span><br/>";
}
}

// делаем ответ на клиентскую часть в формате JSON
echo json_encode(array(
'result' => $msg_box
));


// функция отправки письма
function send_mail($message){
// почта, на которую придет письмо
$mail_to = "info@inbox.com";
// тема письма
$subject = "Тема";

// заголовок письма
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
$headers .= "From: Заказ <no-reply@mail.com>\r\n"; // от кого письмо

mail($mail_to, $subject, $message, $headers);
}

?>

Подскажите, где ошибся. Спасибо!

ME
На сайте с 03.07.2017
Offline
66
#1

Вы ошибкись в name="fieldname". Имена должны быть разные у всех если это именно чекбокс.

S
На сайте с 24.08.2015
Offline
48
#2
MkrtElion:
Вы ошибкись в name="fieldname". Имена должны быть разные у всех если это именно чекбокс.

Не не, разными должны быть id, параметр name одинаков.

IL
На сайте с 20.04.2007
Offline
418
#3
samdo:
Не не, разными должны быть id, параметр name одинаков.

- где у меня ошибка?

- тут..

- нет, тут всё правильно!..

- ...

А что, в таком случае должно приходить в fieldname, если выбрано несколько чекбоксов?

p.s. Если ожидаетмся массив, то в имени указываются скобки квадратные

<input type="checkbox" name="fieldname[]" id="unic1" value="Значение 1"> 
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Z0
На сайте с 03.09.2009
Offline
735
#4

Да, массивом же надо. Выше сказали верно 🍿

<input type="checkbox" name="fieldname[]" id="unic1" value="Значение 1">

S
На сайте с 24.08.2015
Offline
48
#5
ivan-lev:
- где у меня ошибка?
p.s. Если ожидаетмся массив, то в имени указываются скобки квадратные
<input type="checkbox" name="fieldname[]" id="unic1" value="Значение 1"> 

Да, вот это близко, но когда я добавляю [], то значение поля вообще не приходит на email. Поэтому я и обращаюсь к вам, чтобы понять, что я еще пропустил и в каком месте)

Z0
На сайте с 03.09.2009
Offline
735
#6
samdo:
Да, вот это близко, но когда я добавляю [], то значение поля вообще не приходит на email. Поэтому я и обращаюсь к вам, чтобы понять, что я еще пропустил и в каком месте)

Его надо собрать перед отправкой. Самое быстрое, что пришло в голову:



$(document).ready(function(){
$('#btn_submit').click(function(){
fieldname = [];

$('input:checkbox').each(function(){
fieldname.push( $(this).val() );
});

var rtype = $('input[name="fieldname"]:checked').val();
$.ajax({
url: "/mail.php",
type: "post",
dataType: "json",
data: {
"fieldname": fieldname
},
success: function(data){
$('.messages').html(data.result);
}
});
});
});

Вроде делал проще как-то, но не уверен... А, тогда и [] в чекбоксе не нужны вроде 🤪

А, вы и через json еще... Тут надо мозгами думать, я так не умею :)

А зачем вам var rtype = $('input[name="fieldname"]:checked').val(); ?

И почему вы передаете только fieldname, а где у вас в отправке user_email?

S
На сайте с 24.08.2015
Offline
48
#7
ziliboba0213:
Его надо собрать перед отправкой. Самое быстрое, что пришло в голову:


$(document).ready(function(){
$('#btn_submit').click(function(){
fieldname = [];

$('input:checkbox').each(function(){
fieldname.push( $(this).val() );
});

var rtype = $('input[name="fieldname"]:checked').val();
$.ajax({
url: "/mail.php",
type: "post",
dataType: "json",
data: {
"fieldname": fieldname
},
success: function(data){
$('.messages').html(data.result);
}
});
});
});


Вроде делал проще как-то, но не уверен... А, тогда и [] в чекбоксе не нужны вроде 🤪

А, вы и через json еще... Тут надо мозгами думать, я так не умею :)

А зачем вам var rtype = $('input[name="fieldname"]:checked').val(); ?

И почему вы передаете только fieldname, а где у вас в отправке user_email?

Не приходит вообще письмо после этих добавлений 😕

ME
На сайте с 03.07.2017
Offline
66
#8

Попробуйте просто в пхп коде $_POST['fieldname'] заменить на implode(«,»,$_POST['fieldname'])

Заменять нужно в этой стоке $message .= "Данные поля с чекбоксами: " . $_POST['fieldname'] . "<br/>";

Ну и name в чекбоксах делайте с []

Кавычки поправьте только. Пишу с телефона и не нашел на клавиатуре нужных кавычек

Посмотрел что у вас там еще js. Его нужно в первую очередь править

S
На сайте с 24.08.2015
Offline
48
#9
MkrtElion:
Попробуйте просто в пхп коде $_POST['fieldname'] заменить на implode(«,»,$_POST['fieldname'])

Заменять нужно в этой стоке $message .= "Данные поля с чекбоксами: " . $_POST['fieldname'] . "<br/>";

Ну и name в чекбоксах делайте с []

Кавычки поправьте только. Пишу с телефона и не нашел на клавиатуре нужных кавычек

Посмотрел что у вас там еще js. Его нужно в первую очередь править

Никак не хочет( Пустое приходит и всё 😡

ME
На сайте с 03.07.2017
Offline
66
#10
samdo:
Никак не хочет( Пустое приходит и всё 😡

С вашим js мой вариант не будет работать.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий