Консультация № 50929
02.08.2006, 18:28
0.00 руб.
0 6 5
Есть страничка, в которой находится куча (большая) форм. Формы выпадающих меню берут данные из БД mysql.
1. Как можно связать между собой формы "ГОСУДАРСТВО" и "ГОРОД" так, чтобы при выборе определенного государства в форму "ГОРОД" выводились только те города, которые соответствуют этому государству.
2. При нажатии Кнопки "ОТПРАВИТЬ" все эти данные передаются в отдельную таблицу БД с соответствующими полями.
3. Каким образом связывается определенное поле формы (например Год выпуска) с таблицей auto_year. Где именно это указывается?
4. Есть ли такая возможность, как "мультиформа", т. е. все данные содержатся в одной форме (а не каждый раз писать <form name="form2" method="post" action="">) Или так делать нельзя.

БУДУ РАД ВСЕМ ОТВЕТАМ, ОСОБЕННО ТАКИМ, КОТОРЫЕ РАССЧИТАНЫ НА ЧАЙНИКОВ... ПОМОГИТЕ ПОЖАЛУЙСТА...

Заранее спасибо!

Приложение:
<body><table width="780" border="0" align="center" cellpadding="1" cellspacing="1"> <tr> <td width="1082" valign="top"><table width="377" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="32" bgcolor="#CCCCCC"><img src="images/arrow1.gif" width="32" height="32"></td> </tr> <tr> <td align="center" valign="top"><table width="270" height="10" border="0" cellpadding="0" cellspacing="0"> <tr align="left" valign="top"> <td width="120" height="10" >Государство</td> <td width="150" height="10" > <form name="form1" method="post" action=""> <select name="select" style="WIDTH: 160px" > <option value="-1" selected>Выбрать</option> <option value="0">Значение 1</option> <option value="1">Значение 2</option> <option value="2">Значение 3</option> </select> </form></td> </tr> <tr align="left" valign="top"> <td width="120" height="10">Город</td> <td width="150" height="10"> <form name="form2" method="post" action=""> <select name="select2" style="WIDTH: 160px" > <option value="-1" selected>Выбрать</option> <option value="0">Значение 1</option> <option value="1">Значение 2</option> <option value="2">Значение 3</option> </select> </form></td> <tr align="left" valign="top"> <td width="120" height="10">Кондиционер</td> <td width="150" height="10"> <form name="form15" method="post" action=""> <p align="center"> <label> <input type="radio" name="RadioGroup1" value="yes"> Есть </label> <label> <input type="radio" name="RadioGroup1" value="no"> Нет</label> </form></td> </tr> <tr align="left" valign="top"> <td width="120" height="10">Воз-ть обмена</td> <td width="150" height="10"> <form name="form16" method="post" action=""> <div align="center"> <input type="checkbox" name="checkbox" value="checkbox"> </div> </form></td> </tr> <tr align="left" valign="top"> <td width="120" height="10">Описание</td> <td width="150" height="10" align="center"> <form name="form17" method="post" action=""> <textarea name="textarea" cols="15"></textarea> </form></td> </tr> <tr align="left" valign="top"> <td width="120" height="10">Добавки</td> <td width="150" height="10" align="center"> <form name="form18" method="post" action=""> <textarea name="textarea2" cols="15"></textarea> </form></td> </tr> </table></td> </tr> </table></td> <td width="415" valign="top"><table width="377" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="32" bgcolor="#CCCCCC"><img src="images/arrow1.gif" width="32" height="32"></td> </tr> <tr> <td><form name="form19" method="post" action=""> <input type="submit" name="Submit" value="Submit"> </form></td> </tr> </table></td> </tr></table>

Обсуждение

Неизвестный
02.08.2006, 18:55
общий
это ответ
Здравствуйте, Сычев Роман!

1. Если стран и городов очень много - лучшим выходом будет использование технологии AJAX (или просто асинхронного JavaScript, без XML). Поищи в интернете - ссылок по этой теме (с примерами) в последнее время достаточно. Получив данные с сервера, нужно в innerHTML обрамляющего элемента вывести <select> со всеми полученными <option> (на JavaScript, в цикле)
2. Это не вопрос :-)
3. Все зависит от того, что и как ты хочешь записывать в БД. Почитай документацию с примерами по командам INSERT INTO, UPDATE, SELECT, WHERE (последнее - не команда). Тщательно продумай структуру таблиц.
4. Так и делают. Когда много форм - легко запутаться. Можно в начале страницы (после <body>) написать
<form method="post" action="">
а перед </body>, соответственно </form> - и всё, можно жить спокойно.
Неизвестный
02.08.2006, 18:57
общий
это ответ
Здравствуйте, Сычев Роман!
4. Если формы одинаковые, то можно писать <input name="name[]" , тоесть передавать массивы вместо переменных, если формы разные - просто уберите повторения имен переменных (допишите 1,2,3 ... ) и спокойно можете передавать все в одной форме
3. Никак не связывается, просто при формировании формы Вы берете данные для выпадающего списка или radiobutton‘ов из нужной таблицы
2. Если надо записать все полученные данные в таблицу используйте
mysql_query("insert into table_name values(...[здесь переменные через запятую, строки и дата в кавычках, числа - как есть]....)");
1. Если не использовать JavaScript, а только PHP, то надо позволить пользователю выбрать государство, передать его выбор на сервер и сформировать новую форму выбора в которой будут города только нужного государства mysql_query("select city_name from city where country=‘$selected_country‘");

Чтобы лучше разобратся с SQL‘ями, которые судя по 1 и 2 Вам все-тки будут нужны найдите какой-нибудь учебник. Если получится постарайтесь найти в Internet‘e "Понимание SQL" М. Грубера - очень доходчиво написаная книга.
Неизвестный
02.08.2006, 18:59
общий
это ответ
Здравствуйте, Сычев Роман!
1. Смотрите пример, созданный мной, в приложении. Это можно реализовать на JavaScript. Правда немного неудобно - каждый список нужно создавать в отдельности, но всё равно вариант. Ещё одна особенность - это код почему-то не сработал у меня в IE... Хотя в Opera всё прекрасно.
3. Когда вы передаёте данные из формы в php-скрипт, они становятся доступны по соответствующим именам переменных. Например, если текстовое поле в форме имеет имя year, то в php-скрипте это значение будет в $year. А дальше - выполняются все необходимые операции (например, добавление в таблицу базы данных).
4. Вопрос непонятен... В любой форме вы можете размещать сколько угодно много компонент.

Приложение:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Untitled Document</title><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head><body><?php$town = $$country; // Названия списков выбора города совпадают со значениями пунктов из списка странprint $country.‘ - ‘.$town;?><script>function ShowTowns(){country = document.getElementById(‘country‘).value;document.getElementById(‘rus‘).style = ‘display:none‘;document.getElementById(‘usa‘).style = ‘display:none‘;document.getElementById(‘ukr‘).style = ‘display:none‘;document.getElementById(country).style = ‘‘;return false;}</script><form action="50929.php" method="post" enctype="multipart/form-data" name="form1" target="_self"> <p> <select name="country" id="country" onChange="ShowTowns()"> <option value="0" selected>(выберите страну)</option> <option value="rus">Россия</option> <option value="usa">США</option> <option value="ukr">Украина</option> </select> >> <select name="rus" id="rus" style="display:none"> <option value="0" selected>(выберите город)</option> <option value="Moscow">Москва</option> <option value="Vladivostok">Владивосток</option> <option value="Tula">Тула</option> <option value="St. Petersburg">Санкт-Петербург</option> </select> <select name="usa" id="usa" style="display:none"> <option value="0" selected>(выберите город)</option> <option value="Washington">Вашингтон</option> <option value="New-York">Нью-Йорк</option> <option value="San-Francisco">Сан-Франциско</option> </select> <select name="ukr" id="ukr" style="display:none"> <option value="0">(выберите город)</option> <option value="Kiev">Киев</option> <option value="Sevastopol">Севастополь</option> <option value="Odessa">Одесса</option> </select></p><p><input type="submit" name="Submit" value="Ок"></p></form></body></html>
Неизвестный
02.08.2006, 19:12
общий
1. Кстати, можно сделать еще так: поместить список городов в IFRAME, и загружать нужную страницу в IFRAME при изменении города (эти страницы можно генерировать php-скриптом). А в обработчике SUBMIT-кнопки основной страницы перенести выбранный город из IFRAME в какое-нибудь HIDDEN-поле (чтобы выбор отправился на сервер). Если убрать рамку у IFRAME, то никто ничего и не заметит.
Неизвестный
02.08.2006, 19:49
общий
это ответ
Здравствуйте, Сычев Роман!
1) Для каждого государства нужен свой ID в таблице, а в таблице с городами у каждого указываем ID государства. И когда надо, выбираем по этому полю.
2) При нажатии "Отправить" данные передаются в скрипт на обработку... Именно скрипт и выполняет все действия с БД. Можно указывать скрытые параметры в форме, по ним скрипт может определить, что надо делать.
3) Варианты для выбора должны заполнятся в PHP-скрипте. Просто выбираем из MySQL-базы нужные варианты и выводим.
4) В одну форму можно вставить сколько угодно полей, но тогда и заполнять всю форму нужно будет разом (все поля заполняются, а потом вся форма обрабатывается).
Если Вам нужно заполнять все поля без перезагрузки страницы (то есть выбираем страну и сразу грузятся города), то это можно сделать с помощью JavaScript. Так же можно сделать и проверку правильности данных. Подробности здесь: http://www.codenet.ru/cat/Languages/JavaScript/AJAX/
Про реализацию на PHP - см. приложение.
Удачи!

Приложение:
// пример 1mysql_query("SELECT * FROM cities WHERE country_id=3");// выбираем города, у которых страна под номером 3// пример 2<input type="hidden" name="action" value="нужное значение">// указываем дополнительный параметр для скрипта//пример 3$res = mysql_query("SELECT auto_year FROM table_name DISTINCT");$rows = mysql_num_rows($res);for ($i=0; $i<$rows; $i++){ $r = mysql_result($res, $i, ‘auto_year‘); $txt .= "<option value="$r">$r год\r\n"}// и выводим $txt вместо всех option‘ов// пример 4<form name="form1" method="post" action="script.php"> <select name="select1" style="WIDTH: 160px" > <option value="-1" selected>Выбрать</option> <option value="0">Значение 1</option> <option value="1">Значение 2</option> <option value="2">Значение 3</option> </select> <select name="select2" style="WIDTH: 160px" > <option value="-1" selected>Выбрать</option> <option value="0">Значение 1</option> <option value="1">Значение 2</option> <option value="2">Значение 3</option> </select></form>// оба списка будут обработаны скриптом
Неизвестный
03.08.2006, 01:27
общий
это ответ
Здравствуйте, Сычев Роман!
1. Если писать на чистом PHP, то в пределах одного запроса этого не сделать. Т.е., или придется делать пошаговый выбор, или заносить это в переменные и выводить потом с помощью JavaScript. Есть еще такой вариант, что при выборе страны JavaScript передает на сервер код страны и выводится обновленая страница с перечнем городов данного государства. Но некоторые пользователи отключают поддержку Java, так что могут возникнуть проблемы.

2. После передачи формы на сервер мы можем обратиться к переданным данным в таком виде:
$name = $_REQUEST[‘name‘]
где NAME это имя поля, в твоем случае это SELECT, SELECT2, RadioGroup1 и т.д.

3. Связывание полученной переменной с некоторым полем таблицы зависит от того, что тебе нужно - вставить или обновить данные. Конкретную реализацию кода необходимо смотреть по месту.

4. Да, все приведенные формы можно свести в одну.

P.S. Есть одно замечание по использованию CheckBox‘а. Передача значения на сервер произойдет только если он будет ВЫБРАН (установлен), т.е. в нулевом (сброшенном) состоянии НИЧЕГО передано не будет. Для решения этой проблемы необходимо вместо этого CheckBox‘а вставить код приведенный в приложении. Так же на мой взгляд в качестве значения правильнее использовать не буквы и слова, а ‘0‘ или ‘1‘


Приложение:
<input type="hidden" name="checkbox" value="0"><input type="checkbox" name="checkbox" value="1">
Форма ответа