Покажите плз Как сделать update для юзера напротив которого нажали кнопку? Сейчас обновятся только у какого-то одного юзера - последнего. echo "<table>"; $result = pg_query("SELECT * FROM users GROUP BY user_id"); for ($i = 0; $i <= $row = pg_fetch_row($result); $i++) { echo "<form method="POST" action="1.php"> <tr> <td><input name="login" type="text" value='$row[0]'></td> <td><input name="tel" type="text" value='$row[1]'></td> <td><input type='submit' name='enter' value='Изменить'></td> </tr> </form>"; } echo "</table>"; <?php $login = $_POST['login']; $tel = $_POST['tel']; result = pg_query("UPDATE users SET tel = '$tel' WHERE user_id = $login"); ?>
Добавьте id в скрытое поле или в адрес обработчика. --- Добавлено --- Группировка по id – идиотизм. Может, с сортировкой перепутали?
Убрал группировку, но тоже самое - данные обновляются только для крайней записи независимо от количества строк в таблице. Голову уже сломал, чувствую что то не то в коде, но понять не могу что. Подозрения что нет цикла в файле 1.php, но я просто не понимаю как его там сделать...
Я вам написал, что нужно сделать. Цикл в обработчике не нужен. Используйте числовой id для идентификации в подобных операциях, не логин.
Там и так число, например 48. <td>$row[0] <input style='display:none;' type='text' name='user_id' value='$row[0]' ></td>. Я очищал код для примера и упустил просто название name="login", а исправить уже не дают( $user_id = $_POST['user_id']; ....WHERE user_id = $user_id")
Тогда заметите это текстовое поле на скрытое. Не дело давать пользователю редактировать идентификатор, по кот. происходит изменение записи. --- Добавлено --- Есть спец. тип hidden.
Ок, спасибо даже не знал о таком типе, правда он не совсем уж и скрытый и тоже самое делается display:none) Но моя проблема от этого не решается. Возможно сама форма неправильно вставлена на страницу...
Сама конструкция рабочая (для новичка сойдет). Отлаживайте. --- Добавлено --- Ну можно еще редирект на список после обновления добавить для полноты картины. --- Добавлено --- Сразу не посмотрел на раздел. За вас код писать не собирался, сорри. Да и одного «до свиданья» мне было достаточно
@miketomlin Спасибо, Вы и так помогли. Поняв от вас что код нормальный по идее я стал смотреть шире и нашел ошибку. В примере я сократил код, ну чтобы самую суть только тут написать. Убрал ajax из него подумав что это не важно...Проверив форму в html увидел что на странице создается столько форм сколько строчек в таблице и у всех у них одно и то же название <form method='POST' id='forms' action='javascript:void(null);' onsubmit='call2()'>... Скрипт <script> function call2() { var msg = $('#forms').serialize(); $.ajax({ type: 'POST', url: '1.php', data: msg, success: function(data) { $('#results').html(data); } }); } </script> Ничего лучше чем вот так, придумать не могу=) <form method='POST' id='$row[0]' action='javascript:void(null);' onsubmit='call$row[0]()' > ну и в скрипте function call$row[0]().... Есть ли более адекватное решение?? так тоже работает, но думаю что это колхоз создавать скрипты в цикле формы)