#php #text #drop-down-menu #field #populate
#php #текст #выпадающее меню #поле #заполнить
Вопрос:
ВСЕ ОТРЕДАКТИРОВАНО
Привет,
Как я могу автоматически заполнить данные из базы данных с помощью выбранного выпадающего списка? и мой результат выпадающего списка также уже отображается, код выглядит следующим образом:
<?php
echo '<tr>
<td>'.$customer_data.'</td>
<td><select name="customer_id" id="customer_id" onchange="getCustomer();">';
foreach ($customers as $customer) {
if ($customer['customer_id'] == $customer_id) {
echo '<option value="'.$customer['customer_id'].'" selected="selected">'.$customer['name'].'</option>';
} else {
echo '<option value="'.$customer['customer_id'].'">'.$customer['name'].'</option>';
}
}
echo '</select>
</td>
</tr>';
?>
имеет код представления html в виде
<select name="customer_id" id="customer_id" onchange="getCustomer();">
<option value="8">admin</option>
<option value="6">customer1</option>
<option value="7" selected="selected">FREE</option>
</select>
теперь, если выбрано одно из выпадающих меню, я хочу другое, например <?php echo $firstname; ?>, <?php echo
$lastname; ?>
появляются в
<tr>
<td><div id="show"></div></td>
</tr>
на основе выбранного идентификатора / имени клиента
для этого я пытаюсь использовать вызов json следующим образом:
<script type="text/javascript"><!--
function getCustomer() {
$('#show input').remove();
$.ajax({
url: 'index.php?p=customer/customersamp;customer_id=' $('#customer_id').attr('value'),
dataType: 'json',
success: function(data) {
for (i = 0; i < data.length; i ) {
$('#show').append('<input type="text" name="customer_id" value="' data[i]['customer_id'] '" /><input type="text" name="firstname" value="' data[i]['firstname'] '" />');
}
}
});
}
getCustomer();
//--></script>
php-вызов json, размещенный в customer.php с индексом url.php?p=страница / клиент)
public function customers() {
$this->load->model('account/customer');
if (isset($this->request->get['customer_id'])) {
$customer_id = $this->request->get['customer_id'];
} else {
$customer_id = 0;
}
$customer_data = array();
$results = $this->account_customer->getCustomer($customer_id);
foreach ($results as $result) {
$customer_data[] = array(
'customer_id' => $result['customer_id'],
'name' => $result['name'],
'firstname' => $result['firstname'],
'lastname' => $result['lastname']
);
}
$this->load->library('json');
$this->response->setOutput(Json::encode($customer_data));
}
и БД
public function getCustomer($customer_id) {
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "customer WHERE customer_id = '" . (int)$customer_id . "'");
return $query->row;
}
но я получаю неправильный результат следующим образом
есть ли кто-нибудь, пожалуйста, как решить это лучше? заранее спасибо
Ответ №1:
Кое-что о вашем стиле PHP-кодирования: для блока кода PHP не используйте новые php-теги для каждой строки. Кроме того, если вам нужен HTML-вывод из PHP, вы можете использовать echo-метод для этого. Итак, ваш код выглядит следующим образом:
<?php
echo '<tr>
<td>'.$customer.'</td>
<td><select name="customer_id">';
foreach ($customers as $customer) {
if ($customer['customer_id'] == $customer_id) {
echo '<option value="'.$customer['customer_id'].'" selected="selected">'.$customer['name'].'</option>';
} else {
echo '<option value="'.$customer['customer_id'].'">'.$customer['name'].'</option>';
}
}
echo '</select>
</td>
</tr>';
?>
Проблема в том, что каждый раз, когда PHP-интерпретатор находит открывающий PHP-тег, он начинает интерпретировать его код, и когда он находит закрывающий тег, он прекращает это делать. Итак, в вашем коде интерпретатор запускается и останавливается постоянно. Это не очень высокая производительность.
Я полагаю, вы хотите установить значение ваших текстовых полей? Это действительно не то, что делает PHP. Это больше похоже на JavaScript, потому что на самом деле это происходит в браузере, а не на сервере.
Комментарии:
1. спасибо за предложение, очень ценю его, да, я хочу автоматически заполнить текстовые поля (имя, фамилия), выбрав поле со списком, загрузка данных из базы данных, я знаю, как загружать данные, и вы правы, кажется, для этого нужен javascript / ajax / jquery, но не могли бы вы, пожалуйста, сообщить мне, как это исправить, пожалуйста?
2. Вы имеете в виду, как установить значение в текстовом поле в зависимости от того, какой параметр был выбран в вашем выпадающем списке?
3. Да, это верно, я полностью отредактировал свой предыдущий код, пожалуйста, взгляните, я надеюсь, что этого достаточно, чтобы описать то, что я хотел, и, пожалуйста, дайте мне знать, что не так, или есть лучшее решение? Спасибо
Ответ №2:
Вместо этого:
success: function(data) {
for (i = 0; i < data.length; i ) {
$('#show').append('<input type="text" name="customer_id" value="' data[i]['customer_id'] '" /><input type="text" name="firstname" value="' data[i]['firstname'] '" />');
}
}
в вашем вызове JS AJAX сделайте это:
success: function(data) {
$('#show').append('<input type="text" name="customer_id" value="' data['customer_id'] '" /><input type="text" name="firstname" value="' data['firstname'] '" />');
}
поскольку ваша функция PHP возвращает ТОЛЬКО ОДИН объект. Если вы затем выполняете цикл по свойству objects, вы действительно выполняете цикл по одному символу значения свойства…