Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Требуется перезапись отредактированной таблицы (https://javascript.ru/forum/server/58183-trebuetsya-perezapis-otredaktirovannojj-tablicy.html)

dee3000 08.09.2015 18:56

Требуется перезапись отредактированной таблицы
 
Использую для редактирования таблицы следующую конструкцию найденную в интернете (поскольку сам туп):
$(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- файл) Другими словами нужно сохранить отредактированный текст на сервере.

laimas 08.09.2015 20:07

А зачем поля формы помещать в элементы B или STRONG? И что дает таблица с полями формы и их значениями в ней?

Чтобы сохранить, нужно помещать в поле формы html-код таблицы и отправлять на сервер, перезаписывая этим содержимое файла.

dee3000 08.09.2015 20:30

То какими тегами обернуть поля не важно. Данная конструкция позволяет редактировать таблицу на лету (точнее только значения в тегах b и strong что весьма важно) Таблица содержит в себе прайс с весьма большим количеством значений. Повторюсь еще раз нужно чтоб контент-менеджер смог редактировать только значения цен в прайсе, но не всю таблицу.

dee3000 08.09.2015 20:32

Скажу еще, что вопрос не в том как и что редактировалось, а как сохранить отредактированную таблицу?

laimas 08.09.2015 20:45

Цитата:

Сообщение от dee3000
Данная конструкция позволяет редактировать таблицу на лету (точнее только значения в тегах b и strong что весьма важно)


Данная таблица содержит не значения b и strong, а поля input, вы же их помещаете в данные элементы. Если это и нужно, html-код таблицы, в чем проблема, получайте его, передавайте на сервер и сохраняйте. Только это слишком так редактировать.

dee3000 08.09.2015 20:51

поля input появляются Только при клике на текст в теге b и strong, а при клике в другую область поля исчезают оставив отредактированный текст

dee3000 08.09.2015 20:53

Конструкция схожая с contentEditable

рони 08.09.2015 20:54

dee3000,
получить с сервера JSON => сформировать таблицу => отредактировать и таблицу + JSON => отослать JSON на сервер

laimas 08.09.2015 20:56

Виноват, мимо ушей id="edit". :)

Ну а в чем конкретно проблема то?

laimas 08.09.2015 20:57

Цитата:

Сообщение от dee3000
Конструкция схожая с contentEditable

Ну это не то. А хранить все таки лучше только данные, а не таблицу.

laimas 08.09.2015 20:59

Цитата:

Сообщение от рони
олучить с сервера JSON => сформировать таблицу => отредактировать


А зачем тогда таблицу + JSON => отослать? )

рони 08.09.2015 21:00

Цитата:

Сообщение от dee3000
Использую для редактирования таблицы следующую конструкцию найденную в интернете

на всякий случай
http://javascript.ru/forum/misc/4559...tml#post302151

рони 08.09.2015 21:02

laimas,
в таблице изменения визуально - в обьекте из которого потом сформируется JSON для хранения и последующей передачи на сервер
отсылается только JSON

laimas 08.09.2015 21:05

рони,
ну если можно из данных сформировать требуемую таблицу, в которой опять таки изменяются только эти же данные, то сформировать ее может также и сервер. Зачем же гонять саму таблицу туда сюда?

рони 08.09.2015 21:09

laimas,
каким образом сервер узнает изменения? где гоняется таблица?
получили данные, изменили, сохранили результат на сервере - всё :-?

laimas 08.09.2015 21:18

Цитата:

Сообщение от рони
каким образом сервер узнает изменения?

А переданные данные, причем не важно как передавать, JSON или просто формой, это разве не признак изменения?

Если бы речь шла о каком-то ином содержимом, тут еще вопрос, но речь о таблице, а это как минимум строки и колонки в ней. Ведь не суть как хранить на сервере, в случае хранения данных в базе как бы поступили - получили, сформировали, изменили, получили данные, обновили. Все это можно описать и обычным массивом, включая и данные которые подлежат редактированию. Хранить на сервере его удобно в json, если почему-то база не используется.

А где гоняется таблица, этого я не знаю. )

рони 08.09.2015 21:33

laimas,
своё виденье описал выше, какие тебя вопросы мучают не понимаю.

laimas 08.09.2015 21:35

Цитата:

Сообщение от рони
какие тебя вопросы мучают не понимаю.

Да меня ничего не мучает :D
Я о том, что отправлять серверу только редактируемые данные.

рони 08.09.2015 21:37

Цитата:

Сообщение от laimas
Я о том, что отправлять серверу только редактируемые данные.

я только за :) если ТС сможет выцепить изменения, а его сервер их принять и обработать

dee3000 09.09.2015 00:21

Всем огромное спасибо.
Реализовал в итоге так:
$(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;
}

Все работает и меня в принципе устраивает, кроме того что при каждом сохранении в таблице, в б.д. добавляется перенос строки в верху перед текстом, может подскажите как устранить?

dee3000 09.09.2015 00:24

Цитата:

Сообщение от laimas (Сообщение 387657)
Ну это не то. А хранить все таки лучше только данные, а не таблицу.

а если данных ну очень много? в смысле это прайс на более 1000 наименований, как его хранить?

рони 09.09.2015 00:44

Цитата:

Сообщение от dee3000
добавляется перенос строки в верху перед текстом

может так попробовать
var content = $.trim($('#editable').html());

если конечно дело не в php ...

laimas 09.09.2015 02:03

Цитата:

Сообщение от рони
если ТС сможет выцепить изменения

Да не проблема :)

//данные таблицы
$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;

laimas 09.09.2015 02:07

Цитата:

Сообщение от dee3000
а если данных ну очень много? в смысле это прайс на более 1000 наименований, как его хранить?

1000, это не много. Более того, редактирование цен, уж извините, это редактирование параметров, но никак не контента. А вывод таблицы, так это описание товаров со всеми их параметрами, а уж какие поля может кто-то изменять, это уже совсем иной вопрос.

Вы что-то все в кучу смешали.

dee3000 09.09.2015 11:54

рони
Большое спасибо помогло

dee3000 09.09.2015 11:56

Цитата:

Сообщение от laimas (Сообщение 387710)
1000, это не много. Более того, редактирование цен, уж извините, это редактирование параметров, но никак не контента. А вывод таблицы, так это описание товаров со всеми их параметрами, а уж какие поля может кто-то изменять, это уже совсем иной вопрос.

Вы что-то все в кучу смешали.

Ну так потому что я глупый человек. По этому задаю вопросы на форуме, был бы умный уже отвечал бы на такие вопросы.

laimas 09.09.2015 13:41

Цитата:

Сообщение от dee3000
Ну так потому что я глупый человек.


Вряд ли. Вот только представление о прейскуранте какое-то непонятное.
Товары в базе, это их описание, типа артикул, наименование, производитель, цена. Кто, все ли, если не все, то какие параметры товара может изменять, отношения к прейскуранту не имеет, это вопросы администрирования данных.
А вот получение самого прейскуранта, так это получение товаров в базе, всех или только некоторых их полей, и вывод в необходимом формате - html-таблица, excel, pdf. Щелкать в нем и править необходимости нет. Иначе это не прейскурант, а нечто иное.

dee3000 09.09.2015 17:17

Цитата:

Сообщение от laimas
Вот только представление о прейскуранте какое-то непонятное.

Я вас понимаю и Вы абсолютно правы.
но дело в том что у одного, скажем товара много условий для цены. Чем делать таблицу с большим количеством полей, и потом изобретать сложные запросы и работать с массивами, мне гораздо проще так как я уже сделал и работает ))) В любом случае большущее спасибо за Ваши ответы, это бесценный опыт для меня!

laimas 09.09.2015 18:29

Цитата:

Сообщение от dee3000
но дело в том что у одного, скажем товара много условий для цены.

У товара не может быть условий для цены, условия это торг, там да. А у вас цена, а на ее могут влиять какие либо доп. характеристики товара. А их также не сложно описать и связать с товаром, а значит и просчитать цену.

Делайте как считаете нужным, но так не поступают, ни дай бог что-то слегка изменить придется, и вам придется править все ваши грабли.


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