Страница 1 из 1

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

Добавлено: 2009-04-06 16:20:15
INFected
Привет уважаемым гуру.

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

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

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

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

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

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

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

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

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

Добавлено: 2009-04-06 17:01:15
zg
Примерно так

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

<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>

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

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

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

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

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

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

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

Добавлено: 2009-04-06 23:33:23
INFected
с массивами все получилсось.
Но интересно все же узнать как получить на выходе кодировку 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') Значит в ИЕ этот метод вобще не работает :(

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

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

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

Добавлено: 2009-04-07 11:49:38
INFected
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);

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

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

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