Привет, я работаю через систему заказов, у меня есть сделанный заказ, и он очень хорошо входит в базу данных, но я изо всех сил пытаюсь подумать, как позволить пользователю отредактировать заказ после его вставки.
Вот как я беру заказ со страницы и отправляю ее в скрипт вставки 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()); } }
Поэтому я знаю, что это не самый чистый способ сделать это, поэтому поэтому я изо всех сил пытаюсь найти чистый способ позволить им отредактировать заказ. Я знаю, как делать запросы «Обновить», но тот факт, что я использовал для каждого цикла и массивов, чтобы вставить заказ? У кого-нибудь есть какой-либо совет из приведенного выше кода о том, что представить пользователю?
В зависимости от используемой структуры (если она вообще есть) просто создайте представление для заказа. Вы можете сделать это на другой странице или загрузить форму через 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 здесь:
Я использую сторонний проект генерации кода, который создает сетку данных, которая используется для вставки / обновления записей. То, что они делают, запускает запрос обновления для каждого элемента в сетке данных каждый раз, когда есть обновление. Это приводит к некоторым ненужным обновлениям.
Я считаю, что более чистым методом было бы проверить разницу между старым набором данных и новым набором данных, а затем запустить обновление только для тех элементов, которые были изменены.
Я должен написать что-то вроде «это зло, не делай этого» и прочее, но я только предлагаю [сильно!] Читать на SQL-инъекциях и [немного меньше силы здесь] рамки, обсуждаемые здесь, и перейти к вашему делу.
Если вы установите правильные «уникальные» и «ключевые» атрибуты в базе данных, может быть достаточно изменить INSERT
на REPLACE
если вы уже не заботитесь о безопасности. (Так что это нормально, если это академическая домашняя работа для tommorow: P)
Надевая мою шляпу OO, лучше всего здесь обрабатывать заказ как объект.
Напишите класс, который обрабатывает все, что вам нужно для этого, например, создание нового, дезинфекция, проверка, сохранение, извлечение, отображение его на экране для редактирования и удаления. Будут также другие функции более высокого уровня, такие как печать счетов-фактур, создание упаковочных листов и т. Д., А также эти более низкоуровневые методы.
Больше работы для начала, но бесконечно более удобной, расширяемой и многоразовой.
Не все это нужно делать вручную: взгляните на шаблон разработки Active Record и такие инструменты, как PHP-AR, которые будут использовать большинство базовых методов getter и setter для вас.
Если это звучит как двустворчатый, просмотрите одну из многочисленных обучающих программ OO PHP в Интернете и посмотрите на вики-запись для «активной схемы создания записей».
Я понимаю, это скорее предложение для подхода, чем прямой ответ на вопрос редактирования заказа.
г