2017-09-18 2 views
0

Je travaille dans OpenCart et j'essaie de créer une liste déroulante dynamique dans mon formulaire. Je ne peux pas l'obtenir à partir de la base de données. Je continue à obtenir cette erreur:Comment remplir <select> dropdown de db avec php

Warning: Illegal string offset 'firstname' in /var/www/html/Acendia-bit-bucket/vK23o003xdkxLp2-09zxkjekzcDt/controller/campaigns/campaign.php on line 507

Vraiment, je veux juste une liste déroulante qui affiche le prenom et nom de tout le monde dans ce tableau.

Modèle:

public function getCustomers() { 


$query = $this->db->query("SELECT customer_id, firstname, lastname FROM " . DB_PREFIX . "customer"); 


return $query->result_array(); 
//return $query->row; 

}

Controller: (fonctions du contrôleur)

protected function getForm() { 

    $data['heading_title'] = $this->language->get('heading_title'); 
    $data['text_form'] = !isset($this->request->get['event_id']) ? $this->language->get('text_add') : $this->language->get('text_edit'); 
    $data['text_add_component'] = $this->language->get('text_add_component'); 
    $data['entry_attending'] = $this->language->get('entry_attending'); 
    $data['entry_attended'] = $this->language->get('entry_attended'); 
    $data['entry_interested'] = $this->language->get('entry_interested'); 

    $data['entry_date'] = $this->language->get('entry_date'); 
    $data['entry_campaign_start_date'] = $this->language->get('entry_campaign_start_date'); 
    $data['entry_campaign_end_date'] = $this->language->get('entry_campaign_end_date'); 
    $data['entry_owner'] = $this->language->get('entry_owner'); 
    $data['entry_goal'] = $this->language->get('entry_goal'); 
    $data['entry_goal_count'] = $this->language->get('entry_goal_count'); 

    $data['text_publish'] = $this->language->get('text_publish'); 
    $data['text_preview'] = $this->language->get('text_preview'); 
    $data['text_cancel'] = $this->language->get('text_cancel'); 
    $data['text_save'] = $this->language->get('text_save'); 
    $data['text_filter_type'] = $this->language->get('text_filter_type'); 
    $data['entry_name'] = $this->language->get('entry_name'); 

    $data['button_publish'] = $this->language->get('button_publish'); 
    $data['button_preview'] = $this->language->get('button_preview'); 
    $data['button_save'] = $this->language->get('button_save'); 
    $data['button_cancel'] = $this->language->get('button_cancel'); 


    if (isset($this->error['warning'])) { 
     $data['error_warning'] = $this->error['warning']; 
    } else { 
     $data['error_warning'] = ''; 
    } 

    if (isset($this->error['campaign_id'])) { 
     $data['error_campaign_id'] = $this->error['campaign_id']; 
    } else { 
     $data['error_campaign_id'] = ''; 
    } 

    if (isset($this->error['campaign_name'])) { 
     $data['error_campaign_name'] = $this->error['campaign_name']; 
    } else { 
     $data['error_campaign_name'] = ''; 
    } 

    if (isset($this->error['campaign_giving_goal'])) { 
     $data['error_campaign_giving_goal'] = $this->error['campaign_giving_goal']; 
    } else { 
     $data['error_campaign_giving_goal'] = ''; 
    } 

    if (isset($this->error['campaign_giving_count_goal'])) { 
     $data['error_campaign_giving_count_goal'] = $this->error['campaign_giving_count_goal']; 
    } else { 
     $data['error_campaign_giving_count_goal'] = ''; 
    } 

    if (isset($this->error['campaign_owner'])) { 
     $data['error_campaign_owner'] = $this->error['campaign_owner']; 
    } else { 
     $data['error_campaign_owner'] = ''; 
    } 



    $url = ''; 

    if (isset($this->request->get['filter_name'])) { 
     $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); 
    } 

    if (isset($this->request->get['sort'])) { 
     $url .= '&sort=' . $this->request->get['sort']; 
    } 

    if (isset($this->request->get['order'])) { 
     $url .= '&order=' . $this->request->get['order']; 
    } 

    if (isset($this->request->get['page'])) { 
     $url .= '&page=' . $this->request->get['page']; 
    } 

    if (!isset($this->request->get['event_id'])) { 
     $data['action'] = $this->url->link('campaigns/campaign/add', 'token=' . $this->session->data['token'] . $url, true); 
    } else { 
     $data['action'] = $this->url->link('campaigns/campaign/edit', 'token=' . $this->session->data['token'] . '&event_id=' . $this->request->get['event_id'] . $url, true); 
    } 



    $getCustomers = $this->model_campaigns_campaign->getCustomers(); 

    foreach ($getCustomers as $customers) { 
     $data['customer_list'][] = array(
      'customer_firstname' => $customers['firstname'] 
     ); 
    } 

    $data['breadcrumbs'] = array(); 

    $data['breadcrumbs'][] = array(
     'text' => $this->language->get('text_home'), 
     'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true) 
    ); 

    $data['breadcrumbs'][] = array(
     'text' => $this->language->get('heading_title'), 
     'href' => $this->url->link('campaigns/campaign', 'token=' . $this->session->data['token'] . $url, true) 
    ); 

    $data['cancel'] = $this->url->link('campaigns/campaign', 'token=' . $this->session->data['token'] . $url, true); 

    $data['token'] = $this->session->data['token']; 

    $this->load->model('localisation/language'); 

    $data['languages'] = $this->model_localisation_language->getLanguages(); 
    $data['header'] = $this->load->controller('common/header'); 
    $data['column_left'] = $this->load->controller('common/column_left'); 
    $data['footer'] = $this->load->controller('common/footer'); 

    $this->response->setOutput($this->load->view('campaigns/campaign_form', $data)); 
} 

Vue:

<div class="col-sm-5 col-sm-push-1 form-group required> 
        <label class="col-sm-2 control-label" for="input-campaign-owner"><?php echo $entry_owner; ?></label> 
       <select name="customer-list" id="customer-list" > 
        <?php 
       foreach ($customer_list as $list){ 
       echo "<option value=''>$list['customer_firstname']</option>"; 
       } 
       ?> 

        </select> 
       </div> 
+2

Vous imprimez 'customer_list' de $ et' $ data [ « de customer_list »] 'Quelle est la variable réelle que vous devriez utiliser. Cela devrait être 'foreach ($ customer_list as $ list) {' et ensuite dans chaque boucle vous devriez l'appeler par $ list ['customer_firstname'] ' – GrumpyCrouton

Répondre

1

Je pense qu'il devrait être $query->rows; dans le modèle et il vous suffit $data['customers'] = $this->model_campaigns_campaign->getCustomers(); dans le contrôleur, puis afficher en vue:

<div class="col-sm-5 col-sm-push-1 form-group required"> 
    <label class="col-sm-2 control-label" for="input-campaign-owner"><?php echo $entry_owner; ?></label> 
    <select name="customer-list" id="customer-list"> 
    <?php foreach ($customers as $customer) { ?> 
     <option value="<?php echo $customer['customer_id']; ?>"><?php echo $customer['firstname'] . ' ' . $customer['lastname']; ?></option> 
    <?php } ?> 
    </select> 
</div> 
0

Je crois que le problème se trouve dans votre citant dans l'écho. En outre, il y a <?php et ?> étiquettes dans votre déclaration d'écho qui ne sont pas nécessaires. Essayez ce qui suit, en prenant acte des modifications apportées à votre déclaration d'écho:

<select name="customer-list" id="customer-list" > 
<?php 
foreach ($customer_list as $list){ 
    echo "<option value=''> 
    $list['customer_firstname'] 
    </option>"; 
} 
?> 

En outre, return $query->row; devrait probablement être return $query->result_array(); dans votre modèle.

+0

Je n'ai pas vu le problème de citation mais vous avez raison, mais c'est en utilisant également la mauvaise variable, je crois. – GrumpyCrouton

+0

Oui, vous avez raison, j'ai fait des corrections. Pour vous soucier d'accéder aux données du tableau '$ data', la balise mvc m'a donné l'impression que le codeigniter est utilisé, auquel cas, après avoir passé' $ data' du contrôleur, '$ customer_list' devrait être disponible dans la vue. – coderodour

+0

Hmm, peut-être, mais cela ne montre nulle part qu'il est passé de cette façon. – GrumpyCrouton