[英]How to populate <select> dropdown from db with php
我在OpenCart中工作,正在嘗試在表單中創建動態下拉菜單。 我無法從數據庫填充它。 我不斷收到此錯誤:
警告:第507行上的/var/www/html/Acendia-bit-bucket/vK23o003xdkxLp2-09zxkjekzcDt/controller/campaigns/campaign.php中的非法字符串偏移量“ firstname”
真的,我只需要一個下拉列表,顯示該表中每個人的名字和姓氏。
public function getCustomers() {
$query = $this->db->query("SELECT customer_id, firstname, lastname FROM " . DB_PREFIX . "customer");
return $query->result_array();
//return $query->row;
}
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));
}
<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>
我認為應該是$query->rows;
在模型中,您只需要$data['customers'] = $this->model_campaigns_campaign->getCustomers();
在控制器中,然后在視圖中顯示它:
<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>
我相信問題在於您在回聲中的引用。 另外,您的echo語句中還有<?php
和?>
標記,它們不是必需的。 請嘗試以下操作,注意對echo語句所做的修改:
<select name="customer-list" id="customer-list" >
<?php
foreach ($customer_list as $list){
echo "<option value=''>
$list['customer_firstname']
</option>";
}
?>
同樣, return $query->row;
應該應該return $query->result_array();
在您的模型中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.