2016-01-29 4 views
-1

Я создаю динамический вход с помощью таблицы добавить строки и ввод данных пользователем с помощью автозаполнения, а затем хранить PRODUCT_ID в <input name="idp" value="">Как вставить массив в базу данных в открытой корзине?

например Пользовательский ввод дважды раз (HP & Computer)

Наименование продукта | PRODUCT_ID

  1. HP = 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 недели до сих пор нет надежды :(

+0

вы хотите вставить массив в базу данных –

ответ

0

Если вы хотите вставить array variables в database, Прежде всего, необходимо кодировать их, а затем вставить их.

Ex. $ ABC = массив (3, 45,6,78,89);

запрос: "INSERT INTO " . DB_PREFIX . "show_product_detail SET product_id = '". $this->db->escape(json_encode($abc)) . "'

+0

Как кодировать, если входной динамический, я стараюсь хранить, но это результат только 1 номер (должен be 4), я ошибся в входе в хранилище? – Vilthering

+0

i try $ temp = count ($ this-> request-> get ['idp']); \t \t \t $ idp = $ this-> request-> get ['idp']; \t \t \t для ($ I = 0; $ г <$ темп; $ я ++) \t \t \t { \t \t \t \t $ product2 = массив ( \t \t \t \t \t 'IDP' => $ IDP [$ i], \t \t \t \t); \t \t \t} еще такой же результат, как раньше – Vilthering

Смежные вопросы