Показать сообщение отдельно
  #8 (permalink)  
Старый 19.03.2015, 01:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если:

Пользователь в первом блоке пишет - 450
Во втором - 260
В третье - 500

то это означает выбор нескольких из множества, и значит форма должна быть одна, а не несколько с одним полем в каждой. Разве можно в нескольких формах написать и отправить их одновременно?

То есть РНР сценарий совсем не ту html-структуру выдает. Таблица должна быть вложена в форму, ячейки таблицы должны содержать поля формы (а данном случае три), кнопка "Добавить в смету" должна быть одна.

Имя поля формы должно отражать принадлежность поля к массиву, то есть:

<input type="text" name="fact_price[id_pc_price]">


Атрибут id полям формы совсем не нужен, имя "in_w" у кнопки submit нужно только в том случае, если price.php кроме POST данных этой формы принимает и обрабатывает еще и другие POST данные и их селекция включает и проверку этого имени. Иначе имя совсем не нужно, и кнопку на сервер отправлять не надо.

Заносить в сессию или в куки, а только потом в базу... Не знаю, все зависит от задач, может и надо, а может и пустое занятие, мне трудно об этом судить не зная многого.

Как бы ни было, сервер получит массив вида:

Код:
fact_price (
    [25]   => 450
    [123] => 260
    [46]   => 500
)
То есть не 1, 2, 3, а идентификаторы услуг будут его ключами. Остается проверить и выбрать те услуги, которые заполнены:

if($fact = array_diff(array_map('intval', $_POST['fact_price']), array(0))) {
    //действия с данным, например сумма на сервере, если нужна:
    $sum = array_sum($fact);
    //требуется проверка и ключей полученного массива $fact, 
    //если только запись не подготовленными запросами PDO
} else {
    //ничего не выбрано
}


То есть на серверной стороне все просто и удобно, на клиентской тоже нет сложностей:

<html> 
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    var o = $('#price').find('input[name^="fact"]').keyup(function() {
        var m = 0; this.value = this.value.replace(/\D/, '');
        for(var i=0, k=o.length; i<k; i++) m += o[i].value * 1;
        $('#total').text(m)
    })
});
</script>     
</head> 
<body>
<form id="price">
    <input name="fact_price[25]" /> <input name="fact_price[123]" /> <input name="fact_price[46]" />
    <input type="submit" />
</form>
<span id="total"></span>
</body> 
</html>


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