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

Форум MySQL

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

 

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

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

тема: MySql+Java
 
 автор: JIyKaBbIu   (07.12.2007 в 03:59)   письмо автору
 
 

Здравствуйте. У меня возникла такая проблема, я вытаскиваю из одной таблицы в базе данные и формирую их в виде списка в форме, и пользователь либо выбирает какое-то значение из списка и его id передается в основную таблицу, либо выбирая в этом списке такой пункт "другой", со значением value="-1", (при помощи явы когда мы выбираем пункт списка появляется текстовое поле куда пользователь может добавить новое значение в базу). Дело в том, что яву я практически не знаю, не мог кто -нибудь показать код, чтобы при добавлении нового значения для списка в базу, он сразу добавлялся в список в форме без перезагрузки страницы. Ниже код списка

<!-- Станция отправления -------------------------------------------------------------------------------->
<fieldset>
<legend style="font-weight: bold">Общая информация</legend>
<table>
<script>
function VIIselectCategory()
{
  var cat = document.getElementById("stan_otprav").value;
  if(cat == -1)
    {document.getElementById("hiddenFieldVIII").style.display = "";}
    else {document.getElementById("hiddenFieldVIII").style.display = "none";}
}
</script>
<tr><td>Станция отправления:</td>
<td><select name="stan_otprav" onchange="VIIselectCategory()">
     <?
        $get_list 
= @mysql_query("SELECT id_stan_otpr, stan_otprav FROM stan_otprav");
        while (
$elem = @mysql_fetch_array($get_list))
            echo 
"<option value='$elem[id_stan_otpr]'>$elem[stan_otprav]\n";
     
?>
     <option value="-1">Другая</option>
</select>
<input type="text" name="stan_otprav1" value="" id="hiddenFieldVIII" style="display:none;"></td></tr>
<?
    
if ($_POST['stan_otprav']='-1')
    {
        
$sql="INSERT INTO `stan_otprav`  (`stan_otprav`) VALUES ('".$_POST['stan_otprav1']."')";
        
mysql_query($sql);
        
$stan_otprav=mysql_query("SELECT LAST_INSERT_ID()");
    }
    else
    {
$stan_otprav=$_POST['id_stan_otprav'];}
?>

А это код записи в основную таблицу

<?
    $sql
="INSERT INTO `otpravka` (`id_stan_otpr` , `id_otprav` , `platil` , `id_stan_naznach` , `id_poluch` , `id_gruz` , `id_vagon` , `id_schetfakt` , `id_kvitotpr` , `id_nakop` , `id_podubor`)
            VALUES ('"
.$stan_otpr."', '".$otprav."', '".$_POST['platil']."', '".$stan_naznach."', '".$poluch."', '".$naim_gruz."', '".$nomer_vagon."', '".$_POST['id_schetfakt']."', '".$_POST['id_kvitotpr']."', '".$_POST['id_nakop']."', '".$_POST['id_podubor']."')";
    
mysql_query($sql);
?>

Очень нужна помощь, сам не справлюсь. Заранее благодарен.

   
 
 автор: sim5   (07.12.2007 в 04:39)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 03:59)
 

Я вас просил, в первой вашей теме, разъяснить просто словами более подробно что означает отправка, а также возник вопрос "о нескольких записях". Без реальной таблицы невозможно понять что все это представляет. Вы уже решили первую проблему? Ведь там вы справшивали то же самое, только имя поля другое было. Без перезагрузки это не JS, но можно сделать и без перезагрузки, и довольно просто, но нужно знать что, сколько, чего...

   
 
 автор: JIyKaBbIu   (07.12.2007 в 05:01)   письмо автору
 
   для: sim5   (07.12.2007 в 04:39)
 

вот код базы

-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Время создания: Дек 05 2007 г., 16:04
-- Версия сервера: 4.1.16
-- Версия PHP: 4.4.4
-- 
-- БД: `otprvagon`
-- 

-- --------------------------------------------------------

-- 
-- Структура таблицы `dop_sbori`
-- 

CREATE TABLE `dop_sbori` (
  `id_dop_sbori` int(11) NOT NULL auto_increment,
  `dop_sbori` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_dop_sbori`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `dop_sbori`
-- 

INSERT INTO `dop_sbori` VALUES (1, 'доп. сборы');

-- --------------------------------------------------------

-- 
-- Структура таблицы `gruz`
-- 

CREATE TABLE `gruz` (
  `id_gruz` int(11) NOT NULL auto_increment,
  `naim_gruz` varchar(255) NOT NULL default '',
  `kod_gruza` int(6) NOT NULL default '0',
  `id_ohrana` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id_gruz`),
  UNIQUE KEY `id_ohrana` (`id_ohrana`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=30 ;

-- 
-- Дамп данных таблицы `gruz`
-- 

INSERT INTO `gruz` VALUES (29, '', 0, 0);

-- --------------------------------------------------------

-- 
-- Структура таблицы `kvitpriem`
-- 

CREATE TABLE `kvitpriem` (
  `id_kvitotpr` int(11) NOT NULL auto_increment,
  `seriya` char(2) NOT NULL default '',
  `nomer_kvit` int(6) NOT NULL default '0',
  `tarif` float NOT NULL default '0',
  `summa_ohrana` float default NULL,
  `itogo_s_ohr` float NOT NULL default '0',
  `nds_na itogo` float NOT NULL default '0',
  `itogo_s_nds` float NOT NULL default '0',
  `srok_dost_istek` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`id_kvitotpr`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

-- 
-- Дамп данных таблицы `kvitpriem`
-- 

INSERT INTO `kvitpriem` VALUES (1, 'се', 0, 0, 0, 0, 0, 1.18, '0000-00-00');
INSERT INTO `kvitpriem` VALUES (2, 'се', 0, 0, 0, 0, 0, 1.18, '0000-00-00');

-- --------------------------------------------------------

-- 
-- Структура таблицы `nakopit`
-- 

CREATE TABLE `nakopit` (
  `id_nakop` int(11) NOT NULL auto_increment,
  `nomer` int(6) NOT NULL default '0',
  `summa` float NOT NULL default '0',
  `nds` float NOT NULL default '0',
  `summa_s_nds` float NOT NULL default '0',
  `id_dop_sbori` int(11) NOT NULL default '0',
  `summa_sborov` float NOT NULL default '0',
  `pereves_s_nds` float NOT NULL default '0',
  PRIMARY KEY  (`id_nakop`),
  UNIQUE KEY `id_dop_sbori` (`id_dop_sbori`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `nakopit`
-- 

INSERT INTO `nakopit` VALUES (1, 0, 0, 0.18, 1.18, 0, 0, 0);

-- --------------------------------------------------------

-- 
-- Структура таблицы `ohrana`
-- 

CREATE TABLE `ohrana` (
  `id_ohrana` int(11) NOT NULL default '0',
  `ohrana` text NOT NULL,
  PRIMARY KEY  (`id_ohrana`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- 
-- Дамп данных таблицы `ohrana`
-- 

INSERT INTO `ohrana` VALUES (1, 'да');
INSERT INTO `ohrana` VALUES (2, 'нет');

-- --------------------------------------------------------

-- 
-- Структура таблицы `otpravitel`
-- 

CREATE TABLE `otpravitel` (
  `id_otprav` int(11) NOT NULL auto_increment,
  `otprav` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_otprav`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `otpravitel`
-- 

INSERT INTO `otpravitel` VALUES (1, '');

-- --------------------------------------------------------

-- 
-- Структура таблицы `otpravka`
-- 

CREATE TABLE `otpravka` (
  `id` int(11) NOT NULL auto_increment,
  `id_stan_otpr` int(11) NOT NULL default '0',
  `id_otprav` int(11) NOT NULL default '0',
  `platil` enum('ОАО РЖД','ТехПД') NOT NULL default 'ОАО РЖД',
  `id_stan_naznach` int(11) NOT NULL default '0',
  `id_poluch` int(11) NOT NULL default '0',
  `id_gruz` int(11) NOT NULL default '0',
  `id_vagon` int(11) NOT NULL default '0',
  `id_schetfakt` int(11) NOT NULL default '0',
  `id_kvitotpr` int(11) NOT NULL default '0',
  `id_nakop` int(11) NOT NULL default '0',
  `id_podubor` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id_gruz` (`id_gruz`,`id_vagon`,`id_schetfakt`,`id_kvitotpr`,`id_nakop`,`id_podubor`),
  UNIQUE KEY `id_stan_otpr` (`id_stan_otpr`),
  UNIQUE KEY `id_otprav` (`id_otprav`),
  UNIQUE KEY `id_stan_naznach` (`id_stan_naznach`),
  UNIQUE KEY `id_poluch` (`id_poluch`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `otpravka`
-- 

INSERT INTO `otpravka` VALUES (1, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0);

-- --------------------------------------------------------

-- 
-- Структура таблицы `podachauborka`
-- 

CREATE TABLE `podachauborka` (
  `id_podubor` int(11) NOT NULL auto_increment,
  `nomer_podacha` int(6) NOT NULL default '0',
  `summa` float NOT NULL default '0',
  `summa_s_nds` float NOT NULL default '0',
  `id_vid_sbora` int(11) NOT NULL default '0',
  `polzovanie` float NOT NULL default '0',
  `shtraf` float NOT NULL default '0',
  `podachaub` float NOT NULL default '0',
  PRIMARY KEY  (`id_podubor`),
  UNIQUE KEY `id_vid_sbora` (`id_vid_sbora`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `podachauborka`
-- 

INSERT INTO `podachauborka` VALUES (1, 0, 0, 1.18, 0, 0, 0, 0);

-- --------------------------------------------------------

-- 
-- Структура таблицы `poluchatel`
-- 

CREATE TABLE `poluchatel` (
  `id_poluch` int(11) NOT NULL auto_increment,
  `poluch` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_poluch`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `poluchatel`
-- 

INSERT INTO `poluchatel` VALUES (1, '');

-- --------------------------------------------------------

-- 
-- Структура таблицы `rod_vagona`
-- 

CREATE TABLE `rod_vagona` (
  `id_rod_vagona` int(11) NOT NULL auto_increment,
  `rod_vagona` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_rod_vagona`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `rod_vagona`
-- 

INSERT INTO `rod_vagona` VALUES (1, 'платформа');

-- --------------------------------------------------------

-- 
-- Структура таблицы `schetfaktura`
-- 

CREATE TABLE `schetfaktura` (
  `id_schetfakt` int(11) NOT NULL auto_increment,
  `nomer_schetfakt` int(5) NOT NULL default '0',
  `data_schetfakt` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`id_schetfakt`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

-- 
-- Дамп данных таблицы `schetfaktura`
-- 

INSERT INTO `schetfaktura` VALUES (1, 15154, '2007-12-04');
INSERT INTO `schetfaktura` VALUES (2, 66666, '2007-11-05');
INSERT INTO `schetfaktura` VALUES (3, 66666, '2007-11-05');
INSERT INTO `schetfaktura` VALUES (4, 0, '0000-00-00');
INSERT INTO `schetfaktura` VALUES (5, 0, '0000-00-00');
INSERT INTO `schetfaktura` VALUES (6, 0, '0000-00-00');

-- --------------------------------------------------------

-- 
-- Структура таблицы `sobstvennik`
-- 

CREATE TABLE `sobstvennik` (
  `id_sobstvennik` int(11) NOT NULL auto_increment,
  `sobstvennik` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_sobstvennik`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `sobstvennik`
-- 

INSERT INTO `sobstvennik` VALUES (1, 'Балтика');

-- --------------------------------------------------------

-- 
-- Структура таблицы `stan_naznach`
-- 

CREATE TABLE `stan_naznach` (
  `id_stan_naznach` int(11) NOT NULL auto_increment,
  `stan_naznach` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_stan_naznach`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `stan_naznach`
-- 

INSERT INTO `stan_naznach` VALUES (1, '');

-- --------------------------------------------------------

-- 
-- Структура таблицы `stan_otprav`
-- 

CREATE TABLE `stan_otprav` (
  `id_stan_otpr` int(11) NOT NULL auto_increment,
  `stan_otprav` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_stan_otpr`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `stan_otprav`
-- 

INSERT INTO `stan_otprav` VALUES (1, '');

-- --------------------------------------------------------

-- 
-- Структура таблицы `vagon`
-- 

CREATE TABLE `vagon` (
  `id_vagon` int(11) NOT NULL auto_increment,
  `nomer_vagon` int(8) NOT NULL default '0',
  `id_rod_vagona` int(11) NOT NULL default '0',
  `id_sobstvennik` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id_vagon`),
  UNIQUE KEY `id_sobstvennik` (`id_sobstvennik`),
  UNIQUE KEY `id_rod_vagona` (`id_rod_vagona`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `vagon`
-- 

INSERT INTO `vagon` VALUES (1, 0, 0, 0);

-- --------------------------------------------------------

-- 
-- Структура таблицы `vid_sbora`
-- 

CREATE TABLE `vid_sbora` (
  `id_vid_sbora` int(11) NOT NULL auto_increment,
  `vid_sbora` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_vid_sbora`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

-- 
-- Дамп данных таблицы `vid_sbora`
-- 

INSERT INTO `vid_sbora` VALUES (1, 'тест');
        

Если я правильно понял, то необходимо объяснить то о чем собственно эта база.
Суть базы заключается в том, что есть основная таблица в которой каждая запись - отправка конкретного вагона, выбранного из списка, с грузом. Т. е. человек захотел отправить домашние вещи из Владивостока в Москву, приходит он в транспортную компанию, они подписывают договор, он загрузил вещи и они ушли в Москву. Вот каждая такая операция - одна запись в основной таблице. Остальные таблицы содержат данные о документах, которые являются сопроводительными (счет-фактура, накопительная ведомость и т. д.). Есть данные которые не меняются, например станция отправления, поэтому я создал отдельную таблицу, в которой собственно и перечисляются все станции, но т. к. их много, то сразу наполнять таблицу данными я не стал, а решил наполнять ее по мере того, как придется заносить новые документы по операции отправки в базу. Вся база, это некоторые поля из разных документов, которые нужны для перевозки грузов по жд. Все это надо для того, чтобы руководитель смог просмотреть потом отчеты по отправкам за месяц или полгода, типа сколько раз за месяц использовался данный вагон или на какую сумму было выполнено перевозок и т. п.

   
 
 автор: sim5   (07.12.2007 в 05:29)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 05:01)
 

Я не структуру таблицы имел ввиду, а что в ней находится, чтобы понять хотя бы, что из себя представляют все эти перевозки. Не надо такое длинное всталять, лучше прикреплять. Если касается только пункта доставки, то все можно просто сделать:

<FORM ACTION="" METHOD="post" ONSUBMIT="if(this.sity.value == '' && this.oth_sity.value == '') return false">
<SELECT NAME="sity" ONCHANGE="if(this.value==-1) this.form.oth_sity.disabled=false; else {this.form.oth_sity.disabled=true; this.form.oth_sity.value='';}">
 <OPTION VALUE="">Выберите пункт доставки</OPTION>
 <OPTION VALUE="1">Москва</OPTION>
 <OPTION VALUE="2">Брянск</OPTION>
 <OPTION VALUE="3">Орел</OPTION>
 <OPTION VALUE="4">Омск</OPTION>
 <OPTION VALUE="-1">Другое</OPTION>
</SELECT>
<INPUT TYPE="text" NAME="oth_sity" DISABLED>
<INPUT TYPE="submit" VALUE="GO">
</FORM>

Не надо скрывать поле ввода другого города, достаточно запретить ввод в это поле, если выбирается город имеющийся в списке. Как только будет выбрано из списка "Другое", в это поле можно будет сделать ввод. Если пользователь опять выберет значение из списка, то это поле опять станет недоступным, а его значение обнуляется.

   
 
 автор: JIyKaBbIu   (07.12.2007 в 05:40)   письмо автору
 
   для: sim5   (07.12.2007 в 05:29)
 

Я понимаю, что можно сделать и так как вы написали, но дело в том, что в форме много подобных списков (станция назначения, отправитель, плательщик, получатель и т. д. ), ситуация с ними одинаковая, либо выбираем из списка, либо пункт "другое", и вносим новый элемент списка. Я могу прикрепить скриншот формы, либо полностью код формы.

   
 
 автор: sim5   (07.12.2007 в 05:48)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 05:40)
 

Вот потому я вас и спрашивал еще в первом посте, что вообще из себя все это представляет. Решать проблему кусочками, это головная боль, потому, чтобы вам сейчас не было предложено, вы будете задавать еще массу вопросов. Что бы все решить, надо ясно представлять всю картину, но если это большая задача, то вам ее придется решать самому, на основе того, что я вам написал, либо заказывать кому либо работу, если вы сами не можете с нею справиться.
А без перезагрузки, я так понимаю, обусловлено тем, что вы хотели сделать ввод города, затем получить на странице новый список, например, тип груза и т.д., потому как сделать все комплексно не знаете как?

   
 
 автор: JIyKaBbIu   (07.12.2007 в 06:17)   письмо автору
 
   для: sim5   (07.12.2007 в 05:48)
 

>Вот потому я вас и спрашивал еще в первом посте, что вообще из себя все это представляет. Решать проблему кусочками, это головная боль, потому, чтобы вам сейчас не было предложено, вы будете задавать еще массу вопросов. Что бы все решить, надо ясно представлять всю картину, но если это большая задача, то вам ее придется решать самому, на основе того, что я вам написал, либо заказывать кому либо работу, если вы сами не можете с нею справиться.
Да основная работа выполнена, осталось немного запись в базу значений выбранных из списков и обычных текстовых полей.


>А без перезагрузки, я так понимаю, обусловлено тем, что вы хотели сделать ввод города, затем получить на странице новый список, например, тип груза и т.д., потому как сделать все комплексно не знаете как?
Мне не нужны зависимые списки. Просто если бы запись добавлялась в список без перегрузки страницы, проще тогда передавать id выбранного нового элемента списка на запись в основную таблицу.

   
 
 автор: sim5   (07.12.2007 в 06:31)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 06:17)
 

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

<SCRIPT>
function frmsend(f) {
  for (i=0; i<f.length; i++) {
    if (f[i].value == '') {
      alert('Форма не заполнена!');
      return false;
    }
  }
}

function selval(e) {
var el = document.getElementById(e.id+'_oth'); 
if (e.value==-1) {
    el.disabled=false;
    e.value = '';
  } 
  else {
    el.disabled=true; 
    el.value='';
  }
}
</SCRIPT>

<FORM NAME="sel" ACTION="" METHOD="post" ONSUBMIT="return frmsend(this.elements)">
Город: <SELECT ID="sity" ONCHANGE="selval(this)">
 <OPTION VALUE="">Выберите пункт назначения</OPTION>
 <OPTION VALUE="1">Москва</OPTION>
 <OPTION VALUE="2">Брянск</OPTION>
 <OPTION VALUE="3">Орел</OPTION>
 <OPTION VALUE="4">Белгород</OPTION>
 <OPTION VALUE="-1">Другой</OPTION>
</SELECT>
<INPUT TYPE="text" ID="sity_oth" DISABLED><BR>
Груз: <SELECT ID="packag" ONCHANGE="selval(this)">
 <OPTION VALUE="">Выберите тип груза</OPTION>
 <OPTION VALUE="1">Валенки</OPTION>
 <OPTION VALUE="2">Сапоги</OPTION>
 <OPTION VALUE="3">Ботинки</OPTION>
 <OPTION VALUE="4">Портянки</OPTION>
 <OPTION VALUE="-1">Другое</OPTION>
</SELECT>
<INPUT TYPE="text" ID="packag_oth" DISABLED><BR>
<INPUT TYPE="submit" VALUE="GO">
</FORM>

Здесь, каждый список имеет поле ввода для другого значения, а его ID выбырается как ID списка плюс "_oth". При изменении в списке, происходит вызов функции selval(), которая опрределит что выбрано в списке и сделает доступным дополнительное поле ввода для этого списка, если это будет выбрано. Добавляйте другие списки, указывайте им ID по вышеописанному принципу, вносите в них реальные значения - все должно работать.

   
 
 автор: JIyKaBbIu   (07.12.2007 в 07:04)   письмо автору
 
   для: sim5   (07.12.2007 в 06:31)
 

А можно показать пример на основе кода который я в начале постил. Если я правильно понял, то при добавлении нового значения, это значение появится в списке?

   
 
 автор: sim5   (07.12.2007 в 07:38)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 07:04)
 

Во-первых, в приведенном мною выше коде, функция проверки заполнения формы frmsend(), работать будет не верно, так как я не учел, что может быть заполнено значение либо списка, либо поля ввода. Во-вторых, пример чего?
Нет, при вводе нового значения в поле ввода, значение списка просто обнуляется, и на сервере нужно просто будет узнать - если значение списка пусто, то взять значение ассоциированного с ним поля ввода. Применить для этого условную запись, будет просто и "сердито".)
Для того чтобы добавленное значение добавлялось в список, нужна необходимая "операция", а зачем усложнять? Тем более, можно ведь просто ошибиться, введя новое значение, но потом все таки исправить ошибку - выбрать уже имеющееся из списка. Конечно, по уму, нужно было бы устроить проверку даже после того, как пользователь ввел новое значение в поле - есть ли оно в списке. Но тут трудность, значение списка, это ID, а вводить будут названия города, например. Хотя можно и текст опшенов брать для проверки, но и ввод можно сделать с ошибкой, а значит...
Одним словом, универсального, проверяющее вся и все, навряд ли можно придумать, это лишь усложнит код. Лучше использовать элементы формы <fieldset></fieldset> и <legend></legend>, разбив таким образом форму на визуальные блоки, в которых прописать правила заполнения и прочую информацию, позволяющую свести к минимуму ошибки со стороны администратора. Сама форма, при таком количестве списков и других полей, может быть внушительной, поэтому заключить ее в DIV с прокруткой, ведь "жмахнуть" все сразу кнопочки и списки формы не требуется.

   
 
 автор: JIyKaBbIu   (07.12.2007 в 08:30)   письмо автору
 
   для: sim5   (07.12.2007 в 07:38)
 

А вот еще вопрос по этой теме: у меня есть несколько текстовых полей, в первые 2 из них я ввожу числовые данные, мне надо, чтобы сразу после ввода, в оставшихся полях вычислялись значения по определенным формулам. Ниже код в котором я попытался сделать сам. Но в итоге получается, что значения, которые должны вычисляться по формулам, вычисляются только после отправки данных формы на сервер.

<fieldset>
<legend style="font-weight: bold">Квитанция о приеме груза</legend>
<table>
<tr><td>Серия квитанции:</td>
<td><input type="text" name="seriya" value="" ></td></tr>

<tr><td>№ квитанции:</td>
<td><input type="text" name="nomer_kvit" value="" ></td></tr>

<tr><td>Тариф:</td>
<td><input type="text" name="tarif" value="" ></td></tr>

<tr><td>Охрана:</td>
<td><input type="text" name="summa_ohrana" value="" ></td></tr>

<tr><td>Тариф + охрана:</td>
<? $tarifohr=$_POST['tarif']+$_POST['summa_ohrana']; ?>
<td><input type="text" name="itogo_s_ohr" value='<?=$tarifohr?>'></td></tr>

<tr><td>Ндс на (тариф + охрану):</td>
<? $tarifohrnds=$tarifohr*0.18?>
<td><input type="text" name="nds_na_itogo" value='<?=$tarifohrnds?>'></td></tr>

<tr><td>Ндс + тариф + охрана:</td>
<? $tarifohrsnds=$tarifohr+$tarifohrnds?>
<td><input type="text" name="itogo_s_nds" value='<?=$tarifohrsnds?>'></td></tr>

<tr><td>Срок доставки истекает:</td>
<td><input type="text" name="srok_dost_istek" value="0000-00-00"></td></tr></table></fieldset>
<?
$sql
="INSERT INTO `kvitpriem`  (`seriya` , `nomer_kvit` , `tarif` , `summa_ohrana` , `itogo_s_ohr` , `nds_na_itogo` , `itogo_s_nds` , `srok_dost_istek`)
            VALUES ('"
.$_POST['seriya']."', '".$_POST['nomer_kvit']."', '".$_POST['tarif']."', '".$_POST['summa_ohrana']."', '".$_POST['itogo_s_ohr']."', '".$_POST['nds_na_itogo']."', '".$_POST['itogo_s_nds']."', '".$_POST['srok_dost_istek']."')";
    
mysql_query($sql);
?>

Не подскажите как можно это реализовать?

   
 
 автор: Trianon   (07.12.2007 в 08:38)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 08:30)
 

php работает на сервере.
Вам нужны вычисления до отправки - то есть на клиенте. Вам нужен JavaScript.

   
 
 автор: sim5   (07.12.2007 в 08:40)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 08:30)
 

Ну юмористы :)) <? $tarifohr=$_POST['tarif']+$_POST['summa_ohrana']; ?> - это кончено будет исполнено на сервере после приема соответсвующих переменных, а потом вставлено как <?=$tarifohr?>. Выбросить все подобные записи из формы, все это надо реализовать на JS. Сейчас придумаю что либо.

   
 
 автор: JIyKaBbIu   (07.12.2007 в 08:53)   письмо автору
 
   для: sim5   (07.12.2007 в 08:40)
 

То что все это должно быть на яве, мне понятно и то что php выполняется на сервере я тоже знаю, просто изначально надо было, чтобы в форме были только поля для ввода данных, а те данные которые автоматически вычислялись, не выводились в форме. А потом потребовалось как раз таки то, а чем выше написал.

   
 
 автор: Trianon   (07.12.2007 в 09:09)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 08:53)
 

когда - потом?

   
 
 автор: JIyKaBbIu   (07.12.2007 в 09:15)   письмо автору
 
   для: Trianon   (07.12.2007 в 09:09)
 

начальник сказал, что ему надо видеть данные которые автоматически высчитываются, на основе введенных данных, а раньше ему это не надо было.

   
 
 автор: sim5   (07.12.2007 в 09:42)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 08:30)
 


<SCRIPT>
function summaru(f) {
var t = parseFloat(f.tarif.value);
var s = parseFloat(f.summa_ohrana.value);
 if (t > 0 && s > 0) {
   var n = (t + s)*0.18;
   f.itogo_s_ohr.value = t + s;
   f.nds_na_itogo.value = n;
   f.itogo_s_nds.value = n + t + s;
 } else {
   f.itogo_s_ohr.value = '';
   f.nds_na_itogo.value = '';
   f.itogo_s_nds.value = '';
 }
}
</SCRIPT>

<FORM NAME="sel" ACTION="" METHOD="post">
Тариф:
<input ONCHANGE="summaru(this.form)" MAXLENGTH="6" type="text" name="tarif" ONKEYPRESS="if(event.keyCode < 48 || event.keyCode > 57) return false;"
ONKEYUP="summaru(this.form)"><BR>
Охрана:
<input ONCHANGE="summaru(this.form)" MAXLENGTH="6" type="text" name="summa_ohrana" ONKEYPRESS="if(event.keyCode < 48 || event.keyCode > 57) return false;"
ONKEYUP="summaru(this.form)"><BR>
Тариф + охрана:
<input type="text" name="itogo_s_ohr" READONLY><BR>
Ндс на (тариф + охрану):
<input type="text" name="nds_na_itogo" READONLY><BR>
Ндс + тариф + охрана:
<input type="text" name="itogo_s_nds" READONLY>
</FORM>

Я не знаю какие цифры будут вводится в поля, имея ввиду, например, 100 или 100.47 (т.е. рубли и копейки). Первые два поля имеют проверку - если вводятся не числа, то ввод в эти поля запрещен, другими словами нельзя будет ввести в них 100.47. Так же неизвесно, производить округление НДС или нет, сделано без. Поля tarif и summa_ohrana надо ограничить по длине вводимых значений, в примере я указал обеим 6. Остальные три поля должны иметь атрибут READONLY.

   
 
 автор: JIyKaBbIu   (07.12.2007 в 10:08)   письмо автору
 
   для: sim5   (07.12.2007 в 09:42)
 

все замечательно работает, огромное вам спасибо, единственное хотел узнать, у меня будут вводиться числа в формате 100.47 (с копейками). Как из этой проверки event.keyCode < 48 || event.keyCode > 57 исключить keyCode "." и ",". Спасибо.

   
 
 автор: sim5   (07.12.2007 в 10:15)   письмо автору
 
   для: JIyKaBbIu   (07.12.2007 в 10:08)
 

Перепишите выражение для события ONKEYPRESS следующим образом:

if(event.keyCode < 48 && event.keyCode != 46 || event.keyCode > 57) return false;

   
 
 автор: JIyKaBbIu   (07.12.2007 в 10:30)   письмо автору
 
   для: sim5   (07.12.2007 в 10:15)
 

Спасибо вам большое!!! Если бы не вы не знаю, чтобы я делал. Заодно и чуть-чуть java узнал .

   
Rambler's Top100
вверх

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