Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с insert, Не работает условие if (isset($_POST[... 
V
    Опции темы
andro_id
Дата 24.4.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Здравствуйте. Я новичок в PHP-программировани. Есть задача:
1. выбор из дроп-даун меню определенного значения, все возможные значения достаются из БД
Код

<form method="post" action="<?php echo $PHP_SELF; ?>">
<input type="hidden" name="action">
<select name="device_explain" onchange="this.form.submit();">
echo "<option>---< Выберите тип >---</option>" ;
<?php
    include "./common_db.inc";
    $link_id = db_connect($default_dbname);
    
    $devices_query = "SELECT device_explain FROM $devices_tablename";
          $devices = mysql_query($devices_query);
           while($query_data = mysql_fetch_array($devices)) {
            $device_explain = $query_data["device_explain"];
              echo "<option>$device_explain</option>" ;     
           }
?>
</select>
</form><br><br><br>


2. В зависимости от выбранного значения, вставка в страницу соответствующей формы

Код

<?php     
   $devices_query = "SELECT device_type FROM $devices_tablename WHERE device_explain='" . $_POST['device_explain'] . "'";
         $devices = mysql_query($devices_query);
           while($query_data = mysql_fetch_array($devices)) {
            $device_type = $query_data["device_type"];                
       }
    if ($device_type == "workstation") {
        //echo "Форма для РАБОЧЕЙ СТАНЦИИ";        
        include('includes/forms/workstation.php');        
    } 


Сама форма:

Код

<center><h3>Добавить оборудование:</h3></center>
<form method="post" action="<?php echo $PHP_SELF; ?>">
<input type="hidden" name="action">
  <div align="center"><center><table border="1" width="90%">
    
    <tr>
      <th width="30%" nowrap>Модель устройства</th>
      <td width="70%"><input type="text" name="device_model" size="20"></td>
    </tr>
    <tr>
      <th width="30%" nowrap>Серийный номер</th>
      <td width="70%"><input type="text" name="device_serial" size="20"></td>
    </tr>
    <tr>
      <th width="30%" nowrap>Сетевое имя</th>
      <td width="70%"><input type="text" name="device_netname" size="20"></td>
    </tr>
    <tr>
      <th width="30%" nowrap>IP адрес</th>
      <td width="70%"><input type="text" name="device_ip" size="20"></td>
    </tr>
    <tr>
      <th width="30%" nowrap>MAC адрес</th>
      <td width="70%"><input type="text" name="device_mac" size="20"></td>
    </tr>
    <tr>
      <th width="30%" nowrap>Место установки</th>
      <td width="70%"><input type="text" name="device_location" size="20"></td>
    </tr>
    <tr>
      <th width="30%" nowrap>Дата получения</th>
      <td width="70%"><input type="text" name="device_date_receive" size="20">&nbsp; формат даты: YYYY-MM-DD</td>
    </tr>
    <tr>
      <th width="30%" nowrap>Дата списания</th>
      <td width="70%"><input type="text" name="device_date_spisan" size="20">&nbsp; формат даты: YYYY-MM-DD</td>
    </tr>
    <tr>
      <th width="30%" nowrap>Комментарий</th>
      <td width="70%"><input type="text" name="device_comment" size="20"></td>
    </tr>
    <tr>
      <th width="30%" colspan="2" nowrap>
        <input type="submit" name="do" value="Добавить">
        <input type="reset" value="Сбросить"></th>
    </tr>
</table>
  </center></div>
</form>
<?php
 
//Вставляет данные в базу
    
    $device_type = $_POST['device_explain'];
    $device_model = $_POST['device_model'];
    $device_netname = $_POST['device_netname'];
    $device_serial = $_POST['device_serial'];
    $device_ip = $_POST['device_ip'];
    $device_mac = $_POST['device_mac'];
    $device_date_receive = $_POST['device_date_receive'];
    $device_comment = $_POST['device_comment'];
    $device_location = $_POST['device_location'];
    $device_status = $_POST['device_status'];
    $device_date_spisan = $_POST['device_date_spisan'];
    
    global $default_dbname, $inventory_tablename;
    $link_id = db_connect($default_dbname);
        
//(`device_id` , `device_type` , `device_model` , `device_netname` , `device_serial` , `device_eklznum` , `device_fiscdate` , `device_servipass` , `device_ip` , `device_mac` , `device_date_receive` , `device_comment` , `device_location` , `device_status` , `device_date_spisan`)    
    
    if (isset($_POST['do'])) {
    $query = "INSERT $inventory_tablename VALUES('', '$device_type', '$device_model', '$device_netname', '$device_serial', '', '', '', '$device_ip', '$device_mac', '$device_date_receive', '$device_comment', '$device_location', '$device_status', '$device_date_spisan')";     
    $result = mysql_query($query);    
    }    
?>


Однако, почему-то, добавление значений в базу не происходит, а только исчезает форма. Если убрать условие if (isset($_POST['do'])), тогда данны добавляются и по нажатию кнопки в форме и по выбору значения onchange="this.form.submit();" в первой форме.
Вопрос:
Как же сделать добавление ТОЛЬКО по нажатию кнопки в форме?
Сделать так, чтобы после добавления значений в базу форма не исчезала, а лишь очищалась? Т.е. нужно чтобы формы не было только при первом посещении страницы, а потом висела та форма, которая последний раз была выбрана.
База:
Код

-----------------------------------
CREATE TABLE  `lmadmin`.`devices` (
  `device_id` int(3) NOT NULL auto_increment,
  `device_explain` varchar(255) NOT NULL default '' COMMENT 'расшифровка',
  `device_img` varchar(45) NOT NULL default '' COMMENT 'изображение',
  `device_type` varchar(45) NOT NULL default '' COMMENT 'тип',
  PRIMARY KEY  USING BTREE (`device_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Типы оборудования';
-----------------------------------
CREATE TABLE  `lmadmin`.`inventory` (
  `device_id` int(11) NOT NULL auto_increment COMMENT 'инвентарный номер',
  `device_type` varchar(64) NOT NULL default '' COMMENT 'тип устройства',
  `device_model` varchar(64) NOT NULL default '' COMMENT 'модель',
  `device_netname` varchar(64) NOT NULL default '' COMMENT 'сетевое имя',
  `device_serial` varchar(64) NOT NULL default '' COMMENT 'серийный номер',
  `device_eklznum` int(11) NOT NULL default '0' COMMENT 'номер ЭКЛЗ',
  `device_fiscdate` date NOT NULL default '0000-00-00' COMMENT 'дата фискализации',
  `device_servipass` text NOT NULL COMMENT 'пароль сервисного инженера',
  `device_ip` varchar(64) NOT NULL default '0' COMMENT 'IP адрес',
  `device_mac` varchar(64) NOT NULL default '0' COMMENT 'MAC адрес',
  `device_date_receive` date NOT NULL default '0000-00-00' COMMENT 'дата получения оборудования',
  `device_comment` varchar(255) NOT NULL default '' COMMENT 'комментарии',
  `device_location` varchar(255) NOT NULL default '' COMMENT 'месторасположение',
  `device_status` int(11) default NULL,
  `device_date_spisan` date NOT NULL default '0000-00-00' COMMENT 'дата списания',
  PRIMARY KEY  USING BTREE (`device_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 COMMENT='инвентаризация';
-----------------------------------
Спасибо.

Это сообщение отредактировал(а) PARROT - 24.4.2007, 12:00
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 24.4.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



andro_id, какие ошибки пишет?


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
andro_id
Дата 24.4.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



никаких ошибок. если стоит условие, после нажатия кнопки "Добавить" форма просто сбрасывается и на странице выводится только первый селект. Хотя я ставил проверку того, что передаётся в $_POST, все данные проходят, но мимо базы.
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 24.4.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Цитата(andro_id @  24.4.2007,  12:39 Найти цитируемый пост)
никаких ошибок.

Такого не бывает:
Код

$devices = mysql_query($devices_query) or die(mysql_error());




--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
andro_id
Дата 24.4.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Получаю Resource id #5 и никаких ошибок. А как сделать, чтобы форма не пропадала, а оставалась, но чистая? Сейчас после нажатия на кнопку Добавить происходит возврат к первому селекту, а формы нет. Чтобы форма снова появилась, нужно опять выбрать значение. Может тогда будет проще найти проблему?
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 24.4.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50





--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
andro_id
Дата 24.4.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Я знаю как происходит выборка из БД. Отбросим пока вопрос с БД. Как сделать, чтобы форма висела всегда, кроме первого захода на страницу?
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 24.4.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Если Вы обращаетесь по индексу поля, то Вам следует использовать 
mysql_fetch_assoc --  Обрабатывает ряд результата запроса и возвращает ассоциативный массив.

Добавлено через 5 минут и 10 секунд
У Вас форма зависит от выбора из базы. А если из базы ничего не приходит, то и формы не будет.  Разберитесь с базой, печатайте запросы и смотрите что за данные к вам приходят. 
Код

echo "SELECT device_type FROM $devices_tablename WHERE device_explain='" . $_POST['device_explain'] . "'";



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
andro_id
Дата 24.4.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



После первого выбора значения в селекте я получаю соответсвующую форму. Т.е. переменная уже получена. Можно ли сохранить её и "протащить" через форму для заполнения по второму кругу? Чтобы если в первом селекте ничего не выбиралось, то осталась предыдущая форма. Или в данной реализации это невозможно и нужно придумывать что-то другое?
PM MAIL WWW ICQ Skype   Вверх
PARROT
Дата 24.4.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Думаю надо написать план действий, чтобы было понятно.

Добавлено через 2 минуты и 54 секунды
По пунктам.



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
andro_id
Дата 24.4.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Итак, план:
1. Первый заход - видим только первый селект, в котором выбираем тип оборудования
 --> выбрали(есть переменная $var, по которой) --> получам соответствующую форму
2. Заполняем форму(переменную $var держим в уме)
--> жмаем Добавить --> данные ушли в базу(переменную $var держим в уме)
3. Возврат к началу страницы и т.к. переменная $var уже есть, открываем соответствующую форму.

Т.е. избавляем пользователя от повторного выбора типа оборудования и вывода соответсвующей формы. Если нужно добавить 100 шт. однотипного оборудования, зачем каждый раз снова выбирать одну и ту же форму? Вот такая задумка.
PM MAIL WWW ICQ Skype   Вверх
GZep
Дата 24.4.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: -1
Всего: 32



а после записи в бд редирект делаете?


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
PARROT
Дата 24.4.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Код

       if ($var=="") $form="Форма не выбрана";
else $form = "даем форму";




--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
andro_id
Дата 24.4.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Цитата

а после записи в бд редирект делаете? 

Вот тут поподробнее. Редирект не делаю, см. первый пост. Всё заканчивается этим
Код

if (isset($_POST['do'])) {
    $query = "INSERT $inventory_tablename VALUES('', '$device_type', '$device_model', '$device_netname', '$device_serial', '', '', '', '$device_ip', '$device_mac', '$device_date_receive', '$device_comment', '$device_location', '$device_status', '$device_date_spisan')";     
    $result = mysql_query($query);    
    }   

Как сделать?

Это сообщение отредактировал(а) andro_id - 24.4.2007, 13:07
PM MAIL WWW ICQ Skype   Вверх
andro_id
Дата 24.4.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 17.4.2007
Где: Москва

Репутация: нет
Всего: 1



Цитата

 if ($var=="") $form="Форма не выбрана";
else $form = "даем форму";

Эта переменная $var не переносится из формы, которая вставляется инклудом, обратно в родительский php-файл. Т.е. сбой на этом этапе:
2. Заполняем форму(переменную $var держим в уме)
--> жмаем Добавить --> данные ушли в базу(а переменная $var пропала)
3. Возврат к началу страницы и переменной $var уже нет --> $form="Форма не выбрана".
Как быть?
Если точнее: Как же пронести переменные из дочерней формы, обратно в родительский файл?



Это сообщение отредактировал(а) andro_id - 24.4.2007, 13:41
PM MAIL WWW ICQ Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.