LINUX.ORG.RU

[js][html][php] Передача html таблицы через POST

 , ,


0

1

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

Есть таблица, которая формируется динамически пользователем через JS. В таблице 5 колонок. Каждая строчка после обработки отправится в БД. Вопрос в том, как с помощью paramname=value передать данные таблицы? И как их потом принимать?

К примеру можно каждую строчку передавать как paramname + номерстрочки = value, а потом numrows - количество полей таблицы, а потом в php делать цикл к примеру вида

for($i=1; $i < $_POST[numrows]; $i++ ) {
z[table[i]["paramname"] = $_POST["paramname" + $i]; 
}

Тот факт, что принимается массивом не важен... Может есть более приемлимый и красивый вариант передать данные таблицы?

★★★

json'ом стелать одну сроку, пихать в какой-нибудь hidden и потом пыхом ее парсить

anonymous
()

либо json как сказал анонимус, либо в виде любого другого текстового формата который вам легко разбирать (например key\tvalue\nkey2\tvalue\n...), чтобы не тащить парсер json.

Только ни в коем случае не используйте в качестве формата PHP с последующим eval - ибо это позволит выполнять любой код на вашем серевере удаленно.

kifer
()

есть, конечно, один вариант, без всяких аяксов, хотя он мне и не нравится, ибо пахнет говнокодом. можно инпуты называть как item[rowNum][colNum], типа:

---1 строка---
<input type=text name=«item[0][0]»>
<input type=text name=«item[0][1]»>
<input type=text name=«item[0][2]»>

---2 строка---
<input type=text name=«item[1][0]»>
<input type=text name=«item[1][1]»>
<input type=text name=«item[1][2]»>

и т.д. потом в пхп работай с $_POST[«item»] как с двумерным массивом

heisenberg ★★
()
Ответ на: комментарий от anonymous
	var buildJSON = function() { 
		var objJSON=[];
		for (i=1; i<$$('#denTable tbody tr').size(); i++)
		{
			objJSON.push
({
name: $$('#denTable tbody tr')[i].children()[1].text(),
count: $$('#denTable tbody tr')[i].children()[2].text(),
price: $$('#denTable tbody tr')[i].children()[3].text()
});
		}
		return JSON.stringify(objJSON);
		}

Подскажешь лучше вариант?

fjfalcon ★★★
() автор топика
Ответ на: комментарий от fjfalcon

Запросто как минимум не быдлокодить копипастя самую ресурсоемкую задачу: $$('#denTable tbody tr')[i].children() при твоем стиле кодирования можно каждую ячейку таблицы голубиной почтой отправлять, все равно трижды продублированный селектор в цикле будет меделенее. Писец

_________

//wfrr из бани с любовью :)

anonymous
()
Ответ на: комментарий от anonymous

Предлагаешь разбирать данные tr? Я открыт для предложений :) И если не нравится JSON - можно же просто сделать длинную строчку вида 0,value0,value1,value2.1,value0,value2,value3 и т.д.

fjfalcon ★★★
() автор топика
Ответ на: комментарий от fjfalcon

[url=http://www.linux.org.ru/jump-message.jsp?msgid=5876118&cid=5876212]это я писал тебе[/url], ну а если ты не можешь культурно селекторами разобрать табличку то я даже не знаю куда можно еще катится миру, ежели въеб программисты вместо DOM (в коем ячейки идут в виде массива) изучают уг типа jquery

_________

//wfrr из бани с любовью :)

anonymous
()
Ответ на: комментарий от anonymous

Сейчас сына уложу - напишу вариант с использованием dom'a. Спасибо.

fjfalcon ★★★
() автор топика
Ответ на: комментарий от anonymous

но вотще дабы нести свет знанья во тьму лора, я тебе дам совет, погляди на

var table = $('#denTable')[0]
table.rows[0].cells[0].textContent //вот как ды думаешь что это вернет?

_________

//wfrr из бани с любовью :)

anonymous
()
Ответ на: комментарий от anonymous

Наступает на грабли с thead'ом. Всегда возвращает cells.length в 0. Но смысл я понял, спасибо.

fjfalcon ★★★
() автор топика

Если сабмитить поля формы с именами «name[]», то пых сам из них построит массив, можно не заморачиваться с индексами вручную

thesame ★★★★
()
Ответ на: комментарий от thesame

Все здорово, только форма тут не используется =) Как и поля input.

fjfalcon ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.