Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как массив из Джавы переслать в php


Автор: Mushu 20.7.2004, 13:51
Как массив из Джавы переслать в php методом пост

Автор: Sardar 20.7.2004, 14:23
Создать форму, накидать в нее полей со значениями из массива, имена лучше имя[], тогда в PHP тоже массив получишь.

Автор: Mushu 20.7.2004, 14:57
Такая фишка не пройдет
Мне надо спомощью джавы собрать данные с 2-форм (ОБЬЕДИНИТЬ ИХ НЕКАК НЕЛЬЗЯ) и передать ето скрипту ПШП
Как это моно реализовать (Если моно то пример ) почти весь инет облазил но так и ненашел как
реализуется передача массива из джавы в пшп


Люди помогите!!!!!!!!!!

Автор: <Spawn> 20.7.2004, 15:22
Mushu Почему не пройдет то? Можешь, например, в hidden элементе(ах) сохранить что нужно и в ПХП обработать

Автор: Sardar 20.7.2004, 16:07
Mushu пойми данные серверу можно передать стяндартными средствами: через куки(размер ограничен), через GET(в URL, размер ограничен), через POST(только формой).

Создаем форму, набиваем ее элементами hidden, отсылаем форму. Все это делаем из JS, например:
Код
function sendArray(arr) {
 f=document.createElement("FORM"); //создаем форму
 document.body.appendChild(f);
 f.action="http://localhost/test.php"; //куда отсылается форма
 f.method="POST";
 //f.enctype = "application/x-www-form-urlencoded";
 for(var i=0; i<arr.length; i++) { //набиваем данные
   var o=document.createElement("INPUT");
o.setAttribute("name","js_array[]"); //имя переменной в PHP
o.setAttribute("value",arr[i]);
o.setAttribute("type","hidden");
f.appendChild(o);
 }
 f.submit();
}
sendArray(["test","test21","test34"]); //проверка


Автор: Mushu 21.7.2004, 11:48
Sardar- спасибо, но много еще непонятног моно пример поподробней как происходит считавание
данных из формы в джаву и потом набиваем ее элементами hidden, отсылаем форму.


Автор: Sardar 21.7.2004, 12:22
Цитата
как происходит считавание данных из формы в джаву

Ты хоть немного знаком с DOM? Какой то очень детский вопрос...
document.forms.form_name.elements.element_name.value - знечение поименнованного элемента. Даллее должен сообразить, также поищи по форуму.
Мой предидущий код хорошо коментированн, отсылает массив через форму созданную на месте. Писать весь код тебе мне не интересно, т.к. ты ничему не научишся.

Я так понял у тебя множество форм, с которых ты вроде как собрал массив - ты знаешь толк в извращениях smile.gif Создай одну большую форму и не парься!

Автор: Mushu 21.7.2004, 13:26
Ну нельзя одну большую форму.
Я бы сам рад

Автор: Mushu 21.7.2004, 14:02
Sardar если не затруднит можно хотя бы наметки кода, а то совсем ниче не ясно, так как я в веб полный ламер

Автор: Sardar 22.7.2004, 13:28
Ладно вот тебе готовый код, жаль что ты решил сам ничему не учится...
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script language="Javascript" type="text/javascript">
<!--
//функция отправляющая массив POST'ом через форму
function sendArray(arr) {
 f=document.createElement("FORM");
 document.body.appendChild(f);
 f.action="http://localhost/test.php"; //адрес куда отправляем форму
 f.method="POST";
 //f.enctype = "application/x-www-form-urlencoded";
 for(var i=0; i<arr.length; i++) {
   if(arr[i]==null||arr[i]=="") continue;
   var o=document.createElement("INPUT");
o.setAttribute("name","js_array[]"); //имя переменной полученной в PHP: $_POST["js_array"][0...]
o.setAttribute("value",arr[i]);
o.setAttribute("type","hidden");
f.appendChild(o);
 }
 f.submit();
}
//функция собирающая значения элементов всех элементов формы
function form_elements(form) {
var ret=[];
for(var i=0; i<form.elements.length; i++) {
 ret.push(form.elements[i].value);
}
return ret;
}
//достаем элементы из формы, отсылаем массив
function doeit() {
var arr=form_elements(document.forms.test1).concat(form_elements(document.forms.test2));
sendArray(arr);
}
//-->
</script>
</head>
<body>
<form name="test1">
<input type="text">
<input type="hidden" value="wow">
</form>
<form name="test2">
<input type="text">
<input type="hidden" value="ura!!!">
</form>
<button onClick="doeit()">Send</button>
</body>
</html>

Автор: Mushu 23.7.2004, 10:54
Спасибо но в примере есть ошибка
Браузер орет

Строка 28
Символ 2
Ошивка: Обьект не поддерживает это свойство или метод
( ret.push(form.elements[i].value);)




Автор: Mushu 23.7.2004, 11:27
Похода ошибка из-за версии ишака на 6 работает а на 5 нифига

Автор: Mushu 23.7.2004, 12:26
не всетаки непонятно как реализуется забивка массива
надо:

<form name=test1 >
<INPUT TYPE="CHECKBOX" NAME="property[]" value="1">1<br />
<INPUT TYPE="CHECKBOX" NAME="property[]" value="2">2<br />
<INPUT TYPE="CHECKBOX" NAME="property[]" value="3">3<br />
</FORM>

<form name=test2 >
<INPUT TYPE="CHECKBOX" NAME="prop[]" value="11">11<br />
<INPUT TYPE="CHECKBOX" NAME="prop[]" value="22">22<br />
<INPUT TYPE="CHECKBOX" NAME="prop[]" value="33">33<br />
</FORM>

<form name=test3 >
<INPUT TYPE="CHECKBOX" NAME="per[]" value="111">111<br />
<INPUT TYPE="CHECKBOX" NAME="per[]" value="222">222<br />
<INPUT TYPE="CHECKBOX" NAME="per[]" value="333">333<br />
</FORM>

и надо считать так чтоб в джаве получился масив вот такой: имя, значение и т.д
mass[]=(property[],1,property[],2,property[],3,
prop[],11,prop[],22,prop[],33,
per[],111,per[],222,per[],333)


Помогите разобраться плиз

Автор: Ignat 23.7.2004, 12:36
А где индексы массивов?
<form name=test1 >
<INPUT TYPE="CHECKBOX" NAME="property[1]" value="1">1<br />
<INPUT TYPE="CHECKBOX" NAME="property[2]" value="2">2<br />
<INPUT TYPE="CHECKBOX" NAME="property[3]" value="3">3<br />
</FORM>
Вдруг юзер сразу два чекбокса отметит
Добавлено @ 12:37
Кстати, в пшп попадут только отмеченные значения

Автор: Mushu 23.7.2004, 13:28
нет мне надо вогнать в джаву массив
пример:
mass[]=(property[],1,property[],2,property[],3,
prop[],11,prop[],22,prop[],33,
per[],111,per[],222,per[],333)

Автор: Sardar 23.7.2004, 13:30
Странно, не ожидал...
Цитата
не всетаки непонятно как реализуется забивка массива надо:

Это немного нагло с твоей стороны... просить полносьтю готовый код не дав при этом четкого ТЗ, дорабатывая его на ходу.... bored.gif
Я написал тебе выше, ты как раз и хотел "хотя бы наметки кода"...
Как собрать имена/значения с полей формы тоже показал, не понял - поищи по форуму... Доработай или выкладывай полное тех.задание, будет время и настроение - напишу.

Где ошибка, замени ret=[]; на ret=new Array(), хотя ранее с таким глюком не встречался...

Автор: Mushu 23.7.2004, 14:06
можно поподробнее вот здесь что происходит
ret.push(form.elements[i].value);
Добавлено @ 14:10
все разобрался возвращает последний элемент, добавленный в массив.
клева

Автор: Mushu 23.7.2004, 14:25
насчет ошибки пробовал как ты советовал заменить на ret=new Array()
не помогло он орет именно на ret.push(form.elements[i].value);
что самое страное прогнал другие оболочки типа опера нетскейп и тд нормально работает а в ишаке 5 арет блогим матом


2. что хотелось бы узнать как обращаться к форме если она находится в ифрейме

Автор: Sardar 23.7.2004, 17:51
Как к любому другому обьекту, document.frames.iframe_name.document.forms.form_name.elements.element_name.value.

Цитата
он орет именно на ret.push(form.elements[i].value);

Убедись что form у тебя существует, похоже ты хотел взять его с другого фрейма обращаясь только по ИД, смотри пример выше.

Автор: Sardar 23.7.2004, 19:04
Вот вариант:
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script language="Javascript" type="text/javascript">
<!--
//отсылаем обьект {names: Array, values: Array}
function sendArray(cont) {
 f=document.createElement("FORM");
 document.body.appendChild(f);
 f.action="http://localhost/test.php"; //куда
 f.method="POST"; //как, лучше оставь POST
 //f.target=""; //в какое окно
 //f.enctype = "application/x-www-form-urlencoded";
 for(var i=0; i<cont.names.length; i++) {
   if(cont.values[i]==null||cont.values[i]=="") continue; //пропустим пустые, если нужны убери
   var o=document.createElement("INPUT");
o.setAttribute("name",cont.names[i]+"[]");
o.setAttribute("value",cont.values[i]);
o.setAttribute("type","hidden");
f.appendChild(o);
 }
 f.submit();
}
//соберем все элементы формы
function getFormElements(form, parnt) {
var names=[],values=[];
for(var i=0; i<form.elements.length; i++) {
 names.push(form.elements[i].name);
 values.push(form.elements[i].value);
}
if(parnt) {
 parnt.names=parnt.names.concat(names);
 parnt.values=parnt.values.concat(values);
 return parnt;
} else return {names: names, values: values};
}
//собственно остылаем
function sendForm() {
var obj1=getFormElements(document.forms.test);
var cont=getFormElements(window.frames.frm.document.forms.test,obj1);
sendArray(cont);
}
//-->
</script>
</head>

<body>
<form name="test">
<input type="hidden" name="hoi" value="bla1">
<input type="hidden" name="hoi" value="bla2">
<input type="hidden" name="hoi" value="bla3">
<input type="hidden" name="nou" value="bla">
<input type="hidden" name="nou" value="test">
<input type="hidden" name="nou" value="ura">
<input type="hidden" name="sdr" value="blerf">
<input type="hidden" name="sdr" value="ble">
<input type="hidden" name="sdr" value="bl">
</form>
<!-- скопируй форму выше в ифрейм -->
<iframe name="frm" src="iframe_form_src.htm"></iframe><br>
<button onClick="sendForm()">Test</button>
</body>
</html>


Одного не пойму, у тебя в разных(по твоим скудным обьяснениям) фреймах формы, ты хочешь их разом отослать? Зачем тогда извращатся? Для каждой формы вызови submit(), формы перезагрузятся в своих окнах... Или ты скрытно хочешь отсылать инфу, без перезагрузки?

Автор: Mushu 26.7.2004, 10:40
не просто одна форма в ифрейме 2 форма тоже ифрейме 3 форма на главной страници данный беруться из этих форм для запроса к бд

разобрался вчем ошибка была насчет оператора push он в джаве 1.2не потдерживается


Автор: Mushu 26.7.2004, 11:15
СПАСИБО ТЕБЕ БОЛЬШЕЕ ЗА ТО ЧТО ВАЗИЛСЯ СОМНОЙ

но остался один единственный вопрос в который я ваше вошел в штопор или тупик
я взял скрипт твой 1 ошибка вот в чем он некоретно считавает данные когда чекеты в таблице

Код

<FORM name="test2" ><table width=100% border=1>
<TR>
   <TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="10"></TD><TD>10</TD> <TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="20"></TD><TD>20</TD>
</TR>
  <TR><TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="30"></TD><TD>30</TD> <TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="50"></TD><TD>50</TD>
  </TR>
  <TR><TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="60"></TD><TD>60</TD> <TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="70"></TD><TD>70</TD>
  </TR><TR><TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="80"></TD><TD>80</TD> <TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="100"></TD><TD>100</TD>
   </TR><TR><TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="120"></TD><TD>120</TD> <TD><INPUT TYPE="CHECKBOX"  name="pok[]" value="130"></TD><TD>130</TD> </TR>
  </TR></TABLE>
</FORM>



непонятно как он его обрабатывает в таблице

Код

//функция собирающая значения элементов всех элементов формы
function form_elements(form) {
var ret=new Array();


for(var i=0; i<form.elements.length; i++) {
if(form.elements[i].checked){
ret[i]=form.elements[i].name;    //,беру имя
ret[i+1]=form.elements[i].value; // потом значение
}
}
return ret;
}

если обычный список чекетов
например
<INPUT TYPE="CHECKBOX" NAME="property[]" value="1">1<br />
<INPUT TYPE="CHECKBOX" NAME="property[]" value="2">2
<INPUT TYPE="CHECKBOX" NAME="property[]" value="3">3<br />
то работае (заносит сначала имя а потом значение )

а если чекеты в таблице или так
<INPUT TYPE="CHECKBOX" NAME="property[]" value="1">1 <INPUT TYPE="CHECKBOX" NAME="property[]" value="111">1<br />
<INPUT TYPE="CHECKBOX" NAME="property[]" value="2">2 <INPUT TYPE="CHECKBOX" NAME="property[]" value="112">1<br />
<INPUT TYPE="CHECKBOX" NAME="property[]" value="3">3 <INPUT TYPE="CHECKBOX" NAME="property[]" value="1">1<br />

то путиница идет какаята

HELP

Автор: Mushu 26.7.2004, 14:04
Sardar огромное спасибо все вавсем разобрался

Автор: Mushu 29.7.2004, 11:22
забыл спросить как выгледит в штмл сгенирированная форма


Код

//функция отправляющая массив POST'ом через форму
function sendArray(arr) {
f=document.createElement("FORM");
document.body.appendChild(f);
f.action="otchet.php"; //адрес куда отправляем форму
f.method="POST";
//f.enctype = "application/x-www-form-urlencoded";
for(var i=0; i<arr.length; i++) {
  if(arr[i]==null||arr[i]=="") continue;
  var o=document.createElement("INPUT");
o.setAttribute("name","js_array[]"); //имя переменной полученной в PHP: $_POST["js_array"][0...]
o.setAttribute("value",arr[i]);
o.setAttribute("type","hidden");
f.appendChild(o);
}
f.submit();

}



проблема возникает с f.action="otchet.php"; //адрес куда отправляем форму
или прописовать полный путь не работает

Автор: Sardar 29.7.2004, 13:39
Kакая ошибка выскакивает? Пропиши полный путь: _http://....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)