передача данных из таблицы в php
Господа, такой вопрос. Есть таблица, заполняется добавлением строк через table.insertRow, insertCell. Визуально на странице таблица заполняется. Как можно данные этой таблицы передать на сервер (PHP)?
|
|
Deff, спасибо огромное!
|
Доброго времени суток. Столкнулся с параллельной проблемой.
Есть таблица, в ечейках лежат input`ы. Задача: сделать кнопку, которая добавляет в таблицу строчки. Я сделал так: function cl() { kol++; document.getElementById('table_element').innerHTML =document.getElementById('table_element').innerHTM L+'<tr><td><!-- Производитель--><select class="inp" name="maker'+kol+'" size="1"><option value="Форпост">Форпост</option><option value="Геона">Геона</option></select></td><td><!-- Марка--><input class="inp" name="model'+kol+'" type="text" size="10" maxlength="25"/></td><td><!-- Раз-р--><input class="inp" name="size'+kol+'" type="text" size="8" maxlength="10"/></td><td><!--Открыв--><select class="inp" name="rl'+kol+'" size="1"><option selected="" value=""></option><option value="Прав">Прав</option><option value="Лев">Лев</option></select></td><td><!-- Кол-во--><input class="inp" name="tk'+kol+'" type="text" size="5" maxlength="8" /></td><td><!-- Цена--> <input class="inp" name="tz'+kol+'" type="text" size="15" maxlength="20"/></td></tr>'; var i= document.getElementById('num').value; var a=parseInt(i)+1; document.getElementById('num').value=new String(a); } Проблема в следующем. Юзер заполняет инпуты в строчках, а когда нажимает "добавить строку", то функция перерисовывает таблицу заново и текст в инпутах слетает во всей таблице. В первом посте увидел намёк на решение проблемы, но на скрипте пишу второй день, подскажите по подробнее. И кстати есть у меня ответ на первый пост. Именно посредством PHP. Из функции выше видно, что инпутам к имени приписывается номер строчки( var kol). Вся таблица находится внутри тэга <form> и после таблицы следует <input id="num" name="kolvo" type="hidden" value="1"/> Последняя строка функции задаёт в скрытом инпуте количество имеющихся строк. А скрипт обработчик - счётчик от 1 до $_POST[kolvo] c циклом, если надо подробнее - пишите. |
Лось, во-первых, оборачивай код в
[JS]..[/JS] Во-вторых, твой пример не работает в IE8. В-третьих смесь js и html в кучу вызывает тошноту и головную боль. В-четвертых не нужно ни каких kolvo. Если поля именовать как name="field[]" то в php придет массив $_POST['field']. Делай так: изначально у тебя же есть как минимум одна строка таблицы? Вот и клонируй ее через cloneNode(true). Потом клонируешь клон и добавляешь в таблицу. |
Не суди строго. Второй день JS учу. По поводу IE - я пишу не для широкого пользования, у меня просто есть задача написать небольшую программу с каталогом и генерацией документов, с числом клиентов от 1 до 20. Я не профи и не скоро им стану. В пост уходит всё как надо, это уже проверено, всё работает. В общем, мой вариант астрономически далёк от совершенства, но всётаки он работает. Спасибо за критику, учту замечания.
Кстати о "шедеврах"... ещё одна адовая строчка родилась:
...
cell1.innerHTML='<select class="inp" name="maker'+kol+'" size="1"> <?php include('../../../config/makers.php'); ?></select>';
...
У меня чуть мозг не взорвался когда ЭТО появилось на уме. |
Цитата:
|
<table id="mytable">
<tr>
<td><input /></td>
<td><select><option>Бла бла</option></select>
</tr>
</table>
<button id="mybutton">Еще</button>
<script>
(function(){
var table = document.getElementById('mytable'),
tbody = table.tBodies[0];
button = document.getElementById('mybutton'),
sample = table.rows[0];
button.onclick = function() {
tbody.appendChild(sample.cloneNode(true));
}
})()
</script>
|
Цитата:
|
Цитата:
foreach(array('a','b') as $item) {
echo $item;
}
|
как работает foreach я знаю, не понимаю только, как мне это должно помочь.
|
Цитата:
|
мне нужно в цикле дать имена инпутам. 1 шаг: "первый1", "второй1", "третий1"...
2 шаг: "первый2", "второй2", "третий2"... количество выполнений цикла соответствует количеству добавляемых строчек. Я написал следующее:
var kol=0;
function cl()
{
kol++;
var table=document.getElementById("table_element");
var row=table.insertRow(1);
var cell1=row.insertCell(0);
var cell2=row.insertCell(1);
var cell3=row.insertCell(2);
var cell4=row.insertCell(3);
var cell5=row.insertCell(4);
var cell6=row.insertCell(5);
cell1.innerHTML='<select class="inp" name="maker'+kol+'" size="1"> <? include('../../../config/makers.php'); ?></select>';
cell2.innerHTML='<input class="inp" name="model'+kol+'" type="text" size="10" maxlength="25"/>';
cell3.innerHTML='<input class="inp" name="size'+kol+'" type="text" size="8" maxlength="10"/>';
cell4.innerHTML='<select class="inp" name="rl'+kol+'" size="1"><option selected="" value=""></option><option value="Прав">Прав</option><option value="Лев">Лев</option>';
cell5.innerHTML='<input class="inp" name="tk'+kol+'" type="text" size="5" maxlength="8" />';
cell6.innerHTML='<input class="inp" name="tz'+kol+'" type="text" size="15" maxlength="20"/>';
Но как ты верно заметил "Если поля именовать как name="field[]" то в php придет массив $_POST['field']." Получается, что цифра на конце имён инпутов теряется при передаче в POST. Функция, которую ты написал, проблему не решает - получаются клоны с идентичными именами. Вопрос: Как дать инпутам имена с номером строки на конце? |
Цитата:
|
Допустим имеем параметры: model[]=a&model[]=b&size[]=1&size[]=2
В php работаем в таком ключе:
$models = $_REQUEST['model'];
$sizes = $_REQUEST['size'];
foreach ($models as $key => $value) {
echo $models[$key];
echo $sizes[$key], '<br>';
}
|
похоже мы друг друга не поняли и только запутали.
выполнение print_r($_POST); выдаёт мне: Array ( [maker] => Форпост [model] => [size] => [rl] => [tk] => [tz] => и они не являются массивами. А должно быть: [model1] => [size1] => [rl1] => [tk1] => [tz1] => [model2] => [size2] => [rl2] => [tk2] => [tz2] => и т.д. твой вариант не помог. |
Цитата:
Код я проверял - все как надо работает. |
danik.js,
может созвонимся в скйпе? поможешь? |
danik.js,
сделал как ты советовал, не работает, такое чувство, что сервер просто игнорирует все элементы формы, которые получены через js |
| Часовой пояс GMT +3, время: 19:39. |