За последние 24 часа нас посетили 22450 программистов и 1188 роботов. Сейчас ищут 745 программистов ...

Как сделать update данных циклом?

Тема в разделе "Сделайте за меня", создана пользователем flautr, 8 дек 2018.

  1. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    Покажите плз
    Как сделать 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");
    ?>
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Добавьте id в скрытое поле или в адрес обработчика.
    --- Добавлено ---
    Группировка по id – идиотизм. Может, с сортировкой перепутали?
     
  3. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    Убрал группировку, но тоже самое - данные обновляются только для крайней записи независимо от количества строк в таблице. Голову уже сломал, чувствую что то не то в коде, но понять не могу что. Подозрения что нет цикла в файле 1.php, но я просто не понимаю как его там сделать...
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Я вам написал, что нужно сделать. Цикл в обработчике не нужен. Используйте числовой id для идентификации в подобных операциях, не логин.
     
  5. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    Там и так число, например 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")
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Тогда заметите это текстовое поле на скрытое. Не дело давать пользователю редактировать идентификатор, по кот. происходит изменение записи.
    --- Добавлено ---
    Есть спец. тип hidden.
     
  7. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    Ок, спасибо даже не знал о таком типе, правда он не совсем уж и скрытый и тоже самое делается display:none) Но моя проблема от этого не решается. Возможно сама форма неправильно вставлена на страницу...
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Сама конструкция рабочая (для новичка сойдет). Отлаживайте.
    --- Добавлено ---
    Ну можно еще редирект на список после обновления добавить для полноты картины.
    --- Добавлено ---
    Сразу не посмотрел на раздел. За вас код писать не собирался, сорри. Да и одного «до свиданья» мне было достаточно ;)
     
    flautr нравится это.
  9. flautr

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

    С нами с:
    4 авг 2015
    Сообщения:
    120
    Симпатии:
    0
    @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]()....

    Есть ли более адекватное решение?? так тоже работает, но думаю что это колхоз создавать скрипты в цикле формы)
     
    #9 flautr, 8 дек 2018
    Последнее редактирование: 8 дек 2018