есть массив Код (Text): $qty = $_POST['qty']; как мне поменять значение в таблице БД? mysql_query ("UPDATE table SET ????? WHERE user = '$id_user'") Я понимаю, что через цикл, но не могу понять как
PHP: $arr=array(); $arr[]="field1='value1'"; $arr[]="field2='value2'"; $arr[]="field3='value3'"; $set=implode(',',$arr); mysql_query ("UPDATE table SET $set WHERE user = '$id_user'");
Играю в угадайку: Если ключ массива соответствует имени, а значение - собственно значению, на которое надо изменить, то PHP: <? /*бла бла бла*/ $sql_values = array(); foreach($_POST as $key => $value) $sql_values[] = "$key = '$value'"; $sql = 'UPDATE `table` SET '.implode(', ',$sql_values).' WHERE `user`='.$id_user;
Смысл вот в чем: есть корзина с товарами. структура корзины в бд: id_cart | user | product | qty | price | cart | order_set (все поля я не стал перечислять, т.к. это не важно) Она выводится: Код (Text): echo "<form method=post action='order_process.php' enctype='multipart/form-data'><table>"; while ($user_list = mysql_fetch_array ($user_exist)) {echo "<tr> <td><img src='img/".$user_list['image_main']."' width=70px height=100px></td> <td>".$user_list['brand_name']." ".$user_list['synonym']." ".$user_list['model_name']."</td> <td>".$user_list['type']."<input type=hidden name=type[] value='".$user_list['type']."'></td> <td>".$user_list['price_normal']."<input type='hidden' name=price[] value='".$user_list['price_normal']."'></td> <td><input name=qty[] type=text value=1 size=3></td> <td><a href='delete_from_cart.php?good=".$user_list['id_cart']."'>Удалить</a><input type=hidden name=id[] value=".$user_list['id']."></td> </tr>" ;} echo "<tr><td><input name=comment type=text></td></tr></table><input type=image src='imgs/order.gif'></form>"; Запрос к БД приводить не буду, потому что не суть, в данном случае input qty передает кол-во товара, которое мне и надо изменить в БД. Отсюда вопрос, который я задал в начале ветки
LAlexS Всё проще: implode(", ", array_keys($array)); ты получишь поля и implode(", ", $array); значения соответственно.
PHP: <?php $query = 'UPDATE TABLE `table` SET `'.implode('`,`', array_keys($_POST)).'` VALUES "'.implode('","', $_POST).'" WHERE ....
Что-то тяжело мне эта задачка дается. Благодаря [vs] я понял как применять Но теперь меня достает ошибка: код: Код (Text): $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()); пишет: Где я косячу?
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());
чуть подправил, но видно не помогло: Код (Text): {$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 тут может стоять?
действительно, перепутал с REPLACE =) Правильный синтаксис такой [sql]... SET `field`="value", `field2`="value" ...[/sql]
интересно, мне одному непонятно что нужно обновлять на что? 0,1,2,3,4 обновлять на это 1,1,8,9,1 ? и при чём тут qty ? или нужно обновить все 0 на 1, все 1 на 1, 2 на 8, 3 на 9 и 4 на 1 в поле qty?
Gromo есть список товаров в корзине, где есть поле input c name=qty. Там можно произвольно поменять цифру, т.е. кол-во: Код (Text): <input name=qty[] type=text value=1 size=3> По умолчанию, при попадании в корзину qty ставится "1". Затем, если кол-во изменено, надо проапдейтить изменения в БД. В этом мой вопрос и есть. У меня не получается изменить это значение в БД в файле обработчике. Точнее не могу понять как это сделать. [vs] Наверно, суть тоже неправильно понял? Потому что, не получается у меня по твоему варианту. Хотя, не исключаю, что туплю я )
неверный подход - неверные вопросы. как вариант можно обновлять кол-во используя уникальный айди товара: HTML: <input name="items[1420]" value="1"> <input name="items[2201]" value="4"> <input name="items[1045]" value="1"> php: PHP: <?php ... foreach($_POST['items'] as $item_id=>$qty){ mysql_query("UPDATE table SET qty='$qty' WHERE item_id=$item_id and user=$user_id"); }
Код (Text): echo "<form method=post action='order_process.php' enctype='multipart/form-data'><table>"; while ($user_list = mysql_fetch_array ($user_exist)) {echo "<tr> <td>".$user_list['brand_name']." ".$user_list['synonym']." ".$user_list['model_name']."</td> <td><input name=qty[] type=text value=".$user_list['qty']." size=3><input type=hidden name=id_cart[] value=".$user_list['id_cart']."></td> </tr>";} echo "</table><input type=image src='imgs/order.gif'></form>"; обработчик, как подсказал Gromo Код (Text): $id_cart = $_POST['id_cart']; $qty = $_POST['qty']; foreach($_POST['qty'] as $id_cart=>$qty){ mysql_query("UPDATE shopping_cart SET qty='$qty' WHERE id_cart=$id_cart and delay='0'");} igordata в качестве id я использовал id_cart - ид позиции в корзине. И все-равно не работает...
попробуй PHP: $n=sizeof($_POST['id_cart']) ; for($i=0;$i<$n;$i++) { $id_cart =$_POST['id_cart'][$i]; $qty=$_POST['qty'][$i]; mysql_query("UPDATE shopping_cart SET qty='$qty' WHERE id_cart=$id_cart and delay='0'"); }
runner ЗАРАБОТАЛО!!! Спасибо огромное! Я, блин, 5 дней уже мучаюсь с этой штукой ( Но я все-равно не могу понять почему не работал предыдущий способ. Он ведь вроде логичный. Что там не так?
$_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