За последние 24 часа нас посетили 18602 программиста и 1599 роботов. Сейчас ищут 978 программистов ...

массив и UPDATE. Помогите, плиз!

Тема в разделе "PHP для новичков", создана пользователем LAlexS, 11 апр 2011.

  1. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    есть массив

    Код (Text):
    1. $qty = $_POST['qty'];
    как мне поменять значение в таблице БД?

    mysql_query ("UPDATE table SET ????? WHERE user = '$id_user'")

    Я понимаю, что через цикл, но не могу понять как
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дай еще кода. приведи структуру бд.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    [sql]SET `field`="value", `field2`="value"[/sql]
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    PHP:
    1. $arr=array();
    2. $arr[]="field1='value1'";
    3. $arr[]="field2='value2'";
    4. $arr[]="field3='value3'";
    5. $set=implode(',',$arr);
    6. mysql_query ("UPDATE table SET $set WHERE user = '$id_user'");
     
  5. Crayday

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

    С нами с:
    7 апр 2011
    Сообщения:
    26
    Симпатии:
    0
    Играю в угадайку:
    Если ключ массива соответствует имени, а значение - собственно значению, на которое надо изменить, то

    PHP:
    1. <?
    2. /*бла бла бла*/
    3. $sql_values = array();
    4. foreach($_POST as $key => $value) $sql_values[] = "$key = '$value'";
    5. $sql = 'UPDATE `table` SET '.implode(', ',$sql_values).' WHERE `user`='.$id_user;
     
  6. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Смысл вот в чем:

    есть корзина с товарами. структура корзины в бд:

    id_cart | user | product | qty | price | cart | order_set (все поля я не стал перечислять, т.к. это не важно)

    Она выводится:

    Код (Text):
    1. echo "<form method=post action='order_process.php' enctype='multipart/form-data'><table>";
    2. while ($user_list = mysql_fetch_array ($user_exist))
    3.     {echo "<tr>
    4.     <td><img src='img/".$user_list['image_main']."' width=70px height=100px></td>
    5.     <td>".$user_list['brand_name']." ".$user_list['synonym']." ".$user_list['model_name']."</td>
    6.     <td>".$user_list['type']."<input type=hidden name=type[] value='".$user_list['type']."'></td>
    7.     <td>".$user_list['price_normal']."<input type='hidden' name=price[] value='".$user_list['price_normal']."'></td>
    8.     <td><input name=qty[] type=text value=1 size=3></td>
    9.     <td><a href='delete_from_cart.php?good=".$user_list['id_cart']."'>Удалить</a><input type=hidden name=id[] value=".$user_list['id']."></td>
    10.     </tr>"
    11.     ;}
    12. echo "<tr><td><input name=comment type=text></td></tr></table><input type=image src='imgs/order.gif'></form>";
    Запрос к БД приводить не буду, потому что не суть, в данном случае

    input qty передает кол-во товара, которое мне и надо изменить в БД. Отсюда вопрос, который я задал в начале ветки

     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    LAlexS
    Всё проще:
    implode(", ", array_keys($array)); ты получишь поля и
    implode(", ", $array); значения соответственно.
     
  8. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Я все-равно не понимаю, как это применить к моему случаю.

    Люди, ну объясните глупому!
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. $query = 'UPDATE TABLE `table` SET `'.implode('`,`', array_keys($_POST)).'` VALUES "'.implode('","', $_POST).'" WHERE ....
     
  10. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Что-то тяжело мне эта задачка дается.
    Благодаря [vs] я понял как применять
    Но теперь меня достает ошибка:

    код:
    Код (Text):
    1. $result = mysql_query("UPDATE shopping_cart SET '".implode(',', array_keys($qty))."' VALUES '".implode(',', $qty)."' WHERE user = '$id_user' AND delay = 0") or die("Error! ".mysql_error());
    пишет:
    Где я косячу?
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    LAlexS
    а слабо посмотреть запрос? =)

    вот эту всю шляпу надо вывести и посмотреть
    $q = "UPDATE shopping_cart SET '".implode(',', array_keys($qty))."' VALUES '".implode(',', $qty)."' WHERE user = '$id_user' AND delay = 0";
    echo $q;
    $result = mysql_query($q) or die("Error! ".mysql_error());
     
  12. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    чуть подправил, но видно не помогло:
    Код (Text):
    1. {$result = mysql_query("UPDATE shopping_cart SET qty = '".implode(',', array_keys($qty))."' VALUES '".implode(',', $qty)."' WHERE user = '$id_user' AND delay = 0") or die("Error! ".mysql_error());
    igordata
    выводит:
    А разве VALUES тут может стоять?
     
  13. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    действительно, перепутал с REPLACE =)
    Правильный синтаксис такой
    [sql]... SET `field`="value", `field2`="value" ...[/sql]
     
  14. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    интересно, мне одному непонятно что нужно обновлять на что? 0,1,2,3,4 обновлять на это 1,1,8,9,1 ? и при чём тут qty ?
    или нужно обновить все 0 на 1, все 1 на 1, 2 на 8, 3 на 9 и 4 на 1 в поле qty?
     
  15. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Gromo

    есть список товаров в корзине, где есть поле input c name=qty. Там можно произвольно поменять цифру, т.е. кол-во:

    Код (Text):
    1. <input name=qty[] type=text value=1 size=3>
    По умолчанию, при попадании в корзину qty ставится "1". Затем, если кол-во изменено, надо проапдейтить изменения в БД. В этом мой вопрос и есть. У меня не получается изменить это значение в БД в файле обработчике. Точнее не могу понять как это сделать.

    [vs]

    Наверно, суть тоже неправильно понял? Потому что, не получается у меня по твоему варианту. Хотя, не исключаю, что туплю я )
     
  16. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Сделай апдейт в цикле. Запросы быстрые, будет за доли секунды отрабатывать
     
  17. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    неверный подход - неверные вопросы.

    как вариант можно обновлять кол-во используя уникальный айди товара:

    HTML:
    1. <input name="items[1420]" value="1">
    2. <input name="items[2201]" value="4">
    3. <input name="items[1045]" value="1">
    php:
    PHP:
    1. <?php
    2. ...
    3. foreach($_POST['items'] as $item_id=>$qty){
    4.   mysql_query("UPDATE table SET qty='$qty' WHERE item_id=$item_id and user=$user_id");
    5. }
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если не юзать id, то как понять, что обновлять? :D
     
  19. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Код (Text):
    1. echo "<form method=post action='order_process.php' enctype='multipart/form-data'><table>";
    2. while ($user_list = mysql_fetch_array ($user_exist))
    3.     {echo "<tr>
    4.     <td>".$user_list['brand_name']." ".$user_list['synonym']." ".$user_list['model_name']."</td>
    5.     <td><input name=qty[] type=text value=".$user_list['qty']." size=3><input type=hidden name=id_cart[] value=".$user_list['id_cart']."></td>
    6.     </tr>";}
    7. echo "</table><input type=image src='imgs/order.gif'></form>";
    обработчик, как подсказал Gromo

    Код (Text):
    1. $id_cart = $_POST['id_cart'];
    2. $qty = $_POST['qty'];
    3.  
    4. foreach($_POST['qty'] as $id_cart=>$qty){
    5.    mysql_query("UPDATE shopping_cart SET qty='$qty' WHERE id_cart=$id_cart and delay='0'");}

    igordata
    в качестве id я использовал id_cart - ид позиции в корзине.

    И все-равно не работает...
     
  20. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    попробуй
    PHP:
    1.  
    2. $n=sizeof($_POST['id_cart']) ;
    3. for($i=0;$i<$n;$i++)
    4. {
    5.       $id_cart =$_POST['id_cart'][$i];
    6.       $qty=$_POST['qty'][$i];
    7.       mysql_query("UPDATE shopping_cart SET qty='$qty' WHERE id_cart=$id_cart and delay='0'");
    8. }
    9.  
     
  21. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    runner

    ЗАРАБОТАЛО!!! Спасибо огромное! Я, блин, 5 дней уже мучаюсь с этой штукой (

    Но я все-равно не могу понять почему не работал предыдущий способ. Он ведь вроде логичный. Что там не так?
     
  22. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    $_POST['qty'] это массив с индексами начиная с 0 и далее 1, 2,3,4....
    Могу только предположить, что позиция в корзине у тебя начинается с 1 и далее 2,3,4..

    Таким образом обработка в цикле должны использовать

    $id_cart=1 и $qty равно значению количества в позиции 1
    $id_cart=2 и $qty равно значению количества в позиции 2
    $id_cart=3 и $qty равно значению количества в позиции 3

    а получается, что цикл
    foreach($_POST['qty'] as $id_cart=>$qty)
    выдает
    $id_cart=0 и $qty равно значению количества в позиции 1
    $id_cart=1 и $qty равно значению количества в позиции 2
    $id_cart=2 и $qty равно значению количества в позиции 3
     
  23. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Точно!!! Теперь все встало на свои места!

    Еще раз спасибо!
     
  24. twim32

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

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Некропост, я знаю. Но... Это идеально! Спасибо ;)