如何在打开购物车中将数组插入数据库?

时间:2016-01-29 10:27:15

标签: arrays foreach insert opencart

我通过添加行表和自动填充的用户输入来构建动态输入,然后将{strong> PRODUCT_ID 存储在<input name="idp" value="">

E.g 用户输入两次(HP&amp; Computer)

名称产品| PRODUCT_ID

  1. HP = 2945

  2. COMPUTER = 8654

  3. 应该在数组中=(2945,8654)

    这适用于Controller:

    class ControllerItemItem extends Controller { //Controller/Item/Item.php
    private $error = array(); 
    
    public function index() {
        $this->language->load('item/item');
    
        $this->document->setTitle($this->language->get('heading_title')); 
    
        $this->load->model('item/item');
    
        $this->getList();
    }
    
    protected function getList(){
    
        if (isset($this->request->get['head_text_field'])){
            $head_text_field = $this->request->get['head_text_field'];
        } else {
            $head_text_field = null;
        }
    
        if (isset($this->request->get['title_text_field'])){
            $title_text_field = $this->request->get['title_text_field'];
        } else {
            $title_text_field = null;
        }
    
        if (isset($this->request->get['max'])){
            $max = $this->request->get['max'];
        } else {
            $max = null;
        }
    
        if(isset($this->request->get['idp'])){ 
            $product = $this->request->get['idp'];
            $product2 = array();
            foreach($product as $p)
            {
                $product2[] = $p;
            }
    
        }else {
            $product = null;
        }
    
    
        // BREADCRUMBS //
        $this->data['breadcrumbs'] = array();
    
        $this->data['breadcrumbs'][] = array(
            'text'      => $this->language->get('text_home'),
            'href'      => $this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL'),
            'separator' => false
        );
    
        $this->data['breadcrumbs'][] = array(
            'text'      => $this->language->get('text_module'),
            'href'      => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'),
            'separator' => ' :: '
        );
    
        $this->data['breadcrumbs'][] = array(
            'text'      => $this->language->get('heading_title'),
            'href'      => $this->url->link('module/item', 'token=' . $this->session->data['token'], 'SSL'),
            'separator' => ' :: '
        );
        // END //
    
        // Call Language //
        $this->data['heading_title'] = $this->language->get('heading_title');
        $this->data['entry_head'] = $this->language->get('entry_head');
        $this->data['entry_title'] = $this->language->get('entry_title');
        $this->data['entry_product'] = $this->language->get('entry_product');
        $this->data['entry_max_item'] = $this->language->get('entry_max_item');
        $this->data['button_save'] = $this->language->get('button_save');
        $this->data['button_cancel'] = $this->language->get('button_cancel');
        // END //
    
        $this->data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');
        $this->data['action'] = $this->url->link('item/item/insert', 'token=' . $this->session->data['token'], 'SSL');
        $this->data['token'] = $this->session->data['token'];
    
    
        $data   =   array(
            'head_text_field'   =>  $head_text_field,
            'title_text_field'  =>  $title_text_field,
            'max'               =>  $max
        );
    
        $this->template = 'item/item.tpl';
        $this->children = array(
            'common/header',
            'common/footer'
        );
    
        $this->response->setOutput($this->render());
    
    }
    
    public function insert()
    {
    
        $this->language->load('item/item');
    
        $this->document->setTitle($this->language->get('heading_title')); 
    
        $this->load->model('item/item');
    
        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
            //$this->model_item_item->insert_head($this->request->post);
            $this->model_item_item->insert_detail($this->request->post);
    
            //$this->session->data['success'] = $this->language->get('text_success');
            //$this->redirect($this->url->link('item/item', 'token=' . $this->session->data['token'], 'SSL'));
        }
    }
    
    protected function validateForm() {
        if (!$this->user->hasPermission('modify', 'item/item')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }
    
        if ((utf8_strlen($this->request->post['head_text_field']) < 1) || (utf8_strlen($this->request->post['head_text_field']) > 64)) {
            $this->error['head'] = $this->language->get('error_head');
        }
    
        if (!$this->request->post['title_text_field']) {
            $this->error['title'] = $this->language->get('error_title');
        }
    
        if (!$this->error) {
            return true;
        } else {
            return false;
        }
    }
    

    这适用于型号:

    class ModelItemItem extends Model { 
    public function insert_head($data)
    {
        $this->db->query("INSERT INTO " . DB_PREFIX . "show_product SET head_text = '" . $this->db->escape($data['head_text_field']) . "', title_text = '" . $this->db->escape($data['title_text_field']) . "', max_item = '" . $this->db->escape($data['max']) . "'");
    }
    
    public function insert_detail($product2)
    {
        foreach($product2 as $detail)
        {
            //$this->db->query("INSERT INTO " . DB_PREFIX . "show_product_detail SET product_id = '". $this->db->escape($detail['product']) . "'");
        }
        echo $detail[0];
    }
    

    }

    这是为了查看:

        <?php echo $header; ?>
    <div id="content">
      <div class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
        <?php } ?>
      </div>
      <?php if ($error_warning) { ?>
      <div class="warning"><?php echo $error_warning; ?></div>
      <?php } ?>
      <?php if ($success) { ?>
      <div class="success"><?php echo $success; ?></div>
      <?php } ?>
      <div class="box">
        <div class="heading">
          <h1><img src="view/image/product.png" alt="" /> <?php echo $heading_title; ?></h1>
          <div class="buttons"><a onclick="$('#form').submit();" class="button"><?php echo $button_save; ?></a><a href="<?php echo $cancel; ?>" class="button"><?php echo $button_cancel; ?></a></div>
        </div>
        <div class="content">
          <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
            <table class="form">
            <tr>
                <td><span class="required">*</span> <?php echo $entry_head; ?></td>
                <td><input type="text" name="head_text_field" value="" placeholder="Input Head Text" size="40"/>
                    <?php if ($error_head) { ?>
                        <span class="error"><?php echo $error_head; ?></span>
                    <?php } ?>
                </td>
            </tr>
            <tr>
                <td><span class="required">*</span> <?php echo $entry_title; ?></td>
                <td><textarea name="title_text_field" placeholder="Input Title Text" style="width:230px;"/></textarea>
                    <?php if ($error_title) { ?>
                        <span class="error"><?php echo $error_title; ?></span>
                    <?php } ?>
                </td>
            </tr>
            <tr>
                <td><?php echo $entry_max_item; ?></td>
                <td>
                    <select name="max" id="maxitem">
                    <?php
                    for($i=1; $i<=6; $i++)
                    {
                        if($i == 1)
                            echo "<option selected='selected' value=".$i.">".$i."</option>";
                        else
                            echo "<option value=".$i.">".$i."</option>";
                    }
                    ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td><?php echo $entry_product; ?></td>
                <td><input type="text" id="product" name="product" value="" placeholder="Input Product" size="40"/></td>
                <td><input type="hidden" id="idp" name="idp" value="" /></td>
            </tr>
            <tr>
                <td></td>
                <td>
                <table>
                    <tr>
                        <td><input type="button" id="ADD" value="Add Item"></td>
                        <td><input type="reset" id="RESET" value="Reset"></td>
                    </tr>
                </table>
                </td>
            </tr>
            <tr>
    
            </tr>
            </table>
    
            <table border="1" id="tblname" cellpadding="5" cellspacing="5">
                <thead>
                <tr>
                    <td>
                        Total Item
                    </td>
                    <td>
                        Id Item
                    </td>
                    <td>
                        Name Item
                    </td>
                    <td>
                        DELETE
                    </td>
                <tr>
                </thead>
                <tbody align="center">
                </tbody>
            </table>
          </form>
        </div>
      </div>
    </div>
    <script type="text/javascript"><!--
    $('input[name=\'product\']').autocomplete({
        delay: 100,
        source: function(request, response) {
            $.ajax({
                url: 'index.php?route=catalog/product/autocomplete&token=<?php echo $token; ?>&filter_name=' +  encodeURIComponent(request.term),
                dataType: 'json',
                success: function(json) {       
                    response($.map(json, function(item) {
                        return {
                            label: item.name,
                            value: item.product_id
                        }
                    }));
                }
            });
        }, 
        select: function(event, ui) {
            $('input[name=\'product\']').val(ui.item.label);
            $('input[name=\'idp\']').val(ui.item.value);
            return false;
        },
    
        focus: function(event, ui) {
            return false;
        }
    });
    
    //--></script>
    <Script type="text/javascript">
    $(document).ready(function(){
        var item = 1;
        var isAllowed   = 3;
        var isSet       = 0;
        $('#ADD').click(function(){
            var maxitem = parseInt($("#maxitem").val(), 10); //from max item in html
            var iCount = 0;
            if($('#product').val()){  // check input product
                if( item <= maxitem )
                {
                    iCount = $('#tblname tbody tr').length + 1;
                    szTr = "<tr><td>";
                    szTr = szTr + iCount + "</td>";
                    szTr = szTr +   "<td>" +$('#idp').val() +"</td>";
                    szTr = szTr +   "<td>" +$('#product').val() +"</td>";
                    szTr = szTr +   "<td><input type='button' class='DEL' value='DELETE'></td>";
                    szTr = szTr +   "</tr>";                     
                    $('#tblname tbody').append(szTr);
                    item +=1;
                    isSet = 1;
                    restFormOpts();
                }
                else
                {
                    alert ("Max Limit !!!");
                }
            }else{alert('Enter Product !!! ');}
        });
    
        // for delete row
        $('body').on('click','#RESET', function() {
            item        = 1;
            isAllowed   = 3;
            isSet       = 0;
            $("#maxitem").attr("disabled",false);
            $('.DEL').parents('tr').remove();
        });
    
        $('body').on('click', 'input.DEL', function() {
            $(this).parents('tr').remove();  
            item -= 1;
        });
    
        function restFormOpts()
        {
            if(isSet === isAllowed) {
                $("#ADD").attr("disabled",true);
                $("#maxitem").attr("disabled",false);
            }
            else {
                $("#ADD").attr("disabled",false);
                $("#maxitem").attr("disabled",true);
            }
        }
    });
    </script>
    <?php echo $footer; ?>
    

    当我尝试向我的数据库插入查询时,只值1个数字。

    然后我尝试Echo以确保变量是正确的但是它错了,结果是最后一个用户输入(计算机,数组(8,6,5,4))?它应该是(2945,8654)不是(8,6,5,4)?

    有人可以帮我解决这个问题吗?我已经尝试解决这个问题1周仍然没有希望:(

1 个答案:

答案 0 :(得分:0)

如果要在array variables中插入database,首先需要对其进行编码,然后插入它们。

实施例。 $ abc = array(3,45,6,78,89);

查询:"INSERT INTO " . DB_PREFIX . "show_product_detail SET product_id = '". $this->db->escape(json_encode($abc)) . "'