#php #jquery #mysql
#php #jquery #mysql
Вопрос:
Я хочу создать главную и дочернюю системы с использованием PHP, MYSQL и jQuery.
Я прикрепляю ссылку на образец изображения ниже, смотрите скриншот
Количество продукта и UOM — это поля, которые принадлежат главной таблице, а код, компонент, категория, количество (также) и UOM (дубликат) принадлежат дочерней таблице.
Я хочу добавлять код, компонент, категорию, количество и т.д. Несколько раз, Когда пользователь нажимает «Добавить». Просто нужно знать, как я могу сохранить все эти несколько записей, когда кто-то завершил свои работы и нажал на кнопку окончательного сохранения?
Я действительно и очень настойчиво ищу это, но не получил никакого ответа.
Если кто-нибудь, кто может найти способ или любую помощь или что-нибудь, что поможет мне в этой системе.
Большое спасибо, пожалуйста, помогите
Комментарии:
1. покажите код, который у вас есть на данный момент
Ответ №1:
вы захотите использовать
jQuery ajax для сохранения данных
.clone() чтобы добавить запись в пользовательский интерфейс, вам придется сбросить значения, которые будут у вас в нем
это должно помочь вам начать
Ответ №2:
Каждый раз, когда ваш пользователь нажимает «Добавить», вы хотите использовать значения ваших входных данных формы, создавать новую строку таблицы и показывать выбранные значения. Это достаточно просто, но вам также нужно добавить скрытые входные данные, которые представляют то, что они выбрали в полях выбора выше, поэтому, когда пользователь нажимает сохранить, публикуется вся форма, и вы можете обрабатывать входные данные. Простым примером может быть:
<script>
var count = 0;
$('#add').click(function(event)
{
var code = $('#code').val(),
component = $('#component').val()
category = $('#category').val(),
uom = $('#uom').val();
$('#table').append(
'<tr>'
'<td>' code '<input type="hidden" name="record[' count '][code]"></td>'
'<td>' component '<input type="hidden" name="record[' count '][component]"></td>'
'<td>' category '<input type="hidden" name="record[' count '][category]"></td>'
'<td>' uom '<input type="hidden" name="record[' count '][uom]"></td>'
'</tr>'
);
/*
EDIT: I changed this to a DECREMENTOR so our keys don't overlap and override
anything that is CURRENTLY in the database
*/
count --;
})
</script>
Это позволило бы прикрепить обработчик щелчка к кнопке добавить. Каждый раз, когда на него нажимают, мы получаем значения входных данных, сохраняем их в переменной и создаем добавляем новую строку таблицы в вашу «таблицу предварительного просмотра» ниже, которая показывает выбранные ими значения и создает скрытые входные данные, которые могут быть обработаны позже, после того как пользователь нажмет Сохранить.
Некоторые замечания по этому поводу: — он получает только значение выбранных входных данных (поэтому для полей выбора, value
из option
не текста. вам придется проделать дополнительную работу, чтобы заменить это в строке вашей таблицы. — вся ваша таблица должна быть инкапсулирована в <form>
тег, внутри которого также должна быть ваша save
кнопка.
Как только вы получите отправленные данные на сервер, выполните print_r($_POST)
, чтобы посмотреть, как это выглядит, вы должны быть в состоянии понять, как их довольно легко обработать.
редактировать Хорошо, итак, вы задали здесь много вопросов, я постараюсь ответить на них как можно лучше, не сочиняя роман.
-
Что, если кто-то по ошибке нажмет на добавить и захочет отменить добавление (или передумает, что угодно).
На самом деле это не так сложно. Если это произойдет, просто удалите добавленную строку таблицы из вашей таблицы, используя $.remove. Поскольку все скрытыеinput
элементы содержатся в строке таблицы, они также будут удалены из формы, поэтому при публикации пользователем полей не будет. -
Как вы должны очистить данные?
Очищайте данные, когда пользователь нажимаетadd
, во время заполнения формы, а не после, непосредственно перед отправкой формы. Будет легче справиться с ошибками ввода, когда пользователь нажимает добавить, чем с ними, когда они нажимают сохранить. -
Как вы можете использовать этот метод, если хотите изменить существующие записи в базе данных?
Есть несколько различных способов, которыми вы можете справиться с этим. Самый простой способ — предварительно заполнить вашу форму строками таблицы для каждой существующей строки в вашей базе данных и добавитьid
(при условии, что у вас есть первичный ключ автоматического увеличения для каждой строки) входное значение для этой записи в строке таблицы. Таким образом, при обработке формы вы сможете увидеть, существующая ли это запись, проверив наличиеid
в опубликованных данных и подтвердив, что она существует в вашей базе данных. Если у него нетid
ключа, вы знаете, что это новая запись, и вам нужно сделатьINSERT
, и если это так, вы можете сделатьUPDATE
или оставить запись как есть. ДляDELETED
строк вам нужно будет просмотреть опубликованные данные, прежде чем выполнять какие-либоINSERT
действия, собратьid
опубликованные значения и выполнить запрос, что-то вродеDELETE FROM table WHERE ID IN (<list of posted ids>)
. Это приведет к удалению всех строк, которые удалил пользователь, затем вы можете снова просмотреть опубликованные данные и вставить новые строки.
Пример предварительного заполнения этой таблицы будет выглядеть примерно так:
<?php
$query = "SELECT * FROM bill_items WHERE bill_id = 123";
$result = mysql_query($query);
$materials = array();
while ($row = mysql_fetch_assoc($query))
{
$materials []= $row;
}
?>
<? foreach ($materials as $material): ?>
<tr>
<td>
<?= $material['code']; ?>
<input type="hidden" name="record[<?= $material['id']; ?>][code]"
value="<?= $material['uom']; ?>">
</td>
<td>
<?= $material['component']; ?>
<input type="hidden" name="record[<?= $material['id']; ?>][component]"
value="<?= $material['uom']; ?>">
</td>
<td>
<?= $material['category'];
<input type="hidden" name="record[<?= $material['id']; ?>][category]"
value="<?= $material['uom']; ?>">
</td>
<td>
<?= $material['quantity']; ?>
<input type="hidden" name="record[<?= $material['id']; ?>][quantity]"
value="<?= $material['uom']; ?>">
</td>
<td>
<?= $material['uom']; ?>
<input type="hidden" name="record[<?= $material['id']; ?>][uom]"
value="<?= $material['uom']; ?>">
<input type="hidden" name="record[<?= material['id']; ?>][id]"
value="<?= $material['id']; ?>">
</td>
</tr>
<? endforeach; ?>
Также, примечание. Я изменил приведенный выше пример кода javascript. Я изменил count
на count--
, потому что, когда вы предварительно заполняете форму данными, которые в данный момент находятся в базе данных, вы собираетесь использовать id
материал в ключе ввода. Когда пользователь добавляет новые данные, существует вероятность того, что ключ, сгенерированный с помощью javascript (с count
), столкнется с существующими данными таблицы. Чтобы исправить это, мы меняем его на count--
. Этот ключ (в javascript) на самом деле не важен, он просто сохраняет наши данные сгруппированными вместе, поэтому отрицательное значение здесь ни на что не влияет.
Комментарии:
1. Спасибо, бади, действительно оценил ..! мы будем работать на основе count . Что, если кто-то по ошибке нажал на добавить, а затем он захочет снова отменить это, тогда какой будет команда? Если после добавления всей системы, как вы упомянули выше, когда я нажимаю на окончательное сохранение, что я должен написать, я имею в виду код jquery, нужно ли мне его стерилизовать? как я могу указать идентификатор. если что, модифицировать одну и ту же систему одновременно и т.д. Я знаю, что прошу здесь почти все, но поскольку я новичок в том, над чем работать над этим проектом, поэтому найдите подходящего человека или, я могу сказать, инструктора, который может мне помочь. Спасибо
2. здесь много вопросов, я постараюсь ответить на них, отредактировав свой ответ