PHP, <select> и выборка из MySQL

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
INFected
мл. сержант
Сообщения: 115
Зарегистрирован: 2007-10-26 0:36:22
Откуда: .UA
Контактная информация:

PHP, <select> и выборка из MySQL

Непрочитанное сообщение INFected » 2009-04-06 16:20:15

Привет уважаемым гуру.

Помогите найти решение для выполнения такой задачи:
Есть некоторое количество книг разбитое на категории и жанры.
Например: категория:"Художественная литература"
жанры категории: роман, детектив, повесть, драма, etc.

Задача(упрощенно):Хочется грамотно сделать фильтр книг на странице.
Остановился на выводе двух select-ов.
То есть изначально при загрузке страницы я заполняю первый "select" нужными optionam-и списка категорий из базы. А дальше нужно чтобы при выборе пользователем како-нить категории следующий селект заполнить списком жанров выбраной категории.
Впал в ступор. Пробовал через GET на основе события onclick в первом селекте(onchange у меня вообще не срабатывает ни в одном браузере), но такое сработало только в Opera. В жава не силен совсем. Чуть могу покодить на пхп.
Реально ли такое сделать. Пните в нужном направлении. Чето порыскал по тырнету и понял что эта проблема существует.
Може кто знает какие-то другие удобные методы реализации такой задачи.
заранее спс всем. )

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение zg » 2009-04-06 16:30:27

INFected писал(а):Чето порыскал по тырнету и понял что эта проблема существует.
гм.. какая проблема?
INFected писал(а):То есть изначально при загрузке страницы я заполняю первый "select" нужными optionam-и списка категорий из базы. А дальше нужно чтобы при выборе пользователем како-нить категории следующий селект заполнить списком жанров выбраной категории.
это делается через http-реквест на яваскрипте.

INFected
мл. сержант
Сообщения: 115
Зарегистрирован: 2007-10-26 0:36:22
Откуда: .UA
Контактная информация:

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение INFected » 2009-04-06 16:38:50

zg писал(а): гм.. какая проблема?.
Проблема с реакцией браузеров на одно и то же событие. (onclick, onchange)
zg писал(а): это делается через http-реквест на яваскрипте.
Получается что нужно подключать AJAX ? :(

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение zg » 2009-04-06 16:41:38

INFected писал(а):Получается что нужно подключать AJAX ?
ну... аякс-шмаякс это только надстройка над http-реквестом. Можно сделать проще - сгенерить массивы и обойтись без реквестов

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение zg » 2009-04-06 17:01:15

Примерно так

Код: Выделить всё

<select id="s1"><option value=""></option></select><br>
<select id="s2"></select>


<script type="text/javascript">
var a = [];
a[0] = 'Книги';
a[1] = 'Журналы';

var d = [];
d[0] = ['Буратина', 'Колобок'];
d[1] = ['Мурзилка', 'Чип'];

// Заполняем категории
for(var i in a) {
	var item = new Option(a[i]);
	item.value = i;
	s1.options[s1.options.length] = item;
}

// Обработка выбора селекта
s1.onchange = function(e) {
	var id = this.options[s1.selectedIndex].value;
	
	// Обнуление списка
	s2.options.length = 0;
	
	if ( id != '' )
	{
		for(var i in d[id])
		{
			var item = new Option(d[id][i]);
			item.value = id;
			s2.options[s2.options.length] = item;
		}
	}
	
}

</script>

INFected
мл. сержант
Сообщения: 115
Зарегистрирован: 2007-10-26 0:36:22
Откуда: .UA
Контактная информация:

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение INFected » 2009-04-06 17:04:31

zg писал(а): ну... аякс-шмаякс это только надстройка над http-реквестом. Можно сделать проще - сгенерить массивы и обойтись без реквестов
Тогда скорее всего попробую почитать в сторону http-реквеста. Когда-то поробовал заморачиваться с ним, но остался горький осадок. Не смог разобаться с кодировками. :( . На выходе получал кракозябры. Спасиб. За ответ.
З.Ы. Посмотрел код. Работает. :) Возможно остановлюсь на этом!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение zg » 2009-04-06 17:09:12

INFected писал(а):Не смог разобаться с кодировками. . На выходе получал кракозябры.
реквест работает только в UTF-8, и неважно в какой кодировке сайт, браузер перекодит.
INFected писал(а):Возможно остановлюсь на этом!
если категорий и книг порядка сотни, то генери массивы, быстрее будет работать, чем с реквестом, да и надёжней :smile:

INFected
мл. сержант
Сообщения: 115
Зарегистрирован: 2007-10-26 0:36:22
Откуда: .UA
Контактная информация:

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение INFected » 2009-04-06 17:13:11

zg писал(а):реквест работает только в UTF-8, и неважно в какой кодировке сайт, браузер перекодит.
Ну вот с этим я и не разобрался. Сдался.)
zg писал(а): если категорий и книг порядка сотни, то генери массивы, быстрее будет работать, чем с реквестом, да и надёжней :smile:
Книг много. Около 20Гб в зипах. Категорий штук 5-7 и жанров в каждой порядка 3-5. А дальше кнопка сабмит отфильтрует все что нужно.
Спасибо за помощь. :good:

INFected
мл. сержант
Сообщения: 115
Зарегистрирован: 2007-10-26 0:36:22
Откуда: .UA
Контактная информация:

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение INFected » 2009-04-06 23:33:23

с массивами все получилсось.
Но интересно все же узнать как получить на выходе кодировку win-1251 используя XMLHttp-Request.?
данные в mysql лежет в кодировке 1251, страница формируется тоже в

Код: Выделить всё

<meta http-equiv="content-type" content="text/html; charset=windows-1251" /> 
При использовании http-request на странице получаю квадратики. :) Как побороть?

Частично проблемка решается при использовании метода overrideMimeType(), (тут нашел)но в этом случае все правильно отображается только в Mozilla и GoogleChrome. В Опера по прежнему квадратики. В ИЕ вообще не работает. В консоли ИЕ нашел сообщение

Код: Выделить всё

Сообщение: Object doesn't support this property or method
Строка: 24
Символ: 1
Код: 0
URI-код: http://10.10.10.10/lib/test.php
Строка 24 это и есть мой xmlHttp.overrideMimeType('text/plain; charset=windows-1251') Значит в ИЕ этот метод вобще не работает :(

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение zg » 2009-04-07 5:26:08

INFected писал(а):Как побороть?
да всё банально просто - формируешь выходной XML в UTF-8. Если данные приходят из базы, то выставляешь кодировку на сединение UTF-8 и никаких проблем.
INFected писал(а):Значит в ИЕ этот метод вобще не работает
та не парься, сформировать XML в UTF-8 не так уж и сложно -)

INFected
мл. сержант
Сообщения: 115
Зарегистрирован: 2007-10-26 0:36:22
Откуда: .UA
Контактная информация:

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение INFected » 2009-04-07 11:49:38

zg писал(а): ..... выставляешь кодировку на сединение UTF-8 и никаких проблем.
При обращении к БД начинать нужно с этого?

Код: Выделить всё

include('dbconf.php');
$dblink=mysql_connect($host,$user,$pass);
mysql_select_db($base,$dblink);
	mysql_query ("set character_set_client='utf-8'");
  	mysql_query ("set character_set_results='utf-8'");
   	mysql_query ("set collation_connection='utf8_general_ci'");
$select = mysql_query("SELECT id, gnrname FROM gnrbook WHERE id='$ctg'");
echo "<select name='gnr' id='gnr'>";
while(list($id, $gnrname) = mysql_fetch_row($select))
				{
				// папытко выкрутиться: $srt=iconv('UTF-8', 'CP1251', $gnrname); 
				echo "echo <option value='$id'>$gnrname</option>";
				}
                echo"</select>";
mysql_close($dblink);

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: PHP, <select> и выборка из MySQL

Непрочитанное сообщение zg » 2009-04-07 17:01:35

INFected писал(а):При обращении к БД начинать нужно с этого?
в UTF-8 надо XML-файл формировать, сайт может и в 1251 быть.

Суть такая:
1. Сайт (1251) посылает http-реквест на xml-файл
2. xml-файл должен быть в utf-8
3. браузер получает ответ в виде XML (UTF-8) и отдаёт его клиенту в нужной кодировке (1251)