За последние 24 часа нас посетил 199341 программист и 2122 робота. Сейчас ищут 1778 программистов ...

Динамический UPDATE

Тема в разделе "PHP для новичков", создана пользователем AlleeX, 6 янв 2010.

  1. AlleeX

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

    С нами с:
    17 июл 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    РБ
    Всем привет!!! Всех с прошедшими и наступающими праздниками!!!!
    Есть такая проблемка:
    - из базы выбирается инфа и циклом подставляется в теги <input>;
    - пользователь меняет инфу и нажимает сохранить;
    - инфа методом пост летит в файл обработчик
    вот дамр $_POST
    Array
    (

    [ided8] => 8
    [country8] => ууу
    [city8] => ккккккк
    [scool8] => кпппп
    [year_begin8] => 4566
    [year_finish8] => 6666

    [ided6] => 6
    [country6] => ррр
    [city6] => ттттт
    [scool6] => йййй
    [year_begin6] => 1212
    [year_finish6] => 1212

    [ided7] => 7
    [country7] => ссссс
    [city7] => яяяяя
    [scool7] => ффффф
    [year_begin7] => 4545
    [year_finish7] => 4545

    [submit] => Cохранить
    )

    вводом разделены строки БД

    КАК теперь эти данные UPDATE-ом засунуть в таблицу (данные создаются динамически, а что бы названия переменных отличались к ним дописывается id строки)
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    1. не дописывать id
    а сохранять сразу в массив

    HTML:
    1. <input name="id[ed8]" type="text"/>
    2. <input name="country[ed8]" type="text"/>
    можно еще так, мне было бы даже удобнее
    HTML:
    1. <input name="data[ed8][id]" type="text"/>
    2. <input name="data[ed8][country]" type="text"/>
    2. UPDATE table SET field=value WHERE id =;
    Запросы, конечно, придется для каждой записи отдельные делать.

    Но нет ничего сложного в том чтобы делать UPDATE сразу для всех свойств одной записи.
     
  3. AlleeX

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

    С нами с:
    17 июл 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    РБ
    Дело в том что может одно поле лететь, а может много (смотря сколько изначально селектом выберет)
     
  4. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    да плевать сколько полей. (ты их кстати не путай с строками БД)
    формат как я сказал.

    в последнем случае:
    count($_POST['data']) вернет тебе число строк
    count($_POST['data']['someindex'] вернет число полей

    если надо отсеять пустые поля, без цикла никуда не денешься.
    PHP:
    1.  
    2. <?php
    3. $_POST = array('data' =>
    4.     array(
    5.     '1e' => array('field1' => '', 'field2' => '2') ,
    6.     '2e' => array('field1' => '1', 'field2' => '2') ,
    7.     '3e' => array('field1' => '2', 'field2' => '2') ,
    8.     '4e' => array('field1' => '', 'field2' => '')
    9.     )
    10. );
    11.  
    12.  
    13. // PHP 5.3
    14. array_walk($_POST['data'], function (&$row, $id) {
    15.     array_walk($row, function ($field, $name) use (&$row) {
    16.         if (!$field) {
    17.             unset($row[$name]);
    18.         }
    19.     });
    20.     return $row;
    21. });
    22.  
     
  5. AlleeX

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

    С нами с:
    17 июл 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    РБ
    Как запихнуть это в массивы то понятно, спасибо за идею
    Суть в том как этими массивами запросом UPDATE обновить БД???


    Вывести их циклом и подставить в запрос данные???
    UPDATE table SET field=value WHERE id =;
     
  6. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    да именно взять циклом и подставить в запрос.

    Только сделать надо несколько умнее и сформировать 1 запрос для 1 записи, а не для 1го поля.

    т.е. ты должен получить
    [sql]UPDATE table SET field=value, field2=value2, field3=value3 WHERE id = 'чего-то там'[/sql]
     
  7. AlleeX

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

    С нами с:
    17 июл 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    РБ
    Спасибо огромное сделал - ЗАРАБОТАЛО!!!! Обожаю этот форум!!!