Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сформировать массив данных и отправить его в PHP средствами JS (https://javascript.ru/forum/misc/39868-sformirovat-massiv-dannykh-i-otpravit-ego-v-php-sredstvami-js.html)

westnord 15.07.2013 10:54

Сформировать массив данных и отправить его в PHP средствами JS
 
Привет всем! Я написал форму приема заказов на html, она обрабатывается скриптом JS.
var str;
	function showValues() {
      var fields = $(":input").serializeArray();
	  
      jQuery.each(fields, function(i, field){
	     fieldValue += field.value;
	 	 fieldName = field.name;
		   labelType += document.getElementById(fieldName).innerHTML;
		return $("#results").append(labelType + ' ' + fieldValue + ';');
	
      });
    }
	$(":checkbox, :radio").click(showValues);
    $("select, textarea, :text").change(showValues);
    showValues();


Это был первый (тестовый) файл, он работает по принципу: при заполнении формы все данные записываются в скрытый параграф с id="results", потом, после нажатия кнопки "отправить", при помощи скрипта проверяется правильность заполненности, считывается тот самый скрытый параграф и отправляется на страничку zakaz.php.

$(document).ready(function(){

	

$('#registerButton').bind('click',function(){
		if($('#formElem').data('errors')){
			alert('Пожалуйста, исправьте ошибки в форме!');
			return false;
		}else{
 str = document.getElementById('results').innerHTML + "<br>";
$.post("zakaz.php", { formString: str } );
alert('Спасибо, ваш заказ принят!');
return false;
}
 });
});

В файле zakaz.php все обрабатывается следующим кодом:
<?
$date = date('d M Y H:i:s');

list($company_name, $username, $tel_number, $emai) = explode(";", $_POST['formString']);

$mail = "
 $company_name
 $username
 $tel_number
 $email
 
Дата отправки: $date";
$theme = "Заявка";
$DerMail = 'mymail@mail';
mail($DerMail,$theme,$mail);

Мне нужно, чтобы значения, которые передавались в скрытый параграф, просто сохранялись в массиве(так как этот скрытый параграф занимает много места на сайте и его трудно обрабатывать в php) и этот массив передавался на страничку zakaz.php
Заранее спасибо за помощь!

ОлегА 15.07.2013 11:43

1-ое

function showValues() {
  var objFields = {};
  jQuery.each(fields, function(i, field){
    labelType = document.getElementById(field.name).innerHTML;

    objFields[ labelType ] = field.value;
  });
}


2-ое

$(document).ready(function(){

	

$('#registerButton').bind('click',function(){
		if($('#formElem').data('errors')){
			alert('Пожалуйста, исправьте ошибки в форме!');
			return false;
		}else{
$.post("zakaz.php", { formString: objFields } );
alert('Спасибо, ваш заказ принят!');
return false;
}
 });
});


3-е

обрабатываете массив в пхп

westnord 15.07.2013 12:32

Цитата:

Сообщение от ОлегА (Сообщение 262354)
1-ое

function showValues() {
  var objFields = {};
  jQuery.each(fields, function(i, field){
    labelType = document.getElementById(field.name).innerHTML;

    objFields[ labelType ] = field.value;
  });
}


2-ое

$(document).ready(function(){

	

$('#registerButton').bind('click',function(){
		if($('#formElem').data('errors')){
			alert('Пожалуйста, исправьте ошибки в форме!');
			return false;
		}else{
$.post("zakaz.php", { formString: objFields } );
alert('Спасибо, ваш заказ принят!');
return false;
}
 });
});


3-е

обрабатываете массив в пхп

Спасибо, сейчас попробую!

westnord 15.07.2013 12:41

Цитата:

Сообщение от ОлегА (Сообщение 262354)
1-ое

function showValues() {
  var objFields = {};
  jQuery.each(fields, function(i, field){
    labelType = document.getElementById(field.name).innerHTML;

    objFields[ labelType ] = field.value;
  });
}


2-ое

$(document).ready(function(){

	

$('#registerButton').bind('click',function(){
		if($('#formElem').data('errors')){
			alert('Пожалуйста, исправьте ошибки в форме!');
			return false;
		}else{
$.post("zakaz.php", { formString: objFields } );
alert('Спасибо, ваш заказ принят!');
return false;
}
 });
});


3-е

обрабатываете массив в пхп

А он будет выдавать значения вида label => name?
то есть Название компании: Айсберг(например.P.S.:это то значение, которое введет пользователь в input)

danik.js 15.07.2013 13:40

Цитата:

Сообщение от westnord
ри заполнении формы все данные записываются в скрытый параграф с id="results"

Переменная? Не, не слышал..

westnord 15.07.2013 14:17

Цитата:

Сообщение от danik.js (Сообщение 262389)
Переменная? Не, не слышал..

У меня просто не получалось этого сделать, вы прочитайте, там написано, что это тестовая версия была:)

westnord 15.07.2013 14:22

Цитата:

Сообщение от ОлегА (Сообщение 262354)
1-ое

function showValues() {
  var objFields = {};
  jQuery.each(fields, function(i, field){
    labelType = document.getElementById(field.name).innerHTML;

    objFields[ labelType ] = field.value;
  });
}


2-ое

$(document).ready(function(){

	

$('#registerButton').bind('click',function(){
		if($('#formElem').data('errors')){
			alert('Пожалуйста, исправьте ошибки в форме!');
			return false;
		}else{
$.post("zakaz.php", { formString: objFields } );
alert('Спасибо, ваш заказ принят!');
return false;
}
 });
});


3-е

обрабатываете массив в пхп

При отправке сообщения страничка просто перезагружается, все поля становятся пустыми, а все предыдущие значения убегают в адресную строку
Вот такого вида:
http://forma/?company_name=%D0%BF%D0...B2%D0%B0%D0%BF ....и так далее
В чем может быть проблема?

danik.js 15.07.2013 14:28

Цитата:

Сообщение от westnord
В чем может быть проблема?

Так нужно предотвратить отправку формы.
$('#form').submit(function(e){

e.preventDefault(); //теперь форма не отправится

// тут обрабатываем отправку, например шлем $.post запрос.

});

westnord 15.07.2013 14:40

$(document).ready(function(){
$('#registerButton').bind('click',function(){
		if($('#formElem').data('errors')){
			alert('Пожалуйста, исправьте ошибки в форме!');
			return false;
		}else{
		$('#formElem').submit(function(e){

e.preventDefault(); //теперь форма не отправится

// тут обрабатываем отправку, например шлем $.post запрос.
$.post("zakaz.php", { formString: objFields } );
alert('Спасибо, ваш заказ принят!');
return false;
});


}
 });
});

Вот так можно прописать?

westnord 15.07.2013 14:44

Цитата:

Сообщение от danik.js (Сообщение 262405)
Так нужно предотвратить отправку формы.
$('#form').submit(function(e){

e.preventDefault(); //теперь форма не отправится

// тут обрабатываем отправку, например шлем $.post запрос.

});

Измененный код тоже почему-то не работает=( Но наверху(в адресной строке) этой строчки уже нет


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