За последние 24 часа нас посетил 20471 программист и 1096 роботов. Сейчас ищут 406 программистов ...

навигация по странице PHP

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

Метки:
  1. Reken

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

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

    Есть php страница с таблицей, которая выводится из MySQL
    Есть обработчик (скрипт PHP)

    Таблица устроена так, что можно менять значения в каждой строчке. Изменив значения нажимаю enter, после чего передаются новые значения в обработчик php через post. Обработчик меняет значения в MySQL после чего возвращает на php страницу, где отображается таблица, с уже обновленными данными.

    Проблема в том, что допустим я меняю значения в 150 строчке, после нажатия enter загружается страница обработчика, которая после изменения БД, перенаправляет меня опять на страницу таблицы. Но загружается у меня начало страницы.
    Подскажите, как вернуться на страницу с таблицей, именно в то место, где менял значение (нужная строчка).
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Ну так-то якоря в HTML. Но лучше просто обновлять AJAX-ом
     
  3. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Снова подниму этот же вопрос. AJAX ещё только планирую изучать, поэтому с AJAX не смогу сделать...
    Да и с якорями пока что не получается...
    Я вывожу таблицу из MySQL при помощи цикла for
    Что то типа:
    Код (Text):
    1.     for ($i = 1 ; $i < $rows + 1 ; ++$i)
    2.     {
    3. <tr><td>.......</tr>
    4. }
    Где $rows содержит количество нужных строк из БД
    Сможете подсказать, можно как нибудь при помощи якорей реализовать задуманное? Или только JS с AJAX?
     
  4. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    А вы обработчику номер страницы с которой отправляете форму передаете?
    И, если имеется, другие параметры. Сортировка например.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Якорем может быть любой айди, расставьте айди по всем строкам.

    Хотя, с точки зрения юзабилити, ничего лучше аджакса не придумали. Так там и не сложно совсем. Программист php без знания JS и фронтовых технологий для меня странен, как минимум.
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Сделайте пагинацию с небольшим/настраиваемым количеством строк на странице. Проблема исчезнет. Вообще если «менять значения в каждой строчке», то это AJAX однозначно. Я скорее писал про редактирование на отдельной странице. Там просто передаете номер страницы списка в эту отдельную страницу редактирования и обратно.
     
  7. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Всем спасибо за советы. Я ещё не программист, так просто начальные познания...Так сказать в процессе обучения...
    Я с AJAX в тупик попал...Покажу допустим на простом примере:
    1) Есть окошко в котором ввожу цифру
    2) Так же есть кнопка "прибавить"
    3) Есть строка следующего содержания "Значение переменной A равно 1"
    4) Смысл в том, что бы когда я в окошко ввожу цифру, она прибавлялась к переменной "A"...Разумеется без перезагрузки страницы.

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

    Или даже можно представить, что есть окошко, в которое записана цифра из БД MySQL. Нужно ввести другую цифру в это же окошко, что бы она обновилась в БД, без перезапуска страницы...Если смогу это понять, то и с таблицей думаю проблем не будет, смысл то по сути одинаковый...
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @Reken, https://learn.javascript.ru/, там всё есть. Не поленись прочитать. Не надо искать "на конкретном примере", надо один раз понять, как всё работает.
     
  9. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Пробую через Ajax сделать, уже кое что получается но не полностью. Подскажите пожалуйста:
    1) Как я уже говорил есть страничка, которая через php выводит нужные строки из БД Mysql
    2) Я меняю цифры в нужной мне строке, и через Ajax отправляю ново-введенные цифры в обработчик (отдельный php файл)
    3) Обработчик успешно обновляет нужные мне строки в БД MySQL
    4) Но вот на первой странице, где собственно и отображается эта таблица, где я и нажимаю кнопку "изменить цифры", будет отображаться старые цифры в таблицы, так как PHP язык серверный, и он помнит цифры изначально загруженные из БД. Что бы он показал новые цифры из таблицы, нужно перезагрузить страницу. В следствии чего он обновит информацию полученную из БД, но и по этой же причине выкинет меня на начало страницы...
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Даже если у вас SPA (видимый в браузере адрес постоянен), AJAX-запросы могут выполняться по разным адресам и соответственно выуживать разный контент ;)
    --- Добавлено ---
    https://php.ru/forum/posts/640938/
     
  11. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Недопонимаю Вас...Вы имеете в виду загружать таблицу через Ajax, или что?
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @Reken Мало информации, как у вас всё устроено. Можно же контент прямо js-ом обновить, можно и всю таблицу перезагрузить ajax-ом, всё зависит от объёмов, от интерфейса.
     
  13. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Код (Text):
    1.  
    Моя таблица в MySQL выглядит примерно следующим образом:

    ID_GR | ID | TEXT | ZN
    Содержание:
    10 | 1 | Первый раздел | Сумма чисел подразделов
    1 | 1 | Подраздел первого раздела | Любая цифра
    1 | 1 | Подраздел первого раздела | Любая цифра
    1 | 1 | Подраздел первого раздела | Любая цифра
    1 | 1 | Подраздел первого раздела | Любая цифра

    10 | 2 | Второй раздел | Сумма чисел подразделов
    1 | 2 | Подраздел второго раздела | Любая цифра
    1 | 2 | Подраздел второго раздела | Любая цифра
    1 | 2 | Подраздел второго раздела | Любая цифра
    1 | 2 | Подраздел второго раздела | Любая цифра


    Вывожу на экран я эту таблицу через PHP следующим образом:
    Считаю количество строк где ID_GR равен «10»
    Далее через цикл for рисую разделы таблицы…
    Код (Text):
    1.  
    2. for ($i = 1 ; $i < $rows + 1 ; ++$i) # $rows = количеству строк с ID_GR 10
    3.  
    4. {
    Потом так же через цикл for рисую подразделы
    Код (Text):
    1.  
    2. for ($x = 0 ; $x < $rows1 ; ++$x) # $rows1 = количество строк с ID_GR 1
    3.  
    4. {
    Но суть не в том как таблица выводится из MySQL а в том что происходит дальше…
    Дальше на страничку выводится табличка:

    Название раздела | Цифра со значением | Кнопка «Изменить цифру»

    Когда нажимаю кнопку «изменить цифру», информация через POST перенаправляется в другой PHP скрипт. После в PHP скрипте происходит обновление значений в БД. Ну и далее перенаправление обратно на таблицу. Где я вижу начало таблицы, а не ту строчку в которой вносил изменения…

    Как ко всему этому можно прикрутить AJAX?
    --- Добавлено ---
    В таблице в разделе Цифра со значением, эта самая цифра вытаскивается из MySQL БД. Эту цифру можно менять так как в таблице у неё type=text. Ну и через форму методом POST отправляем новое значение в обработчик...Плюс ещё за компанию отправляем значения ID_GR и ID, что бы обработчик понял где именно в БД ему нужно заменить цифру...
    Как то так...
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Что за дубли в таблицах? Сначала с идентификацией разберитесь.

    Сделайте для начала обычный обрамляющий макет и подгружайте в него контент, получаемый хоть прямо в HTML, по разным адресам. Адреса AJAX-запросов можно прямо в href указывать или в каком-нибуть data-атрибуте.
     
  15. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Таблица нужна именно такая, с дублями...
    Я в программирование новичок, и не совсем смог понять Ваших слов...Что Вы имеете ввиду "подгружайте контент"? Загружать полностью сформированную таблицу допустим в <div id="content"></div>?
     
  16. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Кое что уже получилось через Ajax...
    Я в общем создал табличку в MySQL
    ID | ZN1 | ZN2
    В ней 100 строк...Следовательно ID от 1 до 100. В колонках ZN1 и ZN2 всякие цифры...

    Далее сделал страницу index.php
    Код (Text):
    1. <html>
    2.       <head>
    3.            <title>AJAX</title>
    4.            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
    5.            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    6.            <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    7.       </head>
    8.       <body>
    9.            <div class="container">
    10.  
    11.                 <div class="table-responsive">
    12.                      <h3 align="center">Тренировочная таблица AJAX</h3><br />
    13.                      <div id="live_data"></div>                
    14.                 </div>
    15.            </div>
    16.       </body>
    17. </html>
    18.  
    19. <script>
    20. $(document).ready(function(){
    21.       function fetch_data()
    22.       {
    23.            $.ajax({
    24.                 url:"select.php",
    25.                 method:"POST",
    26.                 success:function(data){
    27.                      $('#live_data').html(data);
    28.                 }
    29.            });
    30.       }
    31.       fetch_data();
    32.       $(document).on('click', '#btn', function(){
    33.            var ID = $('#ID').val();            
    34.            var ZN1 = $('#ZN1').val();
    35.            var ZN2 = $('#ZN2').val();
    36. $.ajax({
    37.                 url:"update.php",
    38.                 method:"POST",
    39.                 data:{ID:ID, ZN1:ZN1, ZN2:ZN2},
    40.                 dataType:"text",
    41.                 success:function(data)
    42.                 {
    43.                    
    44.                      fetch_data();
    45.                 }
    46.            })
    47.       });
    48.  
    49. });
    50. </script>
    После файл select.php в котором собственно и рисуется таблица:
    Код (Text):
    1. <?php
    2. # Подключение к БД
    3.  
    4. echo "<table>";
    5.  
    6. for($i=1;$i<=100;$i++)
    7. {
    8. # Записываем строчку в массив
    9. $query ="SELECT * FROM `ajax` WHERE ID = '$i'";
    10. $result = mysqli_query($mysqli, $query) or die("ERORRRR " . mysqli_error($mysqli));
    11. $row = mysqli_fetch_row($result);
    12.  
    13. echo "<tr><td><input type='text' value=$row[0] input id='ID'></td><td><input type='text' value=$row[1] input id='ZN1'></td><td><input type='text' value=$row[2] input id='ZN2'></td><td><input type=button id='btn' value='Изменить'></td></tr>";
    14.  
    15. }
    16. echo "</table>";
    17.  
    18. ?>
    Ну и сам обработчик update.php
    Код (Text):
    1. <?php
    2.  
    3. $ID = $_POST["ID"];
    4. $ZN1 = $_POST["ZN1"];
    5. $ZN2 = $_POST["ZN2"];
    6.  
    7. # Подключение к БД
    8.  
    9. $result = $mysqli->query("UPDATE ajax SET `ZN1` = '$ZN1' WHERE `ID` = '$ID'");
    10. $result = $mysqli->query("UPDATE ajax SET `ZN2` = '$ZN2' WHERE `ID` = '$ID'");
    Теперь у меня таблица обновляется без перезагрузки страницы...
    Но вот только первая строка таблицы...Все остальные строки не хотят...Так как у меня у всех строк получается одинаковые input id
    Можете пожалуйста подсказать?
     
  17. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так значит им нужно задать уникальный ID, соответствующий записи в БД, нет?
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Да, для тренировки.

    А конкретно для вашего случая адресация в AJAX-запросах обычно затрагивает отдельные поля отдельных записей, т.е. вы в адресе указываете не только идентификаторы таблицы и записи в ней, но еще и имя (или порядковый номер) поля, значение которого передаете на сервер или получаете с сервера. В данном случае в содержимом запроса можно передавать исключительно содержимое ячейки таблицы.
    --- Добавлено ---
    P.S. Но запросы у вас, естественно, должны быть разных типов, т.е. не только для работы с отдельными ячейками.
     
  19. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Все равно недопонимаю...Можете пожалуйста чуть подробней объяснить?
    В смысле запросы разных типов?
    Не совсем понял что ещё помимо ID,ZN1,ZN2 нужно передавать?
     
  20. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Ничего необычного.
    Это азы. У поля ввода есть атрибуты. Некоторые из них передаются, некоторые нет.
    Создайте форму с несколькими полями, строго по учебнику, Отправьте в тестовый обработчик. Смотрите что передалось, а что нет. И как это извлечь.
     
  21. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    По поводу формы мне понятно. По поводу передачи атрибутов тоже понятно...
    Код (Text):
    1. <form action='обработчик.php' method='post'>
    2. <input type='hidden' name='Значение1' value='1'>
    3. <input type='hidden' name='Значение2' value='2'>
    4. <input type='submit' value='Отправить данные'>
    5. </form>
    Но в моем конкретном примере нет формы...
    В моем примере есть цикл for
    Который 100 раз подряд выводит строку
    Код (Text):
    1. echo "<tr><td><input type='text' value=$row[0] input id='ID'></td><td><input type='text' value=$row[1] input id='ZN1'></td><td><input type='text' value=$row[2] input id='ZN2'></td><td><input type=button id='btn' value='Изменить'></td></tr>";
    И по этой причине у меня у всех 100 строк таблицы, получается одинаковый input id...Я передаю значения таблицы из PHP в JS через input id. Мне нужно это как то исправить, и передавать для каждой строки свой id или что то по чему можно определить конкретную строчку с нужными значениями...
     
  22. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Хорошо. Зайдем с другой стороны.
    Данные в базу записывает JS или всё-таки PHP?
     
  23. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    PHP вытаскивает из базы нужные мне цифры и формирует таблицу, после JS получает от PHP эти значения через
    Код (Text):
    1. var ID = $('#ID').val();
    После чего JS передает эти значения в PHP обработчик, который в свою очередь обновляет БД.

    PHP серверная часть (обновляет БД, получает из неё данные и т.д.)
    JS клиентская
     
  24. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    ОК. С этим определились.
    Каким образом это делается?
    Что именно передается обработчику и что именно он возвращает JS? Если возвращает.
     
  25. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Я это понимаю так:
    В AJAX строки
    Код (Text):
    1. url:"update.php",      
    2. method:"POST",
    3. data:{ID:ID, ZN1:ZN1, ZN2:ZN2},
    Это как раз (Куда передает, как передает, что передает)...

    Строки :
    Код (Text):
    1.   success:function(data)
    2.   {
    3.   fetch_data();
    4.   }  
    В случае успеха, показывает обновленную таблицу