UPDATE всех строк

Статус
В этой теме нельзя размещать новые ответы.

fredis69

Постоялец
Регистрация
24 Окт 2008
Сообщения
84
Реакции
2
Здравствуйте!
Есть корзина товар, в которой пользователь меняет колличество заказываемого товар (автоматом количество ставится 1, пользователь только в корзине может поменять количество товара).
Вот мой скрипт корзины:
PHP:
<?php if(empty($_POST)) { ?>
<form method="post">
<?php
$res_basket = mysql_query("SELECT * FROM basket WHERE id_user='$order_user_id' ORDER BY id ASC");
$row_basket = mysql_fetch_array($res_basket);
if ($row_basket){
do{
$id_product = $row_basket['id_product'];
$res_product = mysql_query("SELECT * FROM product WHERE id='$id_product'");
$row_product = mysql_fetch_array($res_product);
if ($row_product){?>
<table><tr>
<td><?=$row_product['title']?></td>
<td><input type="text" name="item[]" value="<?=$row_basket['quantity']?>"></td>
</tr></table>
<?php }}
while ($row_basket = mysql_fetch_array($res_basket));
}?>
<input type="submit" name="submitcount" value="Пересчитать стоимость заказа" />
</form>
<?php }
else{
if(isset($_POST['item']))
{
	$items = array();
	foreach($_POST['item'] as $value)
	{
		if(ctype_digit($value)) $items[] = $value;
	}
	if(count($items) > 0)
	{
		$ids = implode(',', $items);
		$query = "UPDATE basket SET quantity='$ids' WHERE id_user='$order_user_id' ";
		mysql_query($query);
	}
	if($query)
	{
echo "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=/basket/\">";  
	}
}
}?>

Данный скрипт меняет количество заказываемых товаров во всех строка на число указанное в самом первом input,

Допустим в корзине выводится:
молоко - 1
хлеб - 1
мороженое - 1



Если мне надо заказать хлеба 3шт, я меняю 1 на 3:
молоко - 1
хлеб - 3
мороженое - 1


После чего нажимаю на кнопку пересчитать сумму, и у меня происходит перезагрузка и выводится:
молоко - 1
хлеб - 1
мороженое - 1


А если я меняю количество первого товара (молоко:(
молоко - 3
хлеб - 1
мороженое - 1


То выводится:
молоко - 3
хлеб - 3
мороженое - 3


Подскажите как это исправить, я так понимаю надо еще передавать id строки корзины, и изменить в БД именно строку с этим id.
$order_user_id - это ид пользователя.
 
Ошибка в том, что
PHP:
$ids = implode(',', $items); 
        $query = "UPDATE basket SET quantity='$ids' WHERE id_user='$order_user_id' "; 
        mysql_query($query);
выдаст ошибку в запросе в случае если в $items 2 товара и более
поскольку SQL запрос приобретает неверный синтаксис типа
UPDATE basket SET quantity='1,3,4,6'
Далее не совсем очевидный баг. У тебя в цикле WHILE стоит SQL запрос. Это значит что выбрав большой ассортимент и пересчитав его твой прибьеш свой сервер. 1000 товаров = 1000 запросов :))
Перепеиши запрос так:
SELECT B.*,P.* FROM basket B
LEFT JOIN product P ON P.id=B.id_product
WHERE B.id_user='$order_user_id' ORDER BY B.id ASC"
Таким образом объединишь таблицы корзина-товары. И вообще, если SQL запрос попадает в цикл, подумай, скорее всего ты делаешь что-то не правильно.
 
Ошибка в том, что
PHP:
$ids = implode(',', $items); 
        $query = "UPDATE basket SET quantity='$ids' WHERE id_user='$order_user_id' "; 
        mysql_query($query);
выдаст ошибку в запросе в случае если в $items 2 товара и более
поскольку SQL запрос приобретает неверный синтаксис типа
UPDATE basket SET quantity='1,3,4,6'
Далее не совсем очевидный баг. У тебя в цикле WHILE стоит SQL запрос. Это значит что выбрав большой ассортимент и пересчитав его твой прибьеш свой сервер. 1000 товаров = 1000 запросов :))
Перепеиши запрос так:
SELECT B.*,P.* FROM basket B
LEFT JOIN product P ON P.id=B.id_product
WHERE B.id_user='$order_user_id' ORDER BY B.id ASC"
Таким образом объединишь таблицы корзина-товары.


Несовсем понял, что делать. можно поподробнее пожалуйсто
 
Несовсем понял, что делать. можно поподробнее пожалуйсто
1)
Пусть items у нас массив с одним значением 3
тогда
$ids = implode(',', $items); сделает $ids равным 3
и запрос
$query = "UPDATE basket SET quantity='3' WHERE id_user='$order_user_id' ";
имеет верный синтаксис.
2)
Пусть items у нас массив с тремя значениями 3,5,7
тогда
$ids = implode(',', $items); сделает $ids строкой вида"3,5,7"

и запрос
$query = "UPDATE basket SET quantity='3,5,7' WHERE id_user='$order_user_id' ";
имеет не верный верный синтаксис, т.е. апдейта не будет.

Далее о цикле. Сейчас он выглядит так:
PHP:
$res_basket = mysql_query("SELECT * FROM basket WHERE id_user='$order_user_id' ORDER BY id ASC"); 
$row_basket = mysql_fetch_array($res_basket); 
if ($row_basket){ 
do{ 
$id_product = $row_basket['id_product']; 
$res_product = mysql_query("SELECT * FROM product WHERE id='$id_product'"); 
$row_product = mysql_fetch_array($res_product);
............. 
while ($row_basket = mysql_fetch_array($res_basket)); 
}
Ты сначала получаешь все товары из корзины, а потом в цикле для каждого корзинного товара ищешь в товарной таблице "title" товара.
Смотри SQL запрос в моем посте выше, так ты порлучишь одним запросом набор данных, где к каждому товару из корзины присоединены столбцы из  product в соответствии  product.id=Basket.id_product:
_____________________________________________________________________________
то что пришло из "Корзины"                   | то что пришло из   "товаров"  |
_____________________________________________|_______________________________|
userid, produnctid,itemcount,....и.т.п       | title,........                |
...............и таких по строке на 1 вид товара.............................|
_____________________________________________________________________________|
 
1)
Пусть items у нас массив с одним значением 3
тогда
$ids = implode(',', $items); сделает $ids равным 3
и запрос
$query = "UPDATE basket SET quantity='3' WHERE id_user='$order_user_id' ";
имеет верный синтаксис.
2)
Пусть items у нас массив с тремя значениями 3,5,7
тогда
$ids = implode(',', $items); сделает $ids строкой вида"3,5,7"
и запрос
$query = "UPDATE basket SET quantity='3,5,7' WHERE id_user='$order_user_id' ";
имеет не верный верный синтаксис, т.е. апдейта не будет.
А как поменять количество заказа именно в той строке в которой надо, точнее как определить в какой строке(для какого товара) менять количество
 
А как поменять количество заказа именно в той строке в которой надо, точнее как определить в какой строке(для какого товара) менять количество
А вот тут в цикле :))
PHP:
$itemIDs - массив из ID товаров, легко получается при фетче предыдущего запроса.
$quantities - массив из количеств единиц товара в корзине пришел из ПОСТа. 
foreach($itemIDs as $i=>$id){
 запрос UPDATE basket SET quantity='$quantities[$i]' WHERE id_user='$order_user_id' AND поле_для_IDтовара=$itemIDs[$i]
}
 
А вот тут в цикле :))
PHP:
$itemIDs - массив из ID товаров, легко получается при фетче предыдущего запроса.
$quantities - массив из количеств единиц товара в корзине пришел из ПОСТа. 
foreach($itemIDs as $i=>$id){
 запрос UPDATE basket SET quantity='$quantities[$i]' WHERE id_user='$order_user_id' AND поле_для_IDтовара=$itemIDs[$i]
}

horpah
Извени пожалуйсто, но я нече немогу понять, я не спец в php, так маленько знаком.

Можеш пожалуйсто написать как будет все выглядеть полностью(готовый скрипт), если нетрудно.

---------- Post added at 18:23 ---------- Previous post was at 16:33 ----------

Ребята, помогите пожалуйсто разобраться, очень надо.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху