Подскажите пожалуйста: Есть php страница с таблицей, которая выводится из MySQL Есть обработчик (скрипт PHP) Таблица устроена так, что можно менять значения в каждой строчке. Изменив значения нажимаю enter, после чего передаются новые значения в обработчик php через post. Обработчик меняет значения в MySQL после чего возвращает на php страницу, где отображается таблица, с уже обновленными данными. Проблема в том, что допустим я меняю значения в 150 строчке, после нажатия enter загружается страница обработчика, которая после изменения БД, перенаправляет меня опять на страницу таблицы. Но загружается у меня начало страницы. Подскажите, как вернуться на страницу с таблицей, именно в то место, где менял значение (нужная строчка).
Снова подниму этот же вопрос. AJAX ещё только планирую изучать, поэтому с AJAX не смогу сделать... Да и с якорями пока что не получается... Я вывожу таблицу из MySQL при помощи цикла for Что то типа: Код (Text): for ($i = 1 ; $i < $rows + 1 ; ++$i) { <tr><td>.......</tr> } Где $rows содержит количество нужных строк из БД Сможете подсказать, можно как нибудь при помощи якорей реализовать задуманное? Или только JS с AJAX?
А вы обработчику номер страницы с которой отправляете форму передаете? И, если имеется, другие параметры. Сортировка например.
Якорем может быть любой айди, расставьте айди по всем строкам. Хотя, с точки зрения юзабилити, ничего лучше аджакса не придумали. Так там и не сложно совсем. Программист php без знания JS и фронтовых технологий для меня странен, как минимум.
Сделайте пагинацию с небольшим/настраиваемым количеством строк на странице. Проблема исчезнет. Вообще если «менять значения в каждой строчке», то это AJAX однозначно. Я скорее писал про редактирование на отдельной странице. Там просто передаете номер страницы списка в эту отдельную страницу редактирования и обратно.
Всем спасибо за советы. Я ещё не программист, так просто начальные познания...Так сказать в процессе обучения... Я с AJAX в тупик попал...Покажу допустим на простом примере: 1) Есть окошко в котором ввожу цифру 2) Так же есть кнопка "прибавить" 3) Есть строка следующего содержания "Значение переменной A равно 1" 4) Смысл в том, что бы когда я в окошко ввожу цифру, она прибавлялась к переменной "A"...Разумеется без перезагрузки страницы. Что бы было понятно, привожу код, как я это сделал через AJAX Код (Text): <?php echo <<<HTML <html> <head> <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8"> <script type="text/javascript" src="jquery.js"></script> </head> <body> <form id="myForm"> Прибавить к переменной A следующую цифру<br/> <input id="numeral" type="text" size="20"><br/><br/> <input type="submit" value="Прибавить"> </form> <div id="content"> Значение переменной A равно 1 </div> <script> $(document).ready(function(){ $('#myForm').submit(function(){ $.ajax({ type: "POST", url: "script.php", data: "numeral="+$("#numeral").val(), success: function(html){ $("#content").html(html); } }); return false; }); }); </script> </body> </html> HTML; ?> Обработчик: Код (Text): <?php $B = '1' + $_REQUEST['numeral']; echo "Значение переменной A равно $B"; ?> Это всё работает, и я вижу динамическое обновление без перезагрузки страницы. Но мне это не подходит. На деле я всего лишь вижу обработчик который появляется в разделе страницы <div id="content">. Я не могу понять, как мне сделать, что бы цифра обновлялась, не ниже окошка (область content) , а непосредственно в окошке... Можете пожалуйста объяснить на этом конкретном примере? Или даже можно представить, что есть окошко, в которое записана цифра из БД MySQL. Нужно ввести другую цифру в это же окошко, что бы она обновилась в БД, без перезапуска страницы...Если смогу это понять, то и с таблицей думаю проблем не будет, смысл то по сути одинаковый...
@Reken, https://learn.javascript.ru/, там всё есть. Не поленись прочитать. Не надо искать "на конкретном примере", надо один раз понять, как всё работает.
Пробую через Ajax сделать, уже кое что получается но не полностью. Подскажите пожалуйста: 1) Как я уже говорил есть страничка, которая через php выводит нужные строки из БД Mysql 2) Я меняю цифры в нужной мне строке, и через Ajax отправляю ново-введенные цифры в обработчик (отдельный php файл) 3) Обработчик успешно обновляет нужные мне строки в БД MySQL 4) Но вот на первой странице, где собственно и отображается эта таблица, где я и нажимаю кнопку "изменить цифры", будет отображаться старые цифры в таблицы, так как PHP язык серверный, и он помнит цифры изначально загруженные из БД. Что бы он показал новые цифры из таблицы, нужно перезагрузить страницу. В следствии чего он обновит информацию полученную из БД, но и по этой же причине выкинет меня на начало страницы...
Даже если у вас SPA (видимый в браузере адрес постоянен), AJAX-запросы могут выполняться по разным адресам и соответственно выуживать разный контент --- Добавлено --- https://php.ru/forum/posts/640938/
@Reken Мало информации, как у вас всё устроено. Можно же контент прямо js-ом обновить, можно и всю таблицу перезагрузить ajax-ом, всё зависит от объёмов, от интерфейса.
Код (Text): Моя таблица в 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): for ($i = 1 ; $i < $rows + 1 ; ++$i) # $rows = количеству строк с ID_GR 10 { Потом так же через цикл for рисую подразделы Код (Text): for ($x = 0 ; $x < $rows1 ; ++$x) # $rows1 = количество строк с ID_GR 1 { Но суть не в том как таблица выводится из MySQL а в том что происходит дальше… Дальше на страничку выводится табличка: Название раздела | Цифра со значением | Кнопка «Изменить цифру» Когда нажимаю кнопку «изменить цифру», информация через POST перенаправляется в другой PHP скрипт. После в PHP скрипте происходит обновление значений в БД. Ну и далее перенаправление обратно на таблицу. Где я вижу начало таблицы, а не ту строчку в которой вносил изменения… Как ко всему этому можно прикрутить AJAX? --- Добавлено --- В таблице в разделе Цифра со значением, эта самая цифра вытаскивается из MySQL БД. Эту цифру можно менять так как в таблице у неё type=text. Ну и через форму методом POST отправляем новое значение в обработчик...Плюс ещё за компанию отправляем значения ID_GR и ID, что бы обработчик понял где именно в БД ему нужно заменить цифру... Как то так...
Что за дубли в таблицах? Сначала с идентификацией разберитесь. Сделайте для начала обычный обрамляющий макет и подгружайте в него контент, получаемый хоть прямо в HTML, по разным адресам. Адреса AJAX-запросов можно прямо в href указывать или в каком-нибуть data-атрибуте.
Таблица нужна именно такая, с дублями... Я в программирование новичок, и не совсем смог понять Ваших слов...Что Вы имеете ввиду "подгружайте контент"? Загружать полностью сформированную таблицу допустим в <div id="content"></div>?
Кое что уже получилось через Ajax... Я в общем создал табличку в MySQL ID | ZN1 | ZN2 В ней 100 строк...Следовательно ID от 1 до 100. В колонках ZN1 и ZN2 всякие цифры... Далее сделал страницу index.php Код (Text): <html> <head> <title>AJAX</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> </head> <body> <div class="container"> <div class="table-responsive"> <h3 align="center">Тренировочная таблица AJAX</h3><br /> <div id="live_data"></div> </div> </div> </body> </html> <script> $(document).ready(function(){ function fetch_data() { $.ajax({ url:"select.php", method:"POST", success:function(data){ $('#live_data').html(data); } }); } fetch_data(); $(document).on('click', '#btn', function(){ var ID = $('#ID').val(); var ZN1 = $('#ZN1').val(); var ZN2 = $('#ZN2').val(); $.ajax({ url:"update.php", method:"POST", data:{ID:ID, ZN1:ZN1, ZN2:ZN2}, dataType:"text", success:function(data) { fetch_data(); } }) }); }); </script> После файл select.php в котором собственно и рисуется таблица: Код (Text): <?php # Подключение к БД echo "<table>"; for($i=1;$i<=100;$i++) { # Записываем строчку в массив $query ="SELECT * FROM `ajax` WHERE ID = '$i'"; $result = mysqli_query($mysqli, $query) or die("ERORRRR " . mysqli_error($mysqli)); $row = mysqli_fetch_row($result); 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>"; } echo "</table>"; ?> Ну и сам обработчик update.php Код (Text): <?php $ID = $_POST["ID"]; $ZN1 = $_POST["ZN1"]; $ZN2 = $_POST["ZN2"]; # Подключение к БД $result = $mysqli->query("UPDATE ajax SET `ZN1` = '$ZN1' WHERE `ID` = '$ID'"); $result = $mysqli->query("UPDATE ajax SET `ZN2` = '$ZN2' WHERE `ID` = '$ID'"); Теперь у меня таблица обновляется без перезагрузки страницы... Но вот только первая строка таблицы...Все остальные строки не хотят...Так как у меня у всех строк получается одинаковые input id Можете пожалуйста подсказать?
Да, для тренировки. А конкретно для вашего случая адресация в AJAX-запросах обычно затрагивает отдельные поля отдельных записей, т.е. вы в адресе указываете не только идентификаторы таблицы и записи в ней, но еще и имя (или порядковый номер) поля, значение которого передаете на сервер или получаете с сервера. В данном случае в содержимом запроса можно передавать исключительно содержимое ячейки таблицы. --- Добавлено --- P.S. Но запросы у вас, естественно, должны быть разных типов, т.е. не только для работы с отдельными ячейками.
Все равно недопонимаю...Можете пожалуйста чуть подробней объяснить? В смысле запросы разных типов? Не совсем понял что ещё помимо ID,ZN1,ZN2 нужно передавать?
Ничего необычного. Это азы. У поля ввода есть атрибуты. Некоторые из них передаются, некоторые нет. Создайте форму с несколькими полями, строго по учебнику, Отправьте в тестовый обработчик. Смотрите что передалось, а что нет. И как это извлечь.
По поводу формы мне понятно. По поводу передачи атрибутов тоже понятно... Код (Text): <form action='обработчик.php' method='post'> <input type='hidden' name='Значение1' value='1'> <input type='hidden' name='Значение2' value='2'> <input type='submit' value='Отправить данные'> </form> Но в моем конкретном примере нет формы... В моем примере есть цикл for Который 100 раз подряд выводит строку Код (Text): 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 или что то по чему можно определить конкретную строчку с нужными значениями...
PHP вытаскивает из базы нужные мне цифры и формирует таблицу, после JS получает от PHP эти значения через Код (Text): var ID = $('#ID').val(); После чего JS передает эти значения в PHP обработчик, который в свою очередь обновляет БД. PHP серверная часть (обновляет БД, получает из неё данные и т.д.) JS клиентская
ОК. С этим определились. Каким образом это делается? Что именно передается обработчику и что именно он возвращает JS? Если возвращает.
Я это понимаю так: В AJAX строки Код (Text): url:"update.php", method:"POST", data:{ID:ID, ZN1:ZN1, ZN2:ZN2}, Это как раз (Куда передает, как передает, что передает)... Строки : Код (Text): success:function(data) { fetch_data(); } В случае успеха, показывает обновленную таблицу