Требуется перезапись отредактированной таблицы
Использую для редактирования таблицы следующую конструкцию найденную в интернете (поскольку сам туп):
$(function () { $('b, strong').click(function (e) { //ловим элемент, по которому кликнули var t = e.target || e.srcElement; //получаем название тега var elm_name = t.tagName.toLowerCase(); //если это инпут - ничего не делаем if (elm_name == 'input') { return false; } var val = $(this).html(); var code = '<input type="text" id="edit" value="' + val + '" />'; $(this).empty().append(code); $('#edit').focus(); $('#edit').blur(function () { var val = $(this).val(); $(this).parent().empty().html(val); }); }); }); $(window).keydown(function (event) { //ловим событие нажатия клавиши if (event.keyCode == 13) { //если это Enter $('#edit').blur(); //снимаем фокус с поля ввода } }); Буду весьма и весьма признателен если подскажете как реализовать перезапись файла с таблицей на сервере (не в б.д. а просто html- файл) Другими словами нужно сохранить отредактированный текст на сервере. |
А зачем поля формы помещать в элементы B или STRONG? И что дает таблица с полями формы и их значениями в ней?
Чтобы сохранить, нужно помещать в поле формы html-код таблицы и отправлять на сервер, перезаписывая этим содержимое файла. |
То какими тегами обернуть поля не важно. Данная конструкция позволяет редактировать таблицу на лету (точнее только значения в тегах b и strong что весьма важно) Таблица содержит в себе прайс с весьма большим количеством значений. Повторюсь еще раз нужно чтоб контент-менеджер смог редактировать только значения цен в прайсе, но не всю таблицу.
|
Скажу еще, что вопрос не в том как и что редактировалось, а как сохранить отредактированную таблицу?
|
Цитата:
Данная таблица содержит не значения b и strong, а поля input, вы же их помещаете в данные элементы. Если это и нужно, html-код таблицы, в чем проблема, получайте его, передавайте на сервер и сохраняйте. Только это слишком так редактировать. |
поля input появляются Только при клике на текст в теге b и strong, а при клике в другую область поля исчезают оставив отредактированный текст
|
Конструкция схожая с contentEditable
|
dee3000,
получить с сервера JSON => сформировать таблицу => отредактировать и таблицу + JSON => отослать JSON на сервер |
Виноват, мимо ушей id="edit". :)
Ну а в чем конкретно проблема то? |
Цитата:
|
Цитата:
А зачем тогда таблицу + JSON => отослать? ) |
Цитата:
http://javascript.ru/forum/misc/4559...tml#post302151 |
laimas,
в таблице изменения визуально - в обьекте из которого потом сформируется JSON для хранения и последующей передачи на сервер отсылается только JSON |
рони,
ну если можно из данных сформировать требуемую таблицу, в которой опять таки изменяются только эти же данные, то сформировать ее может также и сервер. Зачем же гонять саму таблицу туда сюда? |
laimas,
каким образом сервер узнает изменения? где гоняется таблица? получили данные, изменили, сохранили результат на сервере - всё :-? |
Цитата:
Если бы речь шла о каком-то ином содержимом, тут еще вопрос, но речь о таблице, а это как минимум строки и колонки в ней. Ведь не суть как хранить на сервере, в случае хранения данных в базе как бы поступили - получили, сформировали, изменили, получили данные, обновили. Все это можно описать и обычным массивом, включая и данные которые подлежат редактированию. Хранить на сервере его удобно в json, если почему-то база не используется. А где гоняется таблица, этого я не знаю. ) |
laimas,
своё виденье описал выше, какие тебя вопросы мучают не понимаю. |
Цитата:
Я о том, что отправлять серверу только редактируемые данные. |
Цитата:
|
Всем огромное спасибо.
Реализовал в итоге так: $(document).ready(function() { $("#save").click(function (e) { var content = $('#editable').html(); $.ajax({url: 'save.php', type: 'POST', data: { content: content }, success:function (data) { if (data == '1'){ $("#status") .addClass("success") .html("Все изменения сохранены.") .fadeIn('fast') .delay(3000) .fadeOut('slow'); } else{ $("#status") .addClass("error") .html("Произошла ошибка во время сохранения данных!") .fadeIn('fast') .delay(3000) .fadeOut('slow'); } } }); }); }); кнопка: <button id="save">Сохранить</button> содержимое файла save.php: $baza = mysql_connect ("localhost","admin","pass"); mysql_select_db ("db",$baza); mysql_query("SET NAMES 'UTF8'"); $content = $_POST['content']; $content = mysql_real_escape_string($content); $sql = "UPDATE `db`.`price` SET `table` = '$content'"; if (mysql_query($sql)) { echo 1; } Все работает и меня в принципе устраивает, кроме того что при каждом сохранении в таблице, в б.д. добавляется перенос строки в верху перед текстом, может подскажите как устранить? |
Цитата:
|
Цитата:
var content = $.trim($('#editable').html()); если конечно дело не в php ... |
Цитата:
//данные таблицы $table = [ ['aaaa aaaa aaaa', 'bbb bbb bbb', 'ccc ccc ccc'], ['aaaa aaaa <b></b> aaaa <strong></strong>', 'bbb bbb bbb', 'ccc ccc <b></b> ccc'], ['aaaa <em></em> aaaa aaaa', '<b></b> bbb bbb bbb', 'ccc ccc ccc'] ]; //редактируемые данные, только их изменяем/сохраняем $data = [ 1=>[['AAAAA', 'BBBBB'], 2=>['CCCCC']], 2=>[['DDDDD'], ['EEEEE']] ]; //если вывод для редактирования, то форма $edit = 1; //вывод таблицы $tbl = '<table border=1><tr>' . implode('</tr><tr>', array_map(function($k, $v) use($data, $edit) { if($data[$k]) { foreach($data[$k] as $n=>$d) { preg_match_all("/(<[^>]+>)(<\/[^>]+>)/U", $v[$n], $a); foreach($a[0] as $j=>$m) $v[$n] = preg_replace("#$m#", $a[1][$j] . ($edit ? '<input name="data['.$k.']['.$n.']" value="'.htmlspecialchars($d[$j]).'">' : $d[$j]) . $a[2][$j], $v[$n], 1); } } return '<td>' . implode('</td><td>', $v) . '</td>'; }, array_keys($table), $table)) . '</tr></table>'; echo $tbl; |
Цитата:
Вы что-то все в кучу смешали. |
рони
Большое спасибо помогло |
Цитата:
|
Цитата:
Вряд ли. Вот только представление о прейскуранте какое-то непонятное. Товары в базе, это их описание, типа артикул, наименование, производитель, цена. Кто, все ли, если не все, то какие параметры товара может изменять, отношения к прейскуранту не имеет, это вопросы администрирования данных. А вот получение самого прейскуранта, так это получение товаров в базе, всех или только некоторых их полей, и вывод в необходимом формате - html-таблица, excel, pdf. Щелкать в нем и править необходимости нет. Иначе это не прейскурант, а нечто иное. |
Цитата:
но дело в том что у одного, скажем товара много условий для цены. Чем делать таблицу с большим количеством полей, и потом изобретать сложные запросы и работать с массивами, мне гораздо проще так как я уже сделал и работает ))) В любом случае большущее спасибо за Ваши ответы, это бесценный опыт для меня! |
Цитата:
Делайте как считаете нужным, но так не поступают, ни дай бог что-то слегка изменить придется, и вам придется править все ваши грабли. |
Часовой пояс GMT +3, время: 04:14. |