How insert array to database in open cart?

拥有回忆 提交于 2019-12-14 03:24:42

问题


I build dynamic input by add row table, and user input by autocomplete, then I store PRODUCT_ID in <input name="idp" value="">

E.g User input twice times (HP & Computer)

Name Product | PRODUCT_ID

  1. HP = 2945

  2. COMPUTER = 8654

Should be in array is = (2945,8654)

This is for 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;
    }
}

This is for Model :

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];
}

}

This is for view :

    <?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; ?>

When I try insert query to my database, value only 1 number.

Then I try Echo for make sure variable is correct but it's wrong, the result is the last user input (Computer, in array(8,6,5,4))? it's should be (2945,8654) not (8,6,5,4)?

Can some one help me for fix this?? I already try fix this problem for 1 week still no hope :(


回答1:


If you want to insert array variables in database, First you need encode them and then insert them .

Ex. $abc = array(3,45,6,78,89) ;

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



来源:https://stackoverflow.com/questions/35082164/how-insert-array-to-database-in-open-cart

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!