Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Двойной список и сабмит.
 
 автор: AlexK_   (16.07.2007 в 16:14)   письмо автору
 
 

Здравствуйте.
Реализую форму с двойным выпадающим списком.
При выборе пользователем значения из первого списка
идет автоматический сабмит через JS
реализованный след. образом.
<SELECT name="pole_1" onChange="document.getElementById('sel').submit();">
Следующим шагом из БД подгружается второй список в следущий <SELECT>

Проблема заключается в том, что никак не могу сочинить логику обработки,
формы.
Т.е. когда и при каких условиях осуществлять окончательную обработку/запись
введенных данных.

Буду благодарен за любую помощь (подсказки, примеры, все что угодно).
Спасибо.

   
 
 автор: bronenos   (16.07.2007 в 17:35)   письмо автору
 
   для: AlexK_   (16.07.2007 в 16:14)
 

this.form.submit() проще
насчет требований я малость не понял
почитаю сейчас еще

   
 
 автор: cheops   (16.07.2007 в 20:30)   письмо автору
 
   для: AlexK_   (16.07.2007 в 16:14)
 

Возможно вас заинтересуют темы по ссылкам
http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=12222
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=7586

   
 
 автор: AlexK_   (16.07.2007 в 21:24)   письмо автору
 
   для: cheops   (16.07.2007 в 20:30)
 

Спасибо.
Но эти темы перечитаны уже сто раз.

В отличии от большинства мне не нужен дв. список без перегрузки.

Он с перегрузкой и это вполне устраивает.
И второй селект я тоже сформировать могу.
вопрос в том как уже выйти из этих селектов на окончательную
обработку данных формы. т.е. подвести к тому моменту
когда данные можно отправить в бд.

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

   
 
 автор: bronenos   (16.07.2007 в 21:28)   письмо автору
 
   для: AlexK_   (16.07.2007 в 21:24)
 

сессию на промежуточный этапах юзать, или вы о чем?

   
 
 автор: AlexK_   (17.07.2007 в 07:53)   письмо автору
 
   для: bronenos   (16.07.2007 в 21:28)
 

Может все таки кто-то видел схему реализации двойного списка _с перезагрузкой_?
(Данные для списков берутся из бд)
В форме есть два <SELECT> (и другие поля) и кнопка Отправить (submit).
Как отличить когда юзер нажимает кнопку "Отправить" от авт. сабмита, который висит на 1-м <SELECT>?

   
 
 автор: bronenos   (17.07.2007 в 08:15)   письмо автору
 
   для: AlexK_   (17.07.2007 в 07:53)
 

а с чем проблемы
отправлять значение гетом и на его основании строить второй

   
 
 автор: AlexK_   (17.07.2007 в 08:23)   письмо автору
 
   для: bronenos   (17.07.2007 в 08:15)
 

да. с построением второго списка проблем нет.
но если перегружается первый селект по новой как отличить его от нажатия на кнопку "Отправить"?

п.с. я подробнее описал проблему чуть выше.

   
 
 автор: KPETuH   (17.07.2007 в 08:49)   письмо автору
 
   для: AlexK_   (17.07.2007 в 08:23)
 

а если сделать селекты в разных формах?

   
 
 автор: bronenos   (17.07.2007 в 09:03)   письмо автору
 
   для: KPETuH   (17.07.2007 в 08:49)
 

а вы выделяите выбранный элемент или...
я не понимаю какая проблема
сбрасывается список?
не передаются параметры?
не отправляется форма?

   
 
 автор: AlexK_   (17.07.2007 в 09:34)   письмо автору
 
   для: 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 формируется второй список.

но первый список можно перегружать, как узнать когда пользователь закончил выбор,
нажав "Отправить"

   
 
 автор: ise-dvp   (17.07.2007 в 11:22)   письмо автору
 
   для: AlexK_   (17.07.2007 в 08:23)
 

>да. с построением второго списка проблем нет.
>но если перегружается первый селект по новой как отличить его от нажатия на кнопку "Отправить"?


делаем кнопку <input type="submit" name="KeyOk" id="KeyOk" value="Отправить">

В самом скрипте просто проверяем (предположительно данные отправляются POST)

if ($_POST["KeyOk"]) {
записываем в базу
}
else {
все остальное
}

   
 
 автор: AlexK_   (17.07.2007 в 13:55)   письмо автору
 
   для: ise-dvp   (17.07.2007 в 11:22)
 

>делаем кнопку <input type="submit" name="KeyOk" id="KeyOk" value="Отправить">

Спасибо. все получилось.

   
 
 автор: provodnik   (18.07.2007 в 09:51)   письмо автору
 
   для: AlexK_   (17.07.2007 в 13:55)
 

AlexK, Вы бы не могли привести полный код с селектами и выборкой из БД. А то у меня какие нелепые проблемы возникают - то IF не работает, то страница пустая выходит, то еще чего... Я в шоке просто. Не могу найти ашыпку в 10-ти строках...

Буду благодарен...

   
 
 автор: AlexK_   (18.07.2007 в 23:27)   письмо автору
 
   для: provodnik   (18.07.2007 в 09:51)
 

Так это и был полный код для 1-го селекта.
Думаю вам лучше свой выложить, посмотрим.

   
 
 автор: provodnik   (19.07.2007 в 10:07)   письмо автору
 
   для: 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. Это так сказать в плане обучения...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования