PHP Mysql и Jquery, динамически заполняющие несколько записей

#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) , чтобы посмотреть, как это выглядит, вы должны быть в состоянии понять, как их довольно легко обработать.

редактировать Хорошо, итак, вы задали здесь много вопросов, я постараюсь ответить на них как можно лучше, не сочиняя роман.

  1. Что, если кто-то по ошибке нажмет на добавить и захочет отменить добавление (или передумает, что угодно).
    На самом деле это не так сложно. Если это произойдет, просто удалите добавленную строку таблицы из вашей таблицы, используя $.remove. Поскольку все скрытые input элементы содержатся в строке таблицы, они также будут удалены из формы, поэтому при публикации пользователем полей не будет.

  2. Как вы должны очистить данные?
    Очищайте данные, когда пользователь нажимает add , во время заполнения формы, а не после, непосредственно перед отправкой формы. Будет легче справиться с ошибками ввода, когда пользователь нажимает добавить, чем с ними, когда они нажимают сохранить.

  3. Как вы можете использовать этот метод, если хотите изменить существующие записи в базе данных?
    Есть несколько различных способов, которыми вы можете справиться с этим. Самый простой способ — предварительно заполнить вашу форму строками таблицы для каждой существующей строки в вашей базе данных и добавить 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. здесь много вопросов, я постараюсь ответить на них, отредактировав свой ответ