За последние 24 часа нас посетили 8824 программиста и 613 роботов. Сейчас ищут 168 программистов ...

дублирование записей в таблице БД при UPDATE

Тема в разделе "PHP и базы данных", создана пользователем Anya, 22 дек 2019.

Метки:
  1. Anya

    Anya Новичок

    С нами с:
    22 дек 2019
    Сообщения:
    4
    Симпатии:
    0
    на странице есть несколько полей формы с одинаковым именем name='protectMean[]'.
    UPDATE срабатывает только если в самом последнем поле формы я меняю значение. и то ..в таком случае новое значение дублируется во всех полях таблицы БД где personSurname = $order_surname

    Помогите пожалуйста, я плохо разбираюсь в php. мне нужно чтобы значения в таблице БД обновлялись относительно новых введенных значений в форме.
    Код (Text):
    1.  
    2. $n=sizeof($_POST['protectMean']);
    3. for($i=0;$i<$n;$i++)
    4. {
    5.     $qty=$_POST['protectMean'][$i];
    6.     $update= $GLOBALS['pdo']->prepare
    7.     ("UPDATE protect_means SET nameOfMeans = :value1 WHERE personSurname = :order_surname");
    8.     $update->bindParam(':value1', $qty);
    9.     $update->bindParam(':order_surname', $order_surname);
    10.     $update->execute();
    11. }
    12. [code]
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    1.765
    Симпатии:
    375
    Адрес:
    Татарстан
    Непонятно что вы имеете ввиду -
    Что вы хотите обновить, по какому алгоритму??
     
  3. Anya

    Anya Новичок

    С нами с:
    22 дек 2019
    Сообщения:
    4
    Симпатии:
    0
    изменяю данные в форме.
    жму сохранить
    данные формы отправляются и поочередно заменяются в соответствующих столбцах таблицы
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    1.765
    Симпатии:
    375
    Адрес:
    Татарстан
    ну логично ж тогда чтоб соответствие было у вас форме, иначе php никак не сможет узнать этого
    именуйте поля например как protectMean[2], protectMean[55] - где 2,55 итд - id соотв. элементу
    (это называется массивы)
    при приеме в php - у вас будет соответствие ключи => значение
    то есть так-же массив, а вот его спокойно обновляйте

    PHP:
    1. $index = array_keys($_POST['protectMean'];
    2. foreach ($index AS $item)
    3. {
    4.     $qty=$_POST['protectMean'][$item];
    5.     $update= $GLOBALS['pdo']->prepare
    6.     ("UPDATE protect_means SET nameOfMeans = :value1 WHERE id = :id");
    7.     $update->bindParam(':value1', $qty);
    8.     $update->bindParam(':order_surname', $item);
    9.     $update->execute();
    10. }
     
    Anya нравится это.
  5. MouseZver

    MouseZver Зэк
    [ БАН ]

    С нами с:
    1 апр 2013
    Сообщения:
    6.036
    Симпатии:
    970
    Адрес:
    Лень
    INSERT INTO `%s` ( `symbol`, `name`, `percent` )
    VALUES ( ?,?, 100 )
    on duplicate key update
    `symbol` = values( `symbol` ),
    `name` = values( `name` ),
    `percent` = values( `percent` )​
    --- Добавлено ---
    @ADSoft, зачем припарировать в каждом цикле серверную часть запроса, когда подготовленные запросы могут принимать последующие онли значения ?
     
    Valick нравится это.
  6. Anya

    Anya Новичок

    С нами с:
    22 дек 2019
    Сообщения:
    4
    Симпатии:
    0
    @ADSoft, подскажите как сделать имена полей ввода уникальными?
     
  7. Anya

    Anya Новичок

    С нами с:
    22 дек 2019
    Сообщения:
    4
    Симпатии:
    0
    Огромное Вам спасибо! Получилось!
     
  8. MouseZver

    MouseZver Зэк
    [ БАН ]

    С нами с:
    1 апр 2013
    Сообщения:
    6.036
    Симпатии:
    970
    Адрес:
    Лень
    РукаЛицо.