Mysql редактировать заказы, которые они разместили - PullRequest
2 голосов
/ 08 ноября 2010

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

Вот как я получаю заказ со страницы и отправляю его в скрипт вставки PHP:

$('#submit').live('click',function(){ 

                    var postData = {};
                    $('#items tr').not(':first').each(function(index, value) {
                        var keyPrefix = 'data[' + index + ']';
                        postData[keyPrefix + '[supp_short_code]'] = $(this).closest('tr').find('.supp_short_code').text();
                        postData[keyPrefix + '[project_ref]'] = $(this).closest('tr').find('.project_ref').text();
                        postData[keyPrefix + '[om_part_no]'] = $(this).closest('tr').find('.om_part_no').text();
                        postData[keyPrefix + '[description]'] = $(this).closest('tr').find('.description').text();
                        postData[keyPrefix + '[quantity_input]'] = $(this).closest('tr').find('.quantity_input').val();
                        postData[keyPrefix + '[cost_of_items]'] = $(this).closest('tr').find('.cost_of_items').text();
                        postData[keyPrefix + '[cost_total_td]'] = $(this).closest('tr').find('.cost_total_td').text();
                    });

                $.ajax
                    ({
                    type: "POST",
                    url: "order.php",
                    dataType: "json",
                    data: postData,
                    cache: false,
                    success: function()
                        {
                            alert("Order Submitted");
                        }
                    });
            });

И это вставка PHP:

if (isset($_POST['data']) && is_array($_POST['data'])) {
                foreach ($_POST['data'] as $row => $data) {
                    $result = mysql_query("INSERT INTO orders (id,order_id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES('', '".$order_id."', '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error());
                }
            }

Так что я знаю, что это не самый чистый способ сделать это, поэтому я изо всех сил пытаюсь найти чистый способ позволить им редактировать заказ.Я знаю, как выполнять запросы «Обновить», но это факт, что я использовал для каждого цикла и массивов, чтобы вставить порядок?У кого-нибудь есть какой-либо совет из приведенного выше кода о том, что подарить пользователю?

Ответы [ 4 ]

1 голос
/ 16 ноября 2010

В зависимости от используемой вами структуры (если она вообще есть), просто создайте представление для заказа.Вы можете сделать это на другой странице или загрузить форму через ajax.В любом случае форма будет выглядеть примерно так:

<?php
    if(isset($_POST['submit']) && $_POST['submit'] == "Submit") {
        $database->update("orders",$_POST,$_POST['id']);
    }

    $order = $database->query(
        "select
            id,
            order_id,
            project_ref,
            supp_short_code,
            om_part_no,
            description,
            quantity,
            cost_of_items,
            cost_total
        from orders where id = ".$id);
?>

<form method="post" action="<?php echo basename($_SERVER['PHP_SELF']); ?>">
    <input type="text" name="id"                value="<?php echo $order['id']; ?>">
    <input type="text" name="order_id"          value="<?php echo $order['order_id']; ?>">
    <input type="text" name="project_ref"       value="<?php echo $order['project_ref']; ?>">
    <input type="text" name="supp_short_code"   value="<?php echo $order['supp_short_code']; ?>">
    <input type="text" name="om_part_no"        value="<?php echo $order['om_part_no']; ?>">
    <input type="text" name="description"       value="<?php echo $order['description']; ?>">
    <input type="text" name="quantity"          value="<?php echo $order['quantity']; ?>">
    <input type="text" name="cost_of_items"     value="<?php echo $order['cost_of_items']; ?>">
    <input type="text" name="cost_total"    value="<?php echo $order['cost_total']; ?>">
    <input type="submit" name="submit" value="Submit">
</form>

Код для объекта $ database находится здесь:

http://www.jtgraphic.net/code/database-object/

1 голос
/ 11 ноября 2010

Я использую сторонний проект генерации кода, который создает сетку данных, которая используется для вставки / обновления записей.Они выполняют запрос на обновление каждого элемента в сетке данных каждый раз, когда происходит обновление.Это приводит к некоторым ненужным обновлениям.

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

0 голосов
/ 16 ноября 2010

Надев мой головной убор, лучше всего рассматривать заказ как объект.

Напишите класс, который обрабатывает все, что вам нужно с ним сделать, например, создание нового, очистка, проверка, сохранение, извлечение, отображение его на экране для редактирования и удаление. Будут другие функции более высокого уровня, такие как печать счетов-фактур, создание упаковочных листов и т. Д., А также эти более низкоуровневые методы.

Больше работы с самого начала, но бесконечно более легко обслуживаемой, расширяемой и многократно используемой.

Не все это нужно делать вручную: взгляните на шаблон проектирования Active Record и такие инструменты, как PHP-AR, которые будут выполнять большинство основных методов получения и установки для вас.

Если это звучит как двойная голландская история, найдите один из многочисленных онлайн-уроков по PHP и ознакомьтесь с записью в вики "Шаблон проектирования активной записи".

Я понимаю, что это скорее предложение для подхода, чем прямой ответ на вопрос редактирования заказа.

G

0 голосов
/ 16 ноября 2010

Я должен написать что-то вроде "это зло, не делай этого" и прочее, но я только рекомендую [настоятельно!] Читать SQL-инъекцию и [чуть меньше силы здесь]фреймворки обсуждали здесь и перейдем к вашему делу.

Если вы установите правильные атрибуты "unique" и "key" в базе данных, может быть достаточно изменить INSERT на REPLACE, еслиуже не заботится о безопасности.(Так что это нормально, если это будет домашнее задание на завтра: P)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...