автоматическое заполнение данных выпадающим списком

#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, вы действительно выполняете цикл по одному символу значения свойства…