【问题标题】:Mysql edit users orders they have placedMysql 编辑用户下的订单
【发布时间】:2011-05-06 14:22:49
【问题描述】:

您好,我正在通过一个订购系统工作,我已经完成了下单,并且可以正常进入数据库,但我正在努力思考如何让用户在插入订单后对其进行编辑。

这就是我从页面中获取订单并将其发送到 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());
                }
            }

所以我知道这不是最干净的方法,所以我一直在努力寻找一种干净的方法让他们编辑订单。我知道如何进行“更新”查询,但事实上我已经使用每个循环和数组来插入订单?有人对上面的代码有什么建议可以向用户展示什么吗?

【问题讨论】:

  • 您应该清理要插入的值,而不是将原始帖子数据直接输入 sql。查看mysql_real_escape_string()
  • 注意到了。我本来打算最后做的,只是让功能先行:)

标签: php jquery mysql edit


【解决方案1】:

我使用第三方代码生成项目来创建用于插入/更新记录的数据网格。他们所做的是每次有更新时对数据网格中的每个项目运行更新查询。这确实会导致发生一些不必要的更新。

我认为更简洁的方法是检查旧数据集和新数据集之间的差异,然后仅对更改的项目运行更新。

【讨论】:

    【解决方案2】:

    我应该写一些诸如“这是邪恶的,不要那样做”之类的东西,但我只会建议 [强烈!] 阅读 SQL injection 和 [这里少一点强度] 讨论的框架 here并处理您的情况。

    如果您在数据库中设置正确的“唯一”和“关键”属性,如果您已经不关心安全性,将INSERT 更改为REPLACE 可能就足够了。 (所以如果它是明天的学术作业也没关系:P)

    【讨论】:

      【解决方案3】:

      戴上我的 OO 帽子,您最好的选择是将订单视为对象。

      编写一个类来处理您需要对其执行的所有操作,例如创建新的、清理、验证、保存、检索、将其显示到屏幕上以进行编辑和删除。还会有其他更高级的功能,例如打印发票、生成装箱单等,以及这些更底层的方法。

      开始工作更多,但可维护性、可扩展性和可重用性要无限提高。

      并非所有这些都需要手动完成:查看 Active Record 设计模式和 PHP-AR 等工具,它们将为您完成大部分基本的 getter 和 setter 方法。

      如果这听起来像是双荷兰语,请浏览许多在线 OO PHP 教程之一,并查看“活动记录设计模式”的 wiki 条目。

      我意识到,这更像是对一种方法的建议,而不是对订单编辑问题的直接回答。

      G

      【讨论】:

      • 这是一个建议,但非常感谢!感谢指点
      【解决方案4】:

      根据您使用的框架(如果有的话),只需为订单创建一个视图。您可以在另一个页面上执行此操作,也可以通过 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/

      【讨论】:

        猜你喜欢
        • 2021-03-20
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多