За последние 24 часа нас посетили 53466 программистов и 1708 роботов. Сейчас ищут 916 программистов ...

Сложный UPDATE

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

  1. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Есть код:

    PHP:
    1.  
    2. <?
    3. if ($_POST['submit'] == "Save"){
    4. while (current($HTTP_POST_VARS)){$keys .= "'".key($HTTP_POST_VARS)."'"; next($HTTP_POST_VARS);}
    5. $keys = str_replace("''","','",$keys); $keys = str_replace("'","",$keys); $values = "'".implode ("','", $HTTP_POST_VARS)."'";
    6.  
    7. $resultLanguages = mysql_query ("UPDATE yd_languages SET (".$keys.") VALUES (".$values.")",$db);
    8.  
    9. ?>
    10.  
    Знаю что запрос вбазу не правильный, как сделать правильно.
    Скрипт читает массив с $_POST и должен одним запросом обновить все эти данные в базе.[/code]
     
  2. Greg1978

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

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    var_dump($keys, $values);
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ng0d
    ну если только через запятую =)
     
  4. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Например при WHERE такое работает.

    WHERE yd_languages IN (".$values.")
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ng0d
    точечные удары куда попало? если все значения которые надо выставить одинаковые - да можно хоть весь столбец обновить за один заход. у тебя, так понимаю, все - разные. =) В колонну строго по-одному!
     
  6. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    в $_POST передаётся язык, то-есть например такое: save="Сохранить", delete="Удалить" и т.д., их 50 количеств и зависят на какой странице находишься. Далее надо чтобы происходило обновление фраз в базе, фраза имеет кодовое (например save) название и сам перевод(например Сохранить).
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    PHP:
    1.     <?php
    2.         /**
    3.          * Формирует и проверяет запрос update.
    4.          * @see update
    5.          * @throws SqlException, FormatException
    6.          * @param mixed $arr Запрос для проверки или массив со значениями
    7.          * @param string $tab Таблица, в которой обновляются значения
    8.          * @param mixed $where Условие, по которому обновляются значения, или id записи для обновления
    9.          * @return string Проверенный запрос
    10.          */
    11.         public function getUpdate($arr, $tab=null, $where=null){
    12.             $sql="";
    13.             if (is_array($arr)){
    14.                 if (empty($tab)  || !is_string($tab)) throw new FormatException("Не задана таблица для вставки строки","Неверный тип данных");
    15.                
    16.                 $sets=$this->getAssignmentString($arr, ",");
    17.  
    18.                 $expr=$this->getWhere($where);
    19.                                
    20.                 $sql="update $tab set ".$sets.$expr; //Создаем запрос
    21.             }
    22.             else{
    23.                 $sql=trim($arr."");
    24.             }
    25.  
    26.             $this->checkQuery($sql);
    27.             return $sql;
    28.         }
    29.  
    getWhere и getAssignmentString искать здесь.
     
  8. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Сделал вот так, всёравно пришлось делать в цикле, наверно по другому нельзя, хотя это для админки, запросы там не так то страшны. :)

    PHP:
    1.  
    2. <?
    3. if ($_POST['submit'] == $lang['save']) {
    4.     while (current($HTTP_POST_VARS)) {
    5.         $keys .= key($HTTP_POST_VARS) . ",";
    6.         next($HTTP_POST_VARS);
    7.     }
    8.     $values = implode(",", $HTTP_POST_VARS);
    9.     $values = explode(",", $values);
    10.     $keys = explode(",", $keys);
    11.     for ($numPost = 0; $numPost < count($keys); $numPost++) {
    12.         $values[$numPost] = htmlspecialchars(stripslashes(trim($values[$numPost])));
    13.         $keys[$numPost] = htmlspecialchars(stripslashes(trim($keys[$numPost])));
    14.         if (empty($error)) {
    15.             $resultLanguages = mysql_query("UPDATE yd_languages SET language_ru='" . $values[$numPost] .
    16.                 "' WHERE language_name='" . $keys[$numPost] . "'", $db);
    17.         }
    18.     }
    19. }
    20. ?>
    21.  
     
  9. ridraider

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

    С нами с:
    23 окт 2010
    Сообщения:
    65
    Симпатии:
    0
    foreach($HTTP_POST_VARS as $key => $value)