Вход

Просмотр полной версии : Помочь с формой


porezon
10.10.2016, 19:21
Здравствуйте, помогите кто-та сделать input в котором будет указана сумма

при выборе товара который есть в span например

<span id='1'>Товар 1 - 500 руб</span>
<span id='2'>Товар 2 - 1500 руб</span>
<span id='3'>Товар 3 - 2500 руб</span>
<span id='4'>Товар 4 - 3500 руб</span>

и надо значение поставить в
<input>

laimas
10.10.2016, 19:36
и надо значение поставить в
<input>

Зачем?

porezon
10.10.2016, 19:40
ну цены поставить надо, в input чтоб дальше человек оплатил нужную сумму

laimas
10.10.2016, 19:51
ну цены поставить надо, в input чтоб дальше человек оплатил нужную сумму

Кто должен сообщать серверу цену товара и соответственно сумму к оплате - клиент или данные имеющиеся на сервере?

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

porezon
10.10.2016, 19:58
данные которые есть в инпуте просто подставлялись и всё, и выводились человеку в зависимости на какую кнопку он клацнул

laimas
10.10.2016, 20:08
данные которые есть в инпуте просто подставлялись и всё

Ну так вопрос в том, какие данные? Если id='4' - это идентификатор товара, то все гут. Но почему бы в таком случае не сделать так (если выбрать можно только штучно):

<form>
<label><input name="good[]" type="checkbox" value="1" data-price="500"> Товар 1 - 500 руб</label>
<label><input name="good[]" type="checkbox" value="2" data-price="1500"> Товар 2 - 1500 руб</label>
....
</form>

и пользователь сразу будет видеть выбор свой, а каждый выбор, это получить выбранные флажки формы и сложить их значения data-price, и отобразить где-то клиенту?

porezon
10.10.2016, 21:10
можно и так, доделаешь до конца? в input нужно вывести сумму

laimas
10.10.2016, 21:27
в input нужно вывести сумму


Еще раз - зачем? :)

porezon
10.10.2016, 21:32
сумма которая попадет в инпут я дальше её в базу передаю, по базе потом проверяю кто заказал и на какую сумму

laimas
10.10.2016, 21:39
сумма которая попадет в инпут я дальше её в базу передаю

Тогда еще раз - сервер ну просто обязан игнорировать цены, которые ему подсовывает клиент!

У вас база, товары описаны в ней, цены описаны в базе, а получить цену товара, это означает сделать запрос в базу по идентификатору товара и получить его цену.

Если вы разрешаете мне как клиенту определять цену, то я разве дурной? Почему бы мне не прислать серверу форму где будет не 500, а 5 руб.? Разве так можно поступать?

Хотя, если не думать, то можно. :) Уже есть прецедент, когда "мелким почерком" в договоре не банк дописал, надеясь на то, что клиент не обратит на это внимание, а наоборот это сделал клиент, а банк прошляпил. И если бы не мировое решение, то банк бы поплатился такой оплошностью.

Вы думаете, что если и вы так торговать будете, то я не смогу "нагреть" вас? :)

porezon
10.10.2016, 21:43
просто в дальнейшем будет подключатся оплата, и если он будет менять в форме сумму, то если меньше оплатить за тот же товар я проверю это

laimas
10.10.2016, 22:06
просто в дальнейшем будет подключатся оплата, и если он будет менять в форме сумму

Клиент просто физически не сможет изменить сумму, если цену, как это и положено, определяет сервер. Клиент может только изменить товары в корзине.

Пусть у вас в таблице goods товары:

id - идентификатор товара, name - его наименование, price - цена товара.

Вы выводите на страницу форму так как я описал в примере. Выбранные товары, их идентификаторы, будут переданы серверу как массив, пусть POST['good'].

if($goods = array_diff(array_map('intval', $_POST['good']), [0])) {
//массив не пуст, опустим проверку наличия таковых товаров в базе, хотя это нужно делать
//пишем полученные gid товаров в таблицу заказов orders, привязывая их к oid заказа покупателя
//если заказчик может редактировать свой выбор, то выбранное им определяется этой таблицей
}

Показать же сумму набранную по товарам (для простоты опускаем именование товаров, тем более мне не известно, что вообще делается у вас на сервере), это

$sql = 'SELECT SUM(price) total FROM goods WHERE id IN(SELECT gid FROM orders WHERE oid='.$order.')';

porezon
10.10.2016, 22:18
:cray: ну сделайте что я прошу, пожалуйста

laimas
10.10.2016, 22:22
Определить цену клиентом и отправить ее серверу?
Это не сложно, в плане кода, но я такого показывать не стану, так делать нельзя, и такое даже обсуждаться не должно.
Пусть вам такое показывает тот, кому пофиг - просят, да пожалуйста. )

porezon
10.10.2016, 23:39
И так на странице есть 4 товара которые отображены в <span></span>

есть сумма которую должен заплатить человек(эту сумму он выбирает сам)
то есть в input форме он вставляет например 1500

и далее нажимает отправить, я фильтрую эту сумму проверяю со всеми возможными и т.д

но на сайте есть товары у которых фиксированная цена например 100, 500 и 1500 рублей

нужно чтоб при выборе нужного товара, сумма просто автоматически вставилась в input поле, без введния её пользователям... Больше ничего не нужна, только чтоб с span кнопки сумма прописывалась в input, и если вдруг он выберет другую span кнопку то цена менялась

laimas
11.10.2016, 02:13
То есть магазин с аукционом, тогда это все меняет. Но

на сайте есть товары у которых фиксированная цена например 100, 500 и 1500 рублей

и вашему магазину либо сказочно повезло, либо будет баг. Как происходит аукцион - "Лот №, название/характеристики", а затем принимаются ставки. Вы же упорно просите прислать цену.

Вопрос - каким образом вы будете знать, что присланная клиентом цена в 700 руб, это цена за товар с ценой 500, и не 1500 руб.?

По идее, в таком случае, на странице не может быть отображено 4 товара, а только один, с предлагаемой ценой или диапазоном цен 100 - 1500 и с возможностью указания и своей цены. Но даже в этом случае серверу должна передаваться информация id=>price. Иначе как можно понять это - "на странице есть 4 товара ... есть сумма которую должен заплатить человек(эту сумму он выбирает сам)"? Эта сумма за что, за несуществующий на странице пятый товар?

я фильтрую эту сумму проверяю со всеми возможными и т.д


Это полная ахинея, если только не иметь уникальных цен или не торговать четырьмя товарами.

warren buffet
11.10.2016, 06:15
Типичный галлюциногенный топик "Гуляют там животные невиданной красы..."

porezon, все начинается с бизнес-логики.

porezon
11.10.2016, 12:07
почему аукцион? мне не нужно никаких готовых цен, всё работает по типу копилки, любой кидает любую сумму, ну чтоб руками её не писать, выбирает по кнопке нужную себе сумму

laimas
11.10.2016, 12:40
любой кидает любую сумму, ну чтоб руками её не писать, выбирает по кнопке нужную себе сумму

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

Я уже говорил, что получить цену и по ней определять на сервере, что это такое, это полная профанация. К чему, к какому товару будет привязываться своя цена? Вы ничего не поясняете, пишите такое, что просто ахтунг.

Теперь же, следуя по тексту, можно предположить, что речь о предложениях на один товар. Тогда:

<style>
#add {
display: none
}
</style>
<script>
function getPrice(o) {
var i = document.getElementById('add');
if(!o.value) {
i.name = o.name;
i.style.display = 'inline'
} else {
i.name = '';
i.style.display = 'none'
}
}
</script>
<form>
<select name="good[12]" onchange="getPrice(this)">
<option value="100">100 руб.</option>
<option value="500">500 руб.</option>
<option value="1500">1500 руб.</option>
<option value="">Другая</option>
</select>
<input id="add" />
<button>GO</button>
</form>

Если будет выбрана своя цена, то сервер получит последнее значение массива - поля ввода, так как оно после списка, а имя получает такое же как и у списка. А 12, это идентификатор товара, а просто цена, это полный бред.

porezon
11.10.2016, 15:58
текс текст текст

porezon
11.10.2016, 16:09
Всё разобрался, всем спасибо

laimas
11.10.2016, 16:30
текс текст текст

Отбой? :)

laimas
11.10.2016, 16:34
Всё разобрался, всем спасибо

Не понятно что там за lprice было и из чего появляется, как в общем и весь код конечно "ни к рогатому", но форматирование в денюжки, это гораздо проще:

string_number.replace(/\B(?=(?:\d{3})+(?!\d))/g, ' ')