|
|
|
| Здравствуйте.
Реализую форму с двойным выпадающим списком.
При выборе пользователем значения из первого списка
идет автоматический сабмит через JS
реализованный след. образом.
<SELECT name="pole_1" onChange="document.getElementById('sel').submit();">
Следующим шагом из БД подгружается второй список в следущий <SELECT>
Проблема заключается в том, что никак не могу сочинить логику обработки,
формы.
Т.е. когда и при каких условиях осуществлять окончательную обработку/запись
введенных данных.
Буду благодарен за любую помощь (подсказки, примеры, все что угодно).
Спасибо. | |
|
|
|
|
|
|
|
для: AlexK_
(16.07.2007 в 16:14)
| | this.form.submit() проще
насчет требований я малость не понял
почитаю сейчас еще | |
|
|
| |
|
|
|
|
для: cheops
(16.07.2007 в 20:30)
| | Спасибо.
Но эти темы перечитаны уже сто раз.
В отличии от большинства мне не нужен дв. список без перегрузки.
Он с перегрузкой и это вполне устраивает.
И второй селект я тоже сформировать могу.
вопрос в том как уже выйти из этих селектов на окончательную
обработку данных формы. т.е. подвести к тому моменту
когда данные можно отправить в бд.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: AlexK_
(16.07.2007 в 21:24)
| | сессию на промежуточный этапах юзать, или вы о чем? | |
|
|
|
|
|
|
|
для: bronenos
(16.07.2007 в 21:28)
| | Может все таки кто-то видел схему реализации двойного списка _с перезагрузкой_?
(Данные для списков берутся из бд)
В форме есть два <SELECT> (и другие поля) и кнопка Отправить (submit).
Как отличить когда юзер нажимает кнопку "Отправить" от авт. сабмита, который висит на 1-м <SELECT>? | |
|
|
|
|
|
|
|
для: AlexK_
(17.07.2007 в 07:53)
| | а с чем проблемы
отправлять значение гетом и на его основании строить второй | |
|
|
|
|
|
|
|
для: bronenos
(17.07.2007 в 08:15)
| | да. с построением второго списка проблем нет.
но если перегружается первый селект по новой как отличить его от нажатия на кнопку "Отправить"?
п.с. я подробнее описал проблему чуть выше. | |
|
|
|
|
|
|
|
для: AlexK_
(17.07.2007 в 08:23)
| | а если сделать селекты в разных формах? | |
|
|
|
|
|
|
|
для: KPETuH
(17.07.2007 в 08:49)
| | а вы выделяите выбранный элемент или...
я не понимаю какая проблема
сбрасывается список?
не передаются параметры?
не отправляется форма? | |
|
|
|
|
|
|
|
для: bronenos
(17.07.2007 в 09:03)
| | выделяю конечно.
вот таким образом формируется 1-й селект
.....
<select name="pole_1" onChange="document.getElementById('sel').submit();">
<option value="">---
<?
require_once("db/connect.php");
$query = "SELECT * FROM tbl";
$result = mysql_query($query, $link) or die(mysql_error());
if(mysql_num_rows($result) > 0) {
while($data = mysql_fetch_array($result)) {
if (isset($_POST['pole_1']) && $_POST['pole_1'] == $data['id'])
{
$selected = ' SELECTED';
}
else
{
$selected = '';
}
echo "<option value=",$data['id'],$selected,">".$data['name']."\r\n";
}
}
....
|
в зависимости от выбранного id формируется второй список.
но первый список можно перегружать, как узнать когда пользователь закончил выбор,
нажав "Отправить" | |
|
|
|
|
|
|
|
для: AlexK_
(17.07.2007 в 08:23)
| | >да. с построением второго списка проблем нет.
>но если перегружается первый селект по новой как отличить его от нажатия на кнопку "Отправить"?
делаем кнопку <input type="submit" name="KeyOk" id="KeyOk" value="Отправить">
В самом скрипте просто проверяем (предположительно данные отправляются POST)
if ($_POST["KeyOk"]) {
записываем в базу
}
else {
все остальное
} | |
|
|
|
|
|
|
|
для: ise-dvp
(17.07.2007 в 11:22)
| | >делаем кнопку <input type="submit" name="KeyOk" id="KeyOk" value="Отправить">
Спасибо. все получилось. | |
|
|
|
|
|
|
|
для: AlexK_
(17.07.2007 в 13:55)
| | AlexK, Вы бы не могли привести полный код с селектами и выборкой из БД. А то у меня какие нелепые проблемы возникают - то IF не работает, то страница пустая выходит, то еще чего... Я в шоке просто. Не могу найти ашыпку в 10-ти строках...
Буду благодарен... | |
|
|
|
|
|
|
|
для: provodnik
(18.07.2007 в 09:51)
| | Так это и был полный код для 1-го селекта.
Думаю вам лучше свой выложить, посмотрим. | |
|
|
|
|
|
|
|
для: AlexK_
(18.07.2007 в 23:27)
| | Да я уже сделал собсна... Даже и не знаю, почему не отрабатывались IFы... Просто заново переписал код...
Вот мой рабочий код. Может кому понадобится в качестве примера/основы...
Он реализует динамическую подгрузку селектов, отталкиваясь от выбранного значения первого селекта с перезагрузкой страницы с возможностью обнуления значения переменных, либо вывода на страницу, либо для чего - нибудь еще...
Первым выбирается город, затем подгружаются улицы данного города, затем номера домов этой улицы...
И еще: код писался для локального пользования, в следствии чего в нем нет никаких проверок. Ни переменных, ни истины коннекта к БД...
<?
//print_r ($_POST)."<br><br>";
// коннект с БД
$host="localhost"; #Хост
$login_mysql="root"; #Логин
$password_mysql=""; #Пароль
$baza_name="test"; #Имя базы
$db = @mysql_connect("$host", "$login_mysql", "$password_mysql");
if (!$db) exit("<p>К сожалению, не доступен сервер MySQL</p>");
if (!@mysql_select_db($baza_name,$db)) exit("<p>К сожалению, не доступна база данных</p>");
// конец коннекта с БД
if (isset($_POST['null'])) $_POST = ""; // обнуление массива при сбросе
// вывод (инъекция в БД при надобности) данных
if (isset($_POST['send'])) // если надавили кнопу "послать"
{
echo "<br><br><br><br><br><br><center>";
$ath=mysql_query("SELECT name_city FROM city WHERE id_city = '".$_POST['city']."'"); // узнаем название города относительно #id, пришедшего в ПОСТе
while($List = mysql_fetch_array($ath))
{
echo "Город ".$List['name_city']."<br>"; // выводим название города
}
$ath=mysql_query("SELECT name_street FROM street WHERE id_street = '".$_POST['street']."'"); // узнаем название улицы относительно #id, пришедшего в ПОСТе
while($List = mysql_fetch_array($ath))
{
echo "Улица ".$List['name_street']."<br>"; // выводим название улицы
}
$ath=mysql_query("SELECT name_home FROM home WHERE id_home = '".$_POST['home']."'"); // узнаем номер дома относительно #id, пришедшего в ПОСТе
while($List = mysql_fetch_array($ath))
{
echo "Дом: ".$List['name_home']."<br>"; // выводим номер дома
}
echo "<form action='' method='post'>";
echo "<INPUT type='submit' name=null value='обнулить данные' onchange='this.form.submit()'>"; // выводим кнопу для обнуления массива ПОСТ
echo "</form></center>";
}
// конец вывода данных
// если никакие кнопки не давили и массиф ПОСТ девственен, то осуществляем вывод формы
else
{
echo "<center><form action='' method='post'>";
// город
echo "<select name='city' onchange='this.form.submit()'>";
if($_POST['city'] != "") // если в ПОСТе есть город, то выводим только его
{
$r=mysql_query("SELECT name_city FROM city WHERE id_city = '".$_POST['city']."'");
$f=mysql_result($r,name_city);
echo "<option selected value=".$_POST['city'].">".$f;
}
else // если в ПОСТе нет города, то...
{
$ath = mysql_query("select * from city");
echo "<option value=0>Выберите населенный пункт";
while($List = mysql_fetch_array($ath))
{
echo "<option value=".$List['id_city']." ".$sel.">".$List['name_city']."<br>";
}
}
echo "</select><br><br>";
// конец городу
// улица
if(isset($_POST['city']) && $_POST['street'] != "")
{
echo "<select name='street' onchange='this.form.submit()'>";
$r=mysql_query("SELECT name_street FROM street WHERE id_street = '".$_POST['street']."'");
$f=mysql_result($r,name_street);
echo "<option selected value=".$_POST['street'].">".$f;
echo "</select><br><br>";
}
elseif (isset($_POST['city']) && !isset($_POST['street']))
{
echo "<select name='street' onchange='this.form.submit()'>";
$tbl = mysql_query("select * from street WHERE city_id='".$_POST['city']."'");
echo "<option value=\"0\">Выберите улицу</option>";
while($Lit = mysql_fetch_array($tbl))
{
echo "<option value=".$Lit['id_street'].">".$Lit['name_street']."<br>";
}
echo "</select><br><br>";
}
// конец улице
// дом
if(isset($_POST['street']) && $_POST['home'] != "")
{
echo "<select name='home' onchange='this.form.submit()'>";
$r=mysql_query("SELECT name_home FROM home WHERE id_home = '".$_POST['home']."'");
$f=mysql_result($r,name_home);
echo "<option selected value=".$_POST['home'].">".$f;
echo "</select><br><br>";
echo "<INPUT type='submit' name=send value='Записать в БД / послать куда либо'> ";
}
elseif (isset($_POST['street']) && !isset($_POST['home']))
{
echo "<select name='home' onchange='this.form.submit()'>";
$tbls = mysql_query("select * from home WHERE street_id='".$_POST['street']."'");
echo "<option value=\"0\">Выберите номер дома</option>";
while($Lits = mysql_fetch_array($tbls))
{
echo "<option value=".$Lits['id_home'].">".$Lits['name_home']."<br>";
}
echo "</select><br><br>";
// конец дому
}
echo " <INPUT type='submit' name=null value='Очистить значения переменных' onchange='this.form.submit()'>";
echo "</form></center>";
}
?>
|
И дамп для MySql:
CREATE TABLE `city` (
`id_city` smallint(6) NOT NULL auto_increment,
`name_city` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_city`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
--
-- Дамп данных таблицы `city`
--
INSERT INTO `city` VALUES (1, 'Москва');
INSERT INTO `city` VALUES (2, 'Петербург');
INSERT INTO `city` VALUES (3, 'Киев');
-- --------------------------------------------------------
--
-- Структура таблицы `home`
--
CREATE TABLE `home` (
`id_home` smallint(6) NOT NULL auto_increment,
`city_id` smallint(6) default NULL,
`street_id` smallint(6) default NULL,
`name_home` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_home`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=28 ;
--
-- Дамп данных таблицы `home`
--
INSERT INTO `home` VALUES (1, 1, 1, '1');
INSERT INTO `home` VALUES (2, 1, 5, '2');
INSERT INTO `home` VALUES (26, 1, 5, '3');
INSERT INTO `home` VALUES (27, 1, 7, '4');
INSERT INTO `home` VALUES (3, 1, 7, '5');
INSERT INTO `home` VALUES (4, 1, 7, '6');
INSERT INTO `home` VALUES (5, 1, 8, '7');
INSERT INTO `home` VALUES (6, 1, 8, '8');
INSERT INTO `home` VALUES (7, 1, 9, '9');
INSERT INTO `home` VALUES (8, 2, 4, '10');
INSERT INTO `home` VALUES (9, 2, 1, '11');
INSERT INTO `home` VALUES (10, 2, 1, '12');
INSERT INTO `home` VALUES (11, 2, 6, '13');
INSERT INTO `home` VALUES (12, 2, 6, '14');
INSERT INTO `home` VALUES (13, 2, 6, '15');
INSERT INTO `home` VALUES (14, 2, 9, '16');
INSERT INTO `home` VALUES (15, 2, 8, '17');
INSERT INTO `home` VALUES (16, 2, 3, '18');
INSERT INTO `home` VALUES (17, 3, 4, '19');
INSERT INTO `home` VALUES (18, 3, 4, '20');
INSERT INTO `home` VALUES (19, 3, 5, '21');
INSERT INTO `home` VALUES (20, 3, 2, '22');
INSERT INTO `home` VALUES (21, 3, 2, '23');
INSERT INTO `home` VALUES (22, 3, 2, '24');
INSERT INTO `home` VALUES (23, 3, 3, '25');
INSERT INTO `home` VALUES (24, 3, 3, '26');
INSERT INTO `home` VALUES (25, 3, 9, '27');
-- --------------------------------------------------------
--
-- Структура таблицы `street`
--
CREATE TABLE `street` (
`id_street` smallint(6) NOT NULL auto_increment,
`city_id` smallint(6) default NULL,
`name_street` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_street`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;
--
-- Дамп данных таблицы `street`
--
INSERT INTO `street` VALUES (1, 1, 'Профсоюзная');
INSERT INTO `street` VALUES (2, 1, 'пр-т Ленина');
INSERT INTO `street` VALUES (3, 1, 'Волгоградский пр-т');
INSERT INTO `street` VALUES (4, 2, 'Советская');
INSERT INTO `street` VALUES (5, 2, 'Московская');
INSERT INTO `street` VALUES (6, 2, 'Трудовая');
INSERT INTO `street` VALUES (7, 3, 'Михалевича');
INSERT INTO `street` VALUES (8, 3, 'К.Маркса');
INSERT INTO `street` VALUES (9, 3, 'Комминтерна');
|
Теперь планирую присовокупить к коду библиотеку Котерова JsHttpRequest. Это так сказать в плане обучения... | |
|
|
|
|