Три связанных SELECTа с данными из MySQL

AndrySib

Новичок
Три связанных SELECTа с данными из MySQL

Три связанных SELECTа с данными из MySQL

Обыскал весь форум - ничего вразумительного не нашел потому что ещё чайник, есть огромное желание разобраться в этом, но мало времени…:( Был на форуме вебскрипт, там закрыли тему, даже не стали обсуждать, мол, все давно разжевано – ищи по темам…
Очень надеюсь, что здесь помогут, просьба громко не смеется, и сильно не пинать… хотя.. смеяться можно.. позитив всегда должен присутствовать :)

Задача такова… выбираю SELECT-ом из списка категорию Автомобили, в следующем SELECT-е выбираю Марку соответственно автомобиля, далее выбираю соответствующую модель. Здесь что-то похожее, чтобы иметь представление, реализованный вариант вот http://www.auto.vl.ru/sales/?search

Вот неполный дамп базы:
(каждая марка находится в отдельной таблице… структура базы тоже в стадии разработки.. так, что принимаются любые предложения как оптимально разместить данные)
PHP:
CREATE TABLE category (
  category_id int(11) NOT NULL auto_increment,
  name text,
  PRIMARY KEY  (category_id)
) TYPE=MyISAM;

INSERT INTO category VALUES (1, 'Автомобили');
INSERT INTO category VALUES (2, 'Мото');
INSERT INTO category VALUES (3, 'Тяж.тех.');

CREATE TABLE mark (
  category_id int(11) NOT NULL,
  mark_id int(11) NOT NULL auto_increment, 
  name text,
  PRIMARY KEY  (mark_id)
) TYPE=MyISAM;

INSERT INTO mark VALUES (1,1, 'Toyota');
INSERT INTO mark VALUES (1,2, 'Nissan');
INSERT INTO mark VALUES (1,3, 'Mitsubishi');
INSERT INTO mark VALUES (2,4, 'Suzuki');
INSERT INTO mark VALUES (2,5, 'Kawasaki');
INSERT INTO mark VALUES (3,6, 'Mitsubishi');

CREATE TABLE toyota (
  toyota_id int(11) NOT NULL auto_increment,
  name text,
  PRIMARY KEY  (toyota_id)
) TYPE=MyISAM;

INSERT INTO toyota VALUES (1, '4Runner');
INSERT INTO toyota VALUES (2, 'Allex');
INSERT INTO toyota VALUES (3, 'Allion');

CREATE TABLE mitsubishi (
  mitsubishi _id int(11) NOT NULL auto_increment,
  name text,
  PRIMARY KEY  (mitsubishi _id)
) TYPE=MyISAM;

INSERT INTO mitsubishi VALUES (1, 'Mirage');
INSERT INTO mitsubishi VALUES (2, 'Galant');
INSERT INTO mitsubishi VALUES (3, 'Legnum');
А вот собственно сам код, но он тупо отображает базу… Нужно сделать так чтобы, выбрав в первом SELECT-е категорию, например автомобили, в следующий SELECT-е загрузились данные из соответствующей таблицы "mark" (марки, в этой таблице перечислены марки для всех категорий, категория марки идентифицируется дополнительным столбцом "category_id").

PHP:
<?
 //Соединение с базой
@mysql_connect( "localhost", " autocatalog", "password") or die("Ошибка: Нет соединения с сервером!"); 
@mysql_select_db("autocatalog") or die("Ошибка: База не выбрана!");
?>

<form action="x" method="post" name="x" id="x">
	<select name="category">
	<option value="select" value="select">Выберите категорию</option>
<?
$table = mysql_query ("SELECT * FROM category");
while ($res = mysql_fetch_array($table))
{
$out_string = $res["name"];
echo "<option value=".$res[number].">".$out_string."";
}
?>
	</select>
<br><br>

	<select name="mark">
	<option class="select" value="select">Выберите марку</option>
<?
// Здесь предполагаю за место "mark" должна быть какая-то переменная, 
// которая выбирается предыдущим селектом… 
// и тем самым выбирает из базы соответствующую выбору таблицу…. как это сделать х.з…
$table = mysql_query ("SELECT * FROM mark");
while ($res = mysql_fetch_array($table))
{
// Здесь, каким-то образом из таблицы должны выбраться только те марки, которые соответствуют 
//предыдущему выбору категории...
$out_string = $res["name"];
echo "<option value=".$res[number].">".$out_string."</option>";
}
?>	
	</select>
	<br><br>
	
	<select name="model">
	<option class="select" value="select">Выберите модель</option>
<?
// Здесь соответственно модель марки выбранной категории… 
$table = mysql_query ("SELECT * FROM toyota");
while ($res = mysql_fetch_array($table))
{
$out_string = $res["name"];
echo "<option value=".$res[number].">".$out_string."</option>";
}
?>	
	</select>
	
</form>
 

Фанат

oncle terrible
Команда форума
1. почитай PHP FAQ: Самые основы. Как работает PHP.
чтобы понять, что ты делаешь всё в корне неправильно.
2. Желательно было бы (но я уверен что ты делать этого не будешь) для практики написать три раздельных скрипта, которые делают последовательный выбор.
3. Почитай топики вот по этому слову: AJAX. только я не уверен, что у тебя получится самостоятельно. но попытка - не пытка.
 

AndrySib

Новичок
Может все-таки есть смысл покопаться в PHP... если я займусь.. AJAXом… то я чувствую что убью кучу времени почему я и обратился сюда!

Всетаки может обойтись 2мя скриптами, которые в принципе одинаковы.

В первом SELECT-е "category" при выборе из списка скрипт№1 должен вывести значения из таблицы, на основе которых, во втором SELECT-е "mark" будет сделан выбор таблицы "mark" и ее выборка.

Второй SELECT "mark", на основе полученных значений, отображает список. При выборе из списка позиции срабатывает скрипт№2, идентичный по принципу первому скрипту, который:
1) выбирает из базы соответствующую таблицу;
2) делает выборку из таблицы, котрая отображается в списке следующего SELECT-а.

Я понимаю, что здесь упущено множество деталей, о которых мне ещё рано говорить, но принцип работы я думаю все-таки донес…
 

Mark&Ameli

Новичок
Ну а мне что-то подсказывает, что зделать так, как http://www.auto.vl.ru/sales/?search буз яваскрипта не получится. Без явы будет перезагружаться страница каждый раз, когда выбираешеь категорию из первого селекта...
 

Alx

Новичок
AndrySib
вот тут есть хороший материал для новичков в AJAX.

Ну и ещё есть пакет HTML_QuickForm для PEAR, в котором есть класс hierselect. Думаю, его можно приспособить под то, что тебе нужно.
 

maxvd

Новичок
Mark&Ameli
как http://www.auto.vl.ru/sales/?search буз яваскрипта не получится
это все понятно можно генерировать явоскрипт
недавно задовался таким вопросом, а если при выборе надо менять форму, можно ли обойтись без перезагрузки страницы?
 

Alx

Новичок
Автор оригинала: maxvd
недавно задовался таким вопросом, а если при выборе надо менять форму, можно ли обойтись без перезагрузки страницы?
AJAX именно этим и занимается. Хотя тут ещё многое зависит от собственной "фантазии".
 

Фанат

oncle terrible
Команда форума
AndrySib
почитай первую ссылочку, ладно?
а потом уже разглагольствуй про пхп и аякс. если ещё останется такое желание.
 

AndrySib

Новичок
АААА!! Крута!! ))
Да… Аякс оказывается мощная вещь!
Короче нашел то, что в принципе мне и надо было, буду разбираться…здесь найдете пример Drop Downs & Form Handling - три селекта. Тут же исходники.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Alx
Ну и ещё есть пакет HTML_QuickForm для PEAR, в котором есть класс hierselect.
Вот только AJAX'а там нету, все данные загружаются сразу и кладутся в JS-массивы.
 

Alx

Новичок
Автор оригинала: Sad Spirit
Вот только AJAX'а там нету, все данные загружаются сразу и кладутся в JS-массивы.
А я и не имел ввиду, что там на AJAX сделано. Я говорил о том что есть AJAX, и ещё есть PEAR::HTML_QuickForm для решения такой задачи.
 

die_hard

Новичок
по идее для того чтобы сделать как на avto.vl не надо АЯГЗ. %-)

Там все данные сразу вставляются в скрипт. все-таки данных не много - так что можно не париться и также вставлять на страничку все данные в javascript переменные .... и взять прям с avto.vl функу которая меняет значение второго селекта. Делов то. :)
 
Сверху