Joan M Ответов: 1

Заполните combobox данными базы данных после выбора опции в другом combobox


Всем привет,

Я работал над заполнением вторичного combobox после выбора данных в первичном...

Допустим, я выбираю клиента из первого выпадающего списка.

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


Сейчас это основное мое поле со списком:
<div>
  <div id="elementFormulariEtiqueta">Client:</div>
  <select id="elementFormulari" style="width: 300px; height: 30px" name="cbClient" onchange="onChangeClient(this.value)">
    <option value="--- Select ---">--- Select---</option>
    <option value="My first customer">My First Customer</option>
  </select>
</div>


А это вторичный combobox:
<div>
  <div id="elementFormulariEtiqueta">Projecte:</div>
  <select id="elementFormulari" style="width: 300px; height: 30px" name="cbProjecte" >
    <option value="--- Select ---">--- Select ---</option>
  </select>
</div>


Как вы можете видеть основной combobox имеет событие onChange которое указывает на функцию onChangeClient которая является:

<pre><script>
  function onChangeClient(client)
  {
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function()
    {
      if (this.readyState == 4 && this.status == 200) 
      {
        //document.getElementById("txtHint").innerHTML = this.responseText;  (I've used this to know if the function gets called...)
        document.getElementById("cbProjecte").append(this.responseText); // This is not working for me...
      }
    };
    xmlhttp.open("POST","temps_onChangeClient.php?q="+client,true);
    xmlhttp.send();
  }
</script>


В нижней части моей формы я добавил::
<p>Suggestions: <span id="txtHint"></span></p>

Я использовал это, чтобы иметь возможность увидеть, что такое temps_onChangeClient.php файл возвращается.
Заметьте это, если я добавлю Эхо('вернуть'); и раскомментируйте его document.getElementById("txtHint").innerHTML = this.responseText; Я могу видеть результат после этого "Предлагаемые варианты:".

Тот самый temps_onChangeClient.php файл получает параметр q, выполняет поиск в базе данных и возвращает результирующую строку запроса базы данных, но, чтобы сохранить thingseasier, я изменил его на:
  $arr[0] = '0';
  $arr[0] = '1';
  $arr[0] = '2';
  $arr[0] = '3';
  $arr[0] = '4';
  $arr[0] = '5';
  $arr[0] = '6';
echo($arr);


С моими текущими данными, когда я выбираю своего первого клиента, я вижу результат "предложения: массив", который говорит мне, что я получаю массив (имена проектов, принадлежащих этому клиенту). Я получаю также массив, если использую замену, чтобы облегчить вещи, которые я показывал раньше.

Теперь мне нужно добавить эти результаты во вторичный combobox, но я не знаю, как это сделать...

В поисках информации об этом я вижу действительно странные JSON-скрипты, которые я не понимаю.

Не могли бы вы помочь мне в этом последнем шаге?

Большое спасибо!



Старый вопрос:
I've never done that before, and I'm wayyyy lost.

I have a MySQL database and I'm making a small web page that should help me keep track of my working hours...

I'm doing that with PHP and MySQL.

My intention is to select a project (combobox 2) after selecting a customer (combobox 1).

I've seen some examples using Ajax.

But, before starting with something new... I've read in the Wikipedia smartphones can't cope with Ajax... (<a href="https://en.wikipedia.org/wiki/Ajax_(programming)">See the first one in Ajax drawbacks</a>[<a href="https://en.wikipedia.org/wiki/Ajax_(programming)" target="_blank" title="New Window">^</a>]).

I plan to start and stop my tasks from my phone so this would be needed...

How would you do it?  given I'm working in PHP and MySQL... which would be the best option to be able to dynamically fill one combobox after selecting one option in another one?

As always, thank you very much!

:thumbsup:


Что я уже пробовал:

Поиск примеров, чтение документации, пробы...

Richard Deeming

Википедия ошибается - все современные смартфоны поддерживают Javascript и AJAX. Большинство из них поддержка расширенных функций тоже[^].

Единственное удержание-это Опера Мини[^], который вообще не поддерживает Javascript.

Joan M

Я думал, что это тот самый случай... но у меня достаточно проблем, зная, как программировать роботов... :D:D:D и предпочел спросить здесь... а что вы думаете о лучшем способе сделать это?

Richard Deeming

AJAX - возможно использование API выборки[^] (поддержка браузеров[^], полифилл[^]) - был бы мой предпочтительный вариант.

В противном случае вам нужно будет поместить списки в <form>, используйте Javascript для отправки формы при изменении первого списка и используйте PHP для заполнения второго списка на основе опубликованных данных.

Joan M

Спасибо, Ричард, я посмотрю на эти ссылки. ;)

1 Ответов

Рейтинг:
2

Joan M

В конце концов, это было легко...

Я заменил идентификатор в функции onchange на правильный...

А затем я воссоздал полный combobox в файле PHP temps_onChangeClient.php-да.

В конце Я заменил append на innerHTML, как в рабочем примере.

Вот оно что!