Автозаполнение на основе выбранного выпадающего списка, нужна помощь - PullRequest
1 голос
/ 04 мая 2011

Как я могу автоматически заполнять данные из базы данных выбранным выпадающим списком? и мой результат выпадающего списка уже появляется, код следующий:

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

и результат выпадающего списка указан как

  • админ
  • customer1
  • FREE

загружено из следующих дБ

INSERT INTO `my_customer` (`customer_id`, `name`, `firstname`, `lastname`) VALUES
(8, 'admin', '', ''),
(6, 'customer1', 'ok', ''),
(7, 'FREE', 'marj', 'om');

поэтому, когда выбрано выпадающее меню, я хочу, чтобы все данные были ниже:

<tr>
<td><?php echo $firstname; ?></td>
<td><?php echo $lastname; ?></td>
</tr>

также автоматически заполняется, кажется, нужен javascript / ajax / jquery, чтобы исправить это, я задавался вопросом, может ли кто-нибудь мне помочь, и спасибо заранее


Addtion JSON CALL

У меня уже есть вызов json: (допустим, это размещено на customer.php с URL index.php? p = page / customer )

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 Ответ

0 голосов
/ 04 мая 2011

Предположим, вы используете jQuery. Вы прослушаете событие select change и затем вызовете ajax для функции PHP, которая вернет данные.Затем данные будут переданы в соответствующие места.Я советую установить атрибуты id для следующих тегов: <select>, <td> для имени, <td> для фамилии, например:

<select name="customer_id" id="customer_id>...</select>

<td id="firstname"> echo firstname </td>
<td id="lastname"> echo lastname </td>

Тогда код jquery:

<script type="text/javascript">//<!--
$(document).ready(function(){
    $('select#customer_id').change(function(){
        $.post(
            "http://www.domain.com/my_php_script.php",
            {customer_id: $(this).val()},
            function(data){
                $('td#firstname').html(data.firstname);
                $('td#lastname').html(data.lastname);
            }
        );
    });
});
//--></script>

Предположим, что ваш my_php_script.php извлекает данные из базы данных по заданному customer_id в $_POST['customer_id'] и возвращает объект JSON, такой как echo json_encode(array('firstname' => FIRSTNAME_FROM_QUERY, 'lastname' => LASTNAME_FROM_QUERY));

ADDITION : есть два варианта решенияэто - в JS вместо

$.post()

Вы должны использовать

$.get(...)

ИЛИ в своем PHP-скрипте вместо

$this->request->get['customer_id']

Вы должны использовать

$this->request->post['customer_id']

в любом месте ... Это должно сделать это ... Например:

<script type="text/javascript">//<!--
$(document).ready(function(){
    $('select#customer_id').change(function(){
        $.get(
            "http://www.domain.com/my_php_script.php",
            {customer_id: $(this).val()},
            function(data){
                $('td#firstname').html(data.firstname);
                $('td#lastname').html(data.lastname);
            }
        );
    });
});
//--></script>
...