Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Передача данных из формы javascript (https://javascript.ru/forum/jquery/39356-peredacha-dannykh-iz-formy-javascript.html)

nikolaymac 26.06.2013 15:21

Передача данных из формы javascript
 
Уважаемые! Подскажите новичку как вытащить из этой формы данные ?..
А именно нужно что бы пользователь выбирал сколько ему нужно полей от 1 до 10 и все эти поля заносились в БД mysql поле в новой строке..
Сейчас в этом коде после нажатия субмит срабатывает алерт а как вывести это в php я не могу понять

$(document).ready(function(){


	var i = $('input').size() + 1;
	
	$('#add').click(function() {
		$('<div><input type="text" class="field" name="dynamic[]" value="' + i + '" /></div>').fadeIn('slow').appendTo('.inputs');
		i++;
	});
	
	$('#remove').click(function() {
	if(i > 1) {
		$('.field:last').remove();
		i--; 
	}
	});
	
	$('#reset').click(function() {
	while(i > 2) {
		$('.field:last').remove();
		i--;
	}
	});
	

// here's our click function for when the forms submitted
	
	$('.submit').click(function(){
	
	var answers = [];
    $.each($('.field'), function() {
        answers.push($(this).val()); 
    });
	
    if(answers.length == 0) { 
        answers = "none"; 
    }   

	alert(answers);
	
	return false;
							
	});
	
	

});

<body>

<div id="container">

<div class="dynamic-form">

<a href="#" id="add">Добавить</a> | <a href="#" id="remove">Удалить</a>  | <a href="#" id="reset">Сбросить</a>  

<form>
<div class="inputs">
<div><input type="text" name="dynamic[]" class="field" value="1"></div>
</div>
<input name="submit" type="button" class="submit" value="ОК">
</form>
</div>





</div>

</body></html>

animhotep 26.06.2013 16:33

вместо алерта отправьте данные пост запросом на пхп файл http://api.jquery.com/jQuery.post/

nikolaymac 26.06.2013 18:32

не совсем понимаю как грамотно написать это :(

animhotep 26.06.2013 18:51

както так $.post("test.php", { answers } ); а в test.php обрабатывать $_POST['answers']

nikolaymac 27.06.2013 06:57

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery-1.3.1.min.js"></script>
<script>
$(document).ready(function(){



	var i = $('input').size() + 1;

	$('#add').click(function() {
		$('<div><input type="text" class="field" name="dynamic[]"  /><input type="text" class="field" name="dynamic[]"  /></div>').fadeIn('slow').appendTo('.inputs');
		i++;
		
	});
	
	$('#remove').click(function() {
	if(i > 1) {
		$('.field:last').remove();
		$('.field:last').remove();
		i--; 
	}
	});
	
	$('#reset').click(function() {
	while(i > 2) {
		$('.field:last').remove();
		i--;
	}
	});
	

// here's our click function for when the forms submitted
	
	$('.submit').click(function(){
	
	var answers = [];
    $.each($('.field'), function() {
        answers.push($(this).val()); 
    });

	
    
  // Отсылаем паметры
       $.ajax({
                type: "POST",
                url: "new.php",
                data: "data="+answers,
                // Выводим то что вернул PHP
                success: function(html) {
 //предварительно очищаем нужный элемент страницы
                        $("#result").empty();
//и выводим ответ php скрипта
                        $("#result").append(html);
                }
        });  

	
	
	
	
	return false;
							
	});
	
	

});

</script>

<style>
input{
	border:1px solid #ccc;
	padding:8px;
	font-size:14px;
	width:300px;
	}
	
.submit{
	width:110px;
	background-color:#FF6;
	padding:3px;
	border:1px solid #FC0;
	margin-top:20px;}	

</style>



<body>

<div id="container">

<div class="dynamic-form">

<a href="#" id="add">Добавить</a> | <a href="#" id="remove">Удалить</a>  | <a href="#" id="reset">Сбросить</a>  

<form>
<div class="inputs">
<div><input type="text" name="dynamic[]" class="field" >
<input type="text" name="dynamic[]" class="field" ></div>
</div>
<input name="submit" type="button" class="submit" value="ОК">
</form>
<div id="result"></div>
</div>





</div>

</body></html>



Это полный код...

принимаю так

<?
$data=$_POST[data];

$array = explode(',', $data);

foreach ($array as $number=>$value)
{
echo "в поле ".$number;
echo " значение ".$value;
echo "<br>";
}

?>


Вопрос Как ограничить чистой добавляемый полей ?? допустим что бы пользователь мог добавить только 10 полей и все

danik.js 27.06.2013 08:29

У тебя в переменной i содержится количество полей. После добавления поля делай проверку, если лимит исчерпан - скрывай кнопку. По клику кнопки удаления проявляй кнопку добавления.

nikolaymac 27.06.2013 08:49

какой функцией или методом скрыть ссылку и потом вернуть? (кнопку добавить)

danik.js 27.06.2013 08:51

$('#add').hide() | $('#add').show()

nikolaymac 27.06.2013 10:05

теперь проблема в следующем... отдельно в файле этот код работает... когда я его вставляю в заполненую страницу которая содержит различные инпуты и кнопки СТОП на добавление полей работает только после нажатия на кнопку Сброс!
<script>
$(document).ready(function(){



	var i = $('input').size() + 1;

	$('#add').click(function() {
		$('<div><input type="text" class="field" name="dynamic[]"  /> <input type="text" class="field" name="dynamic[]"  /></div>').fadeIn('slow').appendTo('.inputs');
		i++;
	if(i==5){
	
	$('#add').hide() 
	}
		
	});
	
	$('#remove').click(function() {
	if(i > 1) {
		$('.field:last').remove();
		$('.field:last').remove();
		i--; 
		$('#add').show() 
	}
	});
	
	$('#reset').click(function() {
	while(i > 2) {
		$('.field:last').remove();
		$('.field:last').remove();
		i--;
		$('#add').show() 
	}
	});
	

// here's our click function for when the forms submitted
	
	$('.submit').click(function(){
	
	var answers = [];
    $.each($('.field'), function() {
        answers.push($(this).val()); 
    });

	
    
  // Отсылаем паметры
       $.ajax({
                type: "POST",
                url: "new.php",
                data: "data="+answers,
                // Выводим то что вернул PHP
                success: function(html) {
 //предварительно очищаем нужный элемент страницы
                        $("#result").empty();
//и выводим ответ php скрипта
                        $("#result").append(html);
                }
        });  

	
	
	
	
	return false;
							
	});
	
	

});

danik.js 27.06.2013 11:01

Хз, живой пример запили через [​html run][/​html]
И не нужно совать в цикл .hide() / .show()

nikolaymac 27.06.2013 11:19

Цитата:

Сообщение от danik.js (Сообщение 258725)
И не нужно совать в цикл .hide() / .show()

а как тогда? куда вставить код ? по другому не работает

nikolaymac 27.06.2013 13:15

Понял в чем причина ! в остальных инпутах ! Как задать параметр что бы
var t = $('input').size(); считал инпуты только в определенном блоке div??

рони 27.06.2013 13:47

Цитата:

Сообщение от nikolaymac
Как задать параметр что бы
var t = $('input').size(); считал инпуты только в определенном блоке div??

$('div.inputs input').size()

nikolaymac 27.06.2013 14:38

Спасибо большое !!

nikolaymac 27.06.2013 15:20

Еще вопрос не решенный.. как с одного инпута вытащить в одну переменную а со второго в другую? для записи в поля БД

рони 27.06.2013 15:30

nikolaymac,
serialize()

nikolaymac 27.06.2013 17:12

допустим serialize() там требуется NAME а у меня этот параметр массив с неизвсным количесвом элементов и как быть

danik.js 27.06.2013 18:11

Ну и даешь им имя типа field[] со скобками на конце. Пхп такие параметры воспримет как массив field

nikolaymac 27.06.2013 18:32

var t = $('div.inputs input').size();


	$('#add').click(function() {
		$('<div><input type="text" class="field" name="dynamic[]"  /> <input type="text" class="field" name="dynamic[]"  /></div>').fadeIn('slow').appendTo('.inputs');
		t++;


давай конкретнее ты про что field[]?
var value= $('form').serialize(); так ?

nikolaymac 27.06.2013 19:07

у меня есть массив dynamic[] как вытащить из него значения?

Deff 27.06.2013 19:15

nikolaymac,
Поясняйте - где массив - на сервере или на клиенте ?

nikolaymac 27.06.2013 19:23

я же выложил полный код
<script>
$(document).ready(function(){



	var t = $('div.inputs input').size();


	$('#add').click(function() {
		$('<div><input type="text" class="field" name="dynamic[]"  /> <input type="text" class="field" name="dynamic[]"  /></div>').fadeIn('slow').appendTo('.inputs');
		t++;
	if(t==6){
	
	$('#add').hide() 
	}
		
	});
	
	$('#remove').click(function() {
	if(t > 1) {
		$('.field:last').remove();
		$('.field:last').remove();
		t--; 
		$('#add').show() 
	}
	});
	
	$('#reset').click(function() {
	while(t > 2) {
		$('.field:last').remove();
		$('.field:last').remove();
		t--;
		$('#add').show() 
	}
	});
	

// here's our click function for when the forms submitted
	
	$('.submit').click(function(){
	
	var answers = [];
    $.each($('.field'), function() {
        answers.push($(this).val()); 
	
    });

	
    
  // Отсылаем паметры
       $.ajax({
                type: "POST",
                url: "new.php",
                data: "data="+answers,
                // Выводим то что вернул PHP
                success: function(html) {
 //предварительно очищаем нужный элемент страницы
                        $("#result").empty();
//и выводим ответ php скрипта
                        $("#result").append(html);
                }
				
        });  

	
	
	
	
	return false;
							
	});
	
	

});

</script>

<div id="container">

<div class="dynamic-form">

<a href="#" id="add">Добавить</a> | <a href="#" id="remove">Удалить</a>  | <a href="#" id="reset">Сбросить</a>  

<form>
<div class="inputs">
<div><input type="text" name="dynamic[]" class="field" >
<input type="text" name="dynamic[]" class="field" ></div>
</div>
<input name="submit" type="button" class="submit" value="ОК">
</form>
<div id="result"></div>
</div>

nikolaymac 27.06.2013 19:28

в итоге хочу получить две переменные типа input1 = "значение" input2 = "значение"

и снова input1 = "значение" input2 = "значение" это следующий динамический блок input

Deff 27.06.2013 19:39

Ну вместо этого:

40	    $('.submit').click(function(){
41	     
42	    var answers = [];
43	    $.each($('.field'), function() {
44	        answers.push($(this).val()); 
45	     
46	    });
47	 
48	     
49	     
50	  // Отсылаем паметры
51	       $.ajax({
52	                type: "POST",
53	                url: "new.php",
54	                data: "data="+answers,
55	                // Выводим то что вернул PHP
56	                success: function(html) {
57	 //предварительно очищаем нужный элемент страницы
58	                        $("#result").empty();
59	//и выводим ответ php скрипта
60	                        $("#result").append(html);
61	                }
62	                 
63	        });

Наверно так
var outData='';
$('.submit').click(function(){
 outData = $(this).parents('form').serialize();
if(!outData) return;
// Oтcылaeм пaмeтpы
 $.ajax({
   type: "POST",
   url: "new.php",
   data: "data="+outData,
   // Bывoдим тo чтo вepнyл PHP
   success: function(html) {
     //пpeдвapитeльнo oчищaeм нyжный элeмeнт cтpaни
     $("#result").empty();
     //и вывoдим oтвeт php cкpиптa
     $("#result").append(html);
   }
 });return false;
});

nikolaymac 27.06.2013 19:44

Цитата:

Сообщение от Deff (Сообщение 258856)
Ну вместо этого:

40	    $('.submit').click(function(){
41	     
42	    var answers = [];
43	    $.each($('.field'), function() {
44	        answers.push($(this).val()); 
45	     
46	    });
47	 
48	     
49	     
50	  // Отсылаем паметры
51	       $.ajax({
52	                type: "POST",
53	                url: "new.php",
54	                data: "data="+answers,
55	                // Выводим то что вернул PHP
56	                success: function(html) {
57	 //предварительно очищаем нужный элемент страницы
58	                        $("#result").empty();
59	//и выводим ответ php скрипта
60	                        $("#result").append(html);
61	                }
62	                 
63	        });

Наверно так
var outData='';
$('.submit').click(function(){
 outData = $(this).parents('form').serialize();
if(!outData) return;
// Oтcылaeм пaмeтpы
 $.ajax({
   type: "POST",
   url: "new.php",
   data: "data="+outData,
   // Bывoдим тo чтo вepнyл PHP
   success: function(html) {
     //пpeдвapитeльнo oчищaeм нyжный элeмeнт cтpaни
     $("#result").empty();
     //и вывoдим oтвeт php cкpиптa
     $("#result").append(html);
   }
 });return false;
});

выводит name= и все

nikolaymac 27.06.2013 20:25

спасайте !

Deff 27.06.2013 20:39

Цитата:

Сообщение от nikolaymac
выводит name= и все

Наверно HTML формы кривое, вставьте для теста и заполните поля
<form>
<div class="inputs">
<div><input type="text" name="dynamic1" class="field" >
<input type="text" name="dynamic1" class="field" ><br>
<input type="text" name="dynamic2" class="field" ><br>
<input type="text" name="dynamic3" class="field" ><br>
</div>
<input type="button" class="submit" value="ОК">
</form>

nikolaymac 27.06.2013 20:41

Дак вот именно что нельзя указывать dynamic1 2 3 так как формы создаются динамически ! тоесть может быть потом и dynamic 9 10 11

Deff 27.06.2013 20:43

Цитата:

Сообщение от nikolaymac
Дак вот именно что нельзя указывать dynamic1 2 3 так как формы создаются динамически ! тоесть может быть потом и dynamic 9 10 11

Вы для начала - проверьте как дал, про создания динамической вставки - вопрос второстепенный,
Проверьте воспроизводимость полученных данных из статического варианта...
Не надо пробовать всё и всё сразу

nikolaymac 27.06.2013 21:00

<body>





<form>



<div>
<form>
  <input type="text" name="a" value="1" id="a" />
  <input type="text" name="b" value="2" id="b" />
</form>
</div>
<input type="button" class="submit" value="ОК">
</form>
<div id="result"></div>


</body></html>



<script>
$(document).ready(function(){

$('.submit').click(function(){
  var s = $('form').serialize();


  // Отсылаем паметры
       $.ajax({
                type: "POST",
                url: "new.php",
                data: "data="+s,
                // Выводим то что вернул PHP
                success: function(html) {
 //предварительно очищаем нужный элемент страницы
                        $("#result").empty();
//и выводим ответ php скрипта
                        $("#result").append(html);
                }
        });  
	return false;						
	});

});
</script>


принемаю так
<?
$data=$_POST[data];

var_dump($data);

выдает только первый
string(11) "a=sss....значение"

nikolaymac 28.06.2013 09:28

Проблема не решилась... не могу даже в простой форме вывести результат форм

Deff 28.06.2013 18:49

Цитата:

Сообщение от nikolaymac
Проблема не решилась... не могу даже в простой форме вывести результат форм

Тут нужен совет по серверной части PHP-распарса данных из рост-запроса сериализованной формы (Думаю запрос стандартен)
Ищите в гугле либо задайте вопрос в раздел http://javascript.ru/forum/server/

nikolaymac 01.07.2013 15:30

Если есть у кого нибудь подобный скрипт РАБОЧИЙ ! скиньте код! где просто работает serialize с нескольких форм.. все уже перешарил ! не могу найти


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