Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите плз с формой (https://javascript.ru/forum/misc/65288-pomogite-plz-s-formojj.html)

konsty 10.10.2016 16:37

Помогите плз с формой
 
Здравствуйте.
Пытаюсь добавить в эту форму https://graygrids.com/php-and-ajax-b...rap-and-html5/
checkbox, radio, select.
обычные инпуты и пароль добавил а с чекбоксами не получается((

В js не разбираюсь, нужна помощь. Возможно все решается просто ?
метод тыка отнял пол дня - толку 0.



Вот html

<!--checkbox-->
<div class="form-group">
<div class="controls">

<input type="checkbox" name="check1" id="checkbox1" value="option1" checked>1
<input type="checkbox" name="check2" id="checkbox2" value="option2">2
<input type="checkbox" name="check3" id="checkbox3" value="option3">3

<div class="help-block with-errors"></div>
</div>
</div>

часть скрипта формы отвечающая за вывод данных в обработчик php

function submitForm(){

// Initiate Variables With Form Content
var name = $("#name").val();
var email = $("#email").val();
var phone = $("#phone").val();
var password = $("#password").val();
var msg_subject = $("#msg_subject").val();
var message = $("#message").val();



$.ajax({
type: "POST",
url: "assets/php/form-process.php",
data: "name=" + name + "&email=" + email + "&password=" + password + "&phone=" + phone + "&msg_subject=" + msg_subject + "&message=" + message,
success : function(text){
if (text == "success"){
formSuccess();
} else {
formError();
submitMSG(false,text);
}
}
});
}

часть php для отправки формы

<?php

$errorMSG = "";

// NAME
if (empty($_POST["name"])) {
$errorMSG = "Заполните поле";
} else {
$name = $_POST["name"];
}

// EMAIL
if (empty($_POST["email"])) {
$errorMSG .= "Заполните поле ";
} else {
$email = $_POST["email"];
}
// PHONE
if (empty($_POST["phone"])) {
$errorMSG .= "Заполните поле ";
} else {
$phone = $_POST["phone"];
}

// SUBJECT
if (empty($_POST["msg_subject"])) {
$errorMSG .= "Заполните поле ";
} else {
$msg_subject = $_POST["msg_subject"];
}
// PASSWORD
if (empty($_POST["password"])) {
$errorMSG .= "Заполните поле ";
} else {
$password = $_POST["password"];
}
// MESSAGE
if (empty($_POST["message"])) {
$errorMSG .= "Заполните поле ";
} else {
$message = $_POST["message"];
}


$EmailTo = "hello@yoursite.com";
$Subject = "Сообщение с сайта";

// prepare email body text
$Body = "";
$Body .= "Имя: ";
$Body .= $name;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $email;
$Body .= "\n";
$Body .= "Телефон: ";
$Body .= $phone;
$Body .= "\n";
$Body .= "Пароль: ";
$Body .= $password;
$Body .= "\n";
$Body .= "Тема: ";
$Body .= $msg_subject;
$Body .= "\n";
$Body .= "Сообщение: ";
$Body .= $message;
$Body .= "\n";

.....если не сложно - подскажите как реализовать, с учетом моей безграмотности в js

Griffter 10.10.2016 17:39

Попробуйте так.
Получить чекнутые чекбоксы
var arr_check=$('input:checkbox:checked').map(function () {return this.value;}).get();
В ajax передаете в data массив arr_check
data: "name=" + name + "&email=" + email + "&password=" + password + "&phone=" + phone + "&msg_subject=" + msg_subject + "&message=" + message+ "&arr_check="+ arr_check,

А в PHP уже работайте с массивом
$checkbox = $_POST["arr_check"];

laimas 10.10.2016 17:40

В строке 9 исходного кода

submitForm(this);

Строка 14

function submitForm(f){

Строки 16-19 удалить, а строка 25 должна быть такой

data: $(f).serialize(),

Только на сервере if (empty($_POST["name"])) и прочее, совсем не означает, что поле не заполнено, достаточно одного пробела и будет считаться заполненным.

konsty 10.10.2016 18:56

to Griffter

js----------------------------
function submitForm(){

// Initiate Variables With Form Content
var name = $("#name").val();
var email = $("#email").val();
var phone = $("#phone").val();
var password = $("#password").val();
var arr_check=$('input:checkbox:checked').map(function () {return this.value;}).get();
var msg_subject = $("#msg_subject").val();
var message = $("#message").val();




$.ajax({
type: "POST",
url: "assets/php/form-process.php",
data: "name=" + name + "&email=" + email + "&password=" + password + "&phone=" + phone + "&msg_subject=" + msg_subject + "&message=" + message + "&arr_check="+ arr_check,

php-----------------------------
........
// PASSWORD
if (empty($_POST["password"])) {
$errorMSG .= "Заполните поле ";
} else {
$password = $_POST["password"];
}
// CHECKBOX
if (empty($_POST["arr_check"])) {
$errorMSG .= "Сделайте выбор";
} else {
$checkbox = $_POST["arr_check"];

}

// MESSAGE
if (empty($_POST["message"])) {
$errorMSG .= "Заполните поле ";
} else {
$message = $_POST["message"];
}...........

приходит сообщение-------------
Имя: ыаываываыва
Email: n@yandex.ru
Телефон: (111)111-11-11
Пароль: 123456
Тема: dsfsd sdfsdf
Выбор1:
Сообщение: вап вап вапв вапв вапвап

форма работает но значение чекбокса не передается
Возможно я не правильно вставил ваш код?
Спасибо за попытку помочь.

warren buffet 10.10.2016 19:05

Цитата:

Сообщение от konsty
но значение чекбокса не передается

Неформатированный говнокод не смотрел, а насчет чекбоксов просто. Передается только отчекрыженный.

konsty 10.10.2016 19:06

Цитата:

Сообщение от laimas (Сообщение 431206)
В строке 9 исходного кода

submitForm(this);

Строка 14

function submitForm(f){

Строки 16-19 удалить, а строка 25 должна быть такой

data: $(f).serialize(),

Только на сервере if (empty($_POST["name"])) и прочее, совсем не означает, что поле не заполнено, достаточно одного пробела и будет считаться заполненным.

submitForm(this);
}
});


function submitForm(){

// Initiate Variables With Form Content




$.ajax({
type: "POST",
url: "assets/php/form-process.php",
data: $(f).serialize(),
success : function(text){
if (text == "success"){
formSuccess();
} else {
formError();
submitMSG(false,text);
}
}
});
}


php----------------------
// PASSWORD
if (empty($_POST["password"])) {
$errorMSG .= "Заполните поле ";
} else {
$password = $_POST["password"];
}
// CHECKBOX
if (empty($_POST["checkbox"])) {
$errorMSG .= "Сделайте выбор";
} else {
$checkbox = $_POST["checkbox"];

}

// MESSAGE
if (empty($_POST["message"])) {
$errorMSG .= "Заполните поле ";
} else {
$message = $_POST["message"];
}

konsty 10.10.2016 19:09

Цитата:

Сообщение от laimas (Сообщение 431206)
В строке 9 исходного кода

submitForm(this);

Строка 14

function submitForm(f){

Строки 16-19 удалить, а строка 25 должна быть такой

data: $(f).serialize(),

Только на сервере if (empty($_POST["name"])) и прочее, совсем не означает, что поле не заполнено, достаточно одного пробела и будет считаться заполненным.

Наверно где-то у меня ошибка - сообщение вообще не приходит

konsty 10.10.2016 19:10

Цитата:

Сообщение от warren buffet (Сообщение 431226)
Неформатированный говнокод не смотрел, а насчет чекбоксов просто. Передается только отчекрыженный.

Информативно))

laimas 10.10.2016 19:33

Цитата:

Сообщение от konsty
Наверно где-то у меня ошибка - сообщение вообще не приходит

У вас вообще в коде масса ошибок и самая главная, это логика серверного кода - не зависимо от проверок будет отправляться почта (если код именно такой).

Само же почтовое отправление так не оформляют и это тоже ошибка.

Диалог с клиентом вообще не понять какой - каждая проверка поля в случае его не заполнения (что у вас проверяется опять таки неверно) возвращает "Заполните поле ", а поле какое?

Исходный код, что вы взяли, написан под HTML5, форма при наличии у ее полей атрибута required не будет отправляться, если такое поле не заполнено. В коде есть валидатор с определенным текстом сообщений в data-error.

Если у клиента браузер без поддержки HTML5 или отключен JS, то в этом случае сервер должен отдавать такие сообщения, но толку от них, если они не конкретизируют где именно ошибка?

А ведь на сервере можно определить ошибки и так:

$err = [
    "name"=>"имени", //.... и т.д.
];


которому будет предшествовать текст "Заполните поле ".

Если отправлять данные таким образом

data: "name=" + name + "&email=" + email + "&password ...

то при каждом новом "добавить еще поля" нужно будет править код. А метод JQ .serialize() как раз и вернет поля формы и их значения как GET параметры - "name=" + name + "&email=" + email + "&password ...
А то что у вас не работает, так это не из-за применения этого метода и от того, что в функцию передается ссылка на форму.

warren buffet 11.10.2016 06:33

konsty, хочешь попросить помощи - прояви увОжение к читателю, соблюдай политес бб-кодами.


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