За последние 24 часа нас посетили 22364 программиста и 1033 робота. Сейчас ищут 630 программистов ...

Динамическое обновление таблицы Mysql

Тема в разделе "PHP для новичков", создана пользователем Reken, 10 дек 2020.

Метки:
  1. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Подскажите пожалуйста

    Если мне требуется вывести таблицу из mysql, с последующим динамическим редактированием ячеек...

    Я так понимаю это сразу в сторону JS нужно смотреть.

    Как вывести таблицу из mysql через php на веб страницу это понятно, непонятно как её динамически редактировать...

    Подскажите где можно почитать нужную литературу или примеры, именно на динамическое обновление таблиц mysql, ну или хотя бы просто на динамическое обновление.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    прочесть можно в интернете
    если прямо в таблице и без перезагрузки - то да без js не сделать
    есть готовые библиотеки таблиц - которые динамически берут данные редактируют итд ... DataTable например итд
    в общем случае - выводите значение например в <input type='text'> вешаете на него обработчик на изменение или по нажатию кнопок, при срабатывании обработчика - шлете необходимые данные на сервер
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Reken, для "затравки": DOM-дерево (javascript.ru).
    Там чуток про структуру таблиц есть. Начиная со слов "Важный «особый случай» – работа с таблицами".
     
  4. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Всем спасибо. Попробую поэкспериментировать.
     
  5. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Помогите пожалуйста мне разобраться. Кое что в динамической таблице у меня уже получилось, но всё равно не совсем что нужно.

    Делаю так:
    Содержание страницы с таблицей:
    Код (Text):
    1. <html>
    2. <body>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
    5. <script type="text/javascript" src="jquery.js"></script>
    6. </head>
    7.  
    8. <form id="myForm">
    9. <table>
    10. <tr><td>Значение 1</td><td>Значение 2</td><td></td></tr>
    11. <tr><td><input type='text' placeholder='1' input id='num1'></td><td><input type='text' placeholder='1' input id='num2'></td><td><input type="submit" value="Изменить"></td></tr>
    12. <table/>
    13. </form>
    14.  
    15. <div id="content">
    16.  
    17. </div>
    18.  
    19.  
    20.     <script>
    21.         $(document).ready(function(){
    22.        
    23.             $('#myForm').submit(function(){
    24.                 $.ajax({
    25.                     type: "POST",
    26.                     url: "script.php",
    27.                     data: {num1: $("#num1").val(), num2: $("#num2").val()},                                    
    28.                     success: function(html){
    29.                         $("#content").html(html);
    30.                        }
    31.                 });
    32.  
    33.  
    34.  
    35.                 return false;
    36.             });
    37.            
    38.         });
    39.     </script>
    40.    
    41. </body>
    42. </html>
    Содержание обработчика:
    Код (Text):
    1. <?php
    2.  
    3. $number1 = $_REQUEST['num1'];
    4. $number2 = $_REQUEST['num2'];
    5.  
    6. echo <<<HTML
    7. <table>
    8. <tr><td>Значение 1</td><td>Значение 2</td><td></td></tr>
    9. <tr><td><input type='text' placeholder='$number1' input id='num1'></td><td><input type='text' placeholder='$number2' input id='$num2'></td></tr>
    10. <table/>
    11. HTML;
    12.  
    13. ?>
    Всё это делает следующее:
    Я заношу нужные цифры в поля значение1 и значение2, после нажатия кнопки "Изменить", начинает работать javascript и через ajax передает в обработчик нужные значения методом POST. Далее в блоке <div id="content"> отображается результат обработчика, то есть табличка с нужными значениями.

    Получается сверху таблица в которой я вношу нужные значения, а снизу таблица в которой отображаются эти значения. Я не могу понять, как сделать это всё в одной таблице... Что бы javascript не выводил новую таблицу снизу, а вносил изменения placeholder в уже выведенную таблицу (верхнюю). Надеюсь суть вопроса изложил понятно...
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    После вненсения - зачем вы опять таблицу формируете и выводите?
    ведь она и так у вас уже есть? И значения там нужные - которые вы передаете на беки если вы сделаете обновление старницы- то значения останутся теми же. Единственное при первоначальном формировании таблицы - заносите в соответствующие input value="" значения из БД
     
  7. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Я всё равно недопонимаю. Поправьте меня пожалуйста где я ошибаюсь...

    Допустим я не буду выводить новую таблицу. Допустим javascript отправит в обработчик нужные значения. Но как эти значения будут отображать в уже существующей таблице? Как они туда попадут? Тем более без обновления страницы...
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    зачем им туда попадать?
    вот у вас в ячейке <input ...... - вы ввели число 5 нажали сохранить... оно аяксово сохранилось - страница не перезагрузилась - вы это же число 5 и видите в поле ввода
     
  9. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    А если я усложню задачу для себя.

    Допустим у меня таблица, которая будет брать значения placeholder из БД.
    Я внесу нужные цифры в таблицу, нажму отправить.
    Javascript отправит нужные значения в обработчик (другой php файл). Обработчик в свою очередь обновит значения в БД

    И я до сих пор не могу понять. Как в таблице, в которой у меня отображаются placeholder, без перезагрузки страницы вытащить измененные значения placeholder из БД
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    не нужно использовать плейсходеры, используйте value
     
  11. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Кажется начал понимать, попробую разобраться. Спасибо.
     
  12. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    С value получилось...
    Теперь пытаюсь разобраться в следующем:

    Допустим в начале php скрипта задаю следующие вводные

    Код (Text):
    1. $value1 = '20';
    2. $value2 = '30';
    3. $value3 = $value1 + $value2;
    4.  
    5. echo <<<HTML
    6. <form id="myForm">
    7. <table>
    8. <tr><td><input type='text' input id='num1' value="$value1"></td><td><input type='text' input id='num2' value="$value2"></td><td><input type='text' value="$value3"></td><td><input type="submit" value="Изменить"></td></tr>
    9. <table/>
    10. </form>
    11.  
    12.     <script>
    13.         $(document).ready(function(){
    14.        
    15.             $('#myForm').submit(function(){
    16.                 $.ajax({
    17.                     type: "POST",
    18.                         url: "script.php",  
    19.                     data: {value1: $("#num1").val(), value2: $("#num2").val()},                                    
    20.                     success: function(html){
    21.                         $("#content").html(html);
    22.                        }
    23.                 });
    24.  
    25.  
    26.  
    27.                 return false;
    28.             });
    29.            
    30.         });
    31.     </script>
    Получается, что третья ячейка равняется $value3 (сумма $value1 и $value2). Когда выполняется ajax значение в первых двух ячейках ($value1 и $value2) меняется. А как можно поменять значение $value3 без перезагрузки страницы? Можете пожалуйста подсказать?

    P.S. script.php содержит обработчик, что бы в БД обновить информацию.
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Ну. если все же нужно обновлять какие то значения в процессе, есть два пути
    1) В обработчике который обновляет БД рассчитываете нужные новые значения - и отдаете это js например {'id234' : 345} в js берете идентификаторы переданные и обновляете там значения
    2) Можно всю таблицу с обновленными значениями сформировать и так же отдать заменив всю старую
     
  14. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    А по поводу 2 варианта, я правильно понял:
    1) В обработчике нарисовать таблицу с измененными значениями
    2) Через div content вывести таблицу обработчика на изначальной странице index.php (откуда запустили javascript)

    Если я правильно понял, тогда не могу понять следующее:
    Допустим на первой странице (index.php), я через content вывел таблицу обработчика, разве после этого её опять можно будет редактировать?
     
  15. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    поняли верно....

    а почему нельзя то?

    вообще на беке значит пишете функцию формирования таблицы с текущими значениями полей из БД - show_table() например

    при открытии html страницы в div id='content' явно ничего не пишете, зато вызываете js функцию, которая обращается к беку и показывает таблицу - для этого у нас есть show_table

    при редактировании данных - шлете на бек данные - записываете в бд и тут же вызываете show_table() а ее результат отдаете

    А для работы с динамически отрисовываемыми элементами используете обработчик
    Код (Javascript):
    1. $('body').on('click','selector', function(){... тут ваш код})
     
  16. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Спасибо, попробую так и сделать.
     
  17. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Я сделал немного иначе:

    Содержание index.php
    Код (Text):
    1. <?php
    2.  
    3. $value1 = '20';
    4. $value2 = '30';
    5.  
    6.  
    7. echo <<<HTML
    8.  
    9.  
    10. <html>
    11. <body>
    12. <head>
    13. <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
    14. <script type="text/javascript" src="jquery.js"></script>
    15. </head>
    16.  
    17. <div id="content">
    18.  
    19. <form id="myForm">
    20. <table>
    21. <tr><td>Значение 1</td><td>Значение 2</td><td></td></tr>
    22. <tr><td><input type='text' input id='num1' value="$value1"></td><td><input type='text' input id='num2' value="$value2"></td></td><td><input type="submit" value="Изменить"></td></tr>
    23. <table/>
    24. </form>
    25.  
    26.  
    27. </div>
    28.  
    29.  
    30.  
    31.  
    32.  
    33.     <script>
    34.  
    35.  
    36.         $(document).ready(function(){
    37.  
    38.  
    39.      
    40.             $('#myForm').submit(function(){
    41.                 $.ajax({
    42.                     type: "POST",
    43.                         url: "script.php",  
    44.                     data: {value1: $("#num1").val(), value2: $("#num2").val()},                                  
    45.                     success: function(html){
    46.                         $("#content").html(html);
    47.                        }
    48.                 });
    49.  
    50.  
    51.  
    52.                 return false;
    53.             });
    54.          
    55.         });
    56.  
    57.     </script>
    58.  
    59. </body>
    60. </html>
    61.  
    62.  
    63.  
    64. HTML;
    65.  
    66.  
    67. ?>
    Содержание обработчика:
    Код (Text):
    1. <?php
    2.  
    3. $value1 = $_REQUEST['value1'];
    4. $value2 = $_REQUEST['value2'];
    5.  
    6. echo <<<HTML
    7.  
    8. <form id="myForm">
    9. <table>
    10. <tr><td>Значение 1</td><td>Значение 2</td><td></td></tr>
    11. <tr><td><input type='text' input id='num1' value="$value1"></td><td><input type='text' input id='num2' value="$value2"></td></td><td><input type="submit" value="Изменить"></td></tr>
    12. <table/>
    13. </form>
    14.  
    15. HTML;
    16.  
    17. ?>
    После этих действий, у меня на странице index.php отображается таблица, которая нарисована в <div id="content">. После того как я нажимаю на кнопку изменить, начинает работать javascript, отправляет в обработчик нужные значения. Обработчик в свою очередь их обрабатывает, и возвращает таблицу в index.php в "content" меняя таблицу которая там уже была.

    Но если я после этого еще раз пытаюсь отправить значения по кнопке "изменить", то ничего не получается. Просто обновляется страница, и я вижу изначальную таблицу index.php со значениями 20 и 30...

    Я так понимаю, второй раз не получается изменить таблицу потому что я не использую
    Код (Text):
    1. $('body').on('click','selector', function(){... тут ваш код})
    Я правильно понял?

    P.S. Пока что пробую разобраться без значений из БД
     
  18. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Сделал немного иначе...

    index.php
    Код (Text):
    1. <html>
    2. <body>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
    5. <script type="text/javascript" src="jquery.js"></script>
    6. </head>
    7.  
    8.  
    9. <div id="content">
    10. </div>
    11.  
    12.  
    13.  
    14.  
    15.  
    16. <script>
    17. $(document).ready(function(){  
    18. $.ajax({
    19.            
    20. type: "POST",
    21. url: "script3.php",
    22. data: {value1: $("#num1").val(), value2: $("#num2").val()},
    23.  
    24. success: function(html){
    25. $("#content").html(html);
    26. }
    27.  
    28. });
    29. });  
    30. </script>
    31.    
    32. </body>
    33. </html>
    Содержание обработчика:
    Код (Text):
    1. <?php
    2.  
    3. $value1 = $_REQUEST['value1'];
    4. $value2 = $_REQUEST['value2'];
    5.  
    6. echo <<<HTML
    7.  
    8. <form id="myForm">
    9. <table>
    10. <tr><td>Значение 1</td><td>Значение 2</td><td></td></tr>
    11. <tr><td><input type='text' input id='num1' value="$value1"></td><td><input type='text' input id='num2' value="$value2"></td></td><td><input type="submit" value="Изменить"></td></tr>
    12. <table/>
    13. </form>
    14.  
    15. HTML;
    16.  
    17. ?>
    Теперь у меня ID content сразу показывает обработчик при загрузке index.php

    Но поля переменных $value1 и $value2 постоянно "undefined". Так как мой обработчик, не захватывает введенные значения, потому что у меня не получается "прикрутить" $('body').on('click','selector', function(){ в мой javascript для захвата динамических цифр...
    Можете пожалуйста подсказать как в моем JS правильно добавить "динамический захват цифр"