【问题标题】:How insert array to database in open cart?如何在opencart中将数组插入数据库?
【发布时间】:2016-01-29 10:27:14
【问题描述】:

我通过添加行表构建动态输入,通过自动完成构建用户输入,然后我将 PRODUCT_ID 存储在 <input name="idp" value="">

例如用户输入两次(惠普和电脑)

产品名称 | PRODUCT_ID

  1. 生命值 = 2945

  2. 计算机 = 8654

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

这是给控制器的:

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 周仍然没有希望:(

【问题讨论】:

  • 你想插入数组到数据库吗?

标签: arrays foreach insert opencart


【解决方案1】:

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

例如。 $abc = 数组(3,45,6,78,89);

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

【讨论】:

  • 如果输入是动态的,我如何编码,我尝试存储但结果只有 1 个数字(应该是 4),我在存储输入中是否有错误?
  • 我试试 $temp = count($this->request->get['idp']); $idp = $this->request->get['idp']; for($i=0; $i $idp[$i], ); } 还是和以前一样的结果
猜你喜欢
  • 2016-05-04
  • 2019-12-01
  • 2011-04-13
  • 2020-05-01
  • 1970-01-01
  • 2016-11-29
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多