Перейти к содержимому


Фото
- - - - -

Ajax: сохранение цены и количества из админки


  • Чтобы отвечать, сперва войдите на форум
34 ответов в теме

#21 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 10:31

Лучший путь для Вас - найти (нанять) специалиста-консультанта. В 90% случаев он Вам будет объяснять, что Ваша идея совсем плохая, и подскажет стандартные проверенные пути. Сэкономите много своего рабочего времени и приобретете массу полезных знаний...

Ну чем плоха идея хранить склад не в отдельной программе с синхронизацией туда-сюда, а в базе данных моего сайта и управлять облегчённой админкой?

В первом случае - это занесение всех товаров в базу с разбивкой по категориям, во втором - база уже есть.

Возможно, эта тема заинтересует других участников и они пойдут по моему же пути.



#22 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 10:37

Добавлю. Наиболее правильное, с моей точки зрения, решение - отправлять запрос в БД.

Однако, функция placeholder не позволит отправить в БД запрос вида

 

UPDATE s_variants
SET stock=КОЛИЧЕСТВО, datechanged=NOW()
WHERE id=КАТЕГОРИЯ AND 
(SELECT stock FROM s_variants WHERE id=КАТЕГОРИЯ LIMIT 1) < КОЛИЧЕСТВО
LIMIT 1
 

Конкретно 4 строчка. Не позволит подставить КОЛИЧЕСТВО



#23 phukortsin

phukortsin
  • Фрилансер
  • 933 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 07.02.2019 - 11:02

Ну чем плоха идея хранить склад не в отдельной программе с синхронизацией туда-сюда, а в базе данных моего сайта и управлять облегчённой админкой?
В первом случае - это занесение всех товаров в базу с разбивкой по категориям, во втором - база уже есть.
Возможно, эта тема заинтересует других участников и они пойдут по моему же пути.

 
Идея хорошая - если ее написать на плакате,  повесить на стенку и любоваться. Таких хороших идей напридумать можно много.
 
Надо отличать идею от реализации. Первое - каждый легко может придумать. А второе - тут надо и знания, и умения, и опыт, и время (или деньги)...
 
Подобных идей на форуме было много. А результатов - почти никаких...
 
 

Добавлю. Наиболее правильное, с моей точки зрения, решение - отправлять запрос в БД.
Однако, функция placeholder не позволит отправить в БД запрос вида

Отправляйте, как считаете нужным.
Если функция не позволяет, переработайте функцию, чтоб позволяла.

#24 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 12:36

$query = $this->db->placehold("UPDATE s_variants SET ?%, datechanged=NOW() WHERE id=? AND (SELECT stock FROM s_variants WHERE id=? LIMIT 1) < КОЛИЧЕСТВО LIMIT 1", $variant, intval($id));
 

Вот только передать количество не получается.



#25 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 12:47

 
Идея хорошая - если ее написать на плакате,  повесить на стенку и любоваться. Таких хороших идей напридумать можно много.
 
Надо отличать идею от реализации. Первое - каждый легко может придумать. А второе - тут надо и знания, и умения, и опыт, и время (или деньги)...
 
Подобных идей на форуме было много. А результатов - почти никаких...

Вы хотите сказать, идея нормальная, реализация плохая? 



#26 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 13:08

Проблема была лишь в том, что я передавал массив. Переписал функцию update_stock

 

    public function update_stock($id, $stock)
    {
        if($stock == 'символ_бесконечности' || $stock == '') $stock = null;
        $query = $this->db->placehold("UPDATE __variants SET `stock`=? , `stockchanged` = NOW()  WHERE id=? LIMIT 1", $stock, intval($id));
        $this->db->query($query);
        return $id;
    }
 

 

Теперь работает нормально.



#27 phukortsin

phukortsin
  • Фрилансер
  • 933 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 07.02.2019 - 13:12

Вы хотите сказать, идея нормальная, реализация плохая? 

 

Я не знаю, какова Ваша реализация. Если опишете свою реализацию точно и полностью, а не отдельными обрывками, как сейчас, тогда можно будет обсуждать по существу.



#28 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 13:21

Интересно, почему запрос 

 

UPDATE s_variants SET `stock`='77' , `stockchanged` = NOW()  WHERE id=6128  AND (SELECT stock FROM s_variants WHERE id=6128 LIMIT 1) < '77' LIMIT 1 

не хочет работать? 

#1093 - Не допускается указание таблицы 's_variants' в списке таблиц FROM для внесения в нее изменений


#29 phukortsin

phukortsin
  • Фрилансер
  • 933 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 07.02.2019 - 13:39

Потому  что такие правила у MySQL.

Может, надо попроще, например:

UPDATE s_variants SET `stock`='77' , `stockchanged` = NOW()  WHERE id=6128  AND stock< '77'



#30 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 14:23

Потому  что такие правила у MySQL.

Может, надо попроще, например:

UPDATE s_variants SET `stock`='77' , `stockchanged` = NOW()  WHERE id=6128  AND stock< '77'

Мне нужно обновить поле stock, а stockchanged обновлять только при условии, когда stock<77. Это возможно сделать одним запросом? Или только два UPDATE-запроса?



#31 phukortsin

phukortsin
  • Фрилансер
  • 933 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 07.02.2019 - 15:24

UPDATE s_variants SET `stock`='77' , `stockchanged` = if(stock<77, NOW(), stockchanged)  WHERE id=6128  AND stock< '77'



#32 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 20:32

UPDATE s_variants SET `stock`='77' , `stockchanged` = if(stock<77, NOW(), stockchanged)  WHERE id=6128  AND stock< '77'

Огромное спасибо. Хоть буду знать на практике, как пишутся условия в SQL. Вот только последнее 

 

AND stock< '77'
 

явно лишнее.



#33 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 20:43

Я не знаю, какова Ваша реализация. Если опишете свою реализацию точно и полностью, а не отдельными обрывками, как сейчас, тогда можно будет обсуждать по существу.

Для начала опишу задачу. Склад (в смысле консультация, бронь, приём заказов) работает 24/7/365, но на отгрузку - только в определённое время.

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

Вопросы стандартные:

1. есть, нету?

2. А сколько есть?

3. Сколько стоит?

4. Забронируйте до понедельника.

И для этого есть склад - буклет с наличием, в котором чёркают, комментируют и т.д, и есть прайс - ещё больший буклет. Также есть отдельный список скидок для каждого клиента, а есть список того, что заказано на фабрике, но пока не поступило на склад, но это уже детали.

Вот чтобы в любой момент я мог зайти, допустим, с планшета по известному только мне адресу и выполнить пункты 1, 2, 3, 4, я и пытаюсь реализовать то, что описано с самого начала топика.

Для начала была взята стандартная админка Симплы, откуда были выкинуты ненужные модули, скрипты (а их там на мегабайт) и оставлен только функционал редактирования количества.

Далее - сохранение количества без перезагрузки страницы.

Далее - дата изменения количества.

Комментарий (например, Иванов забронировал 2 штуки до понедельника)

Цена

Ну и при изменении количества в плюс, меняется "дата получения", в минус - "последняя продажа".

Пока вот так.



#34 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 21:05

UPDATE s_variants SET `stock`='2', `stockchanged` = if(stock<'2', NOW(), stockchanged)   WHERE id=6128
 

не работает

 

 

UPDATE s_variants SET `stock`='2' , `stockchanged` = if(stock<2, NOW(), stockchanged)  WHERE id=6128  AND stock< '2'
 

тоже не работает



#35 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 07.02.2019 - 21:55

Эврика! Их просто нужно поменять местами!!!

 

UPDATE s_variants SET `stockchanged` = if(stock<'5', NOW(), stockchanged), `stock`='5'   WHERE id=6083
 

Работает.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых