Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Проблемы с редактированием данных в БД


Автор: Redstuff 9.12.2008, 17:40
Проблемы с редактированием данных в БД, при редактировании данных приходится изменять абсолютно все поля, если изменить лишь одно поле, то начинаются проблемы. 
Вот тут можно посмотреть: _http://kr.wgost.ru/adm/main.php

Код

function complete(){
      // подключаем файл с настройками подключения - это мы уже знаем.
     require '../inc/connect.php';

  // делаем запрос к БД в котором пытаемся вытащить страничку с указаным id. На данный момент мы не сделали еще ни одной страницы, посему запрос вернет пустой ряд.
//      $result = mysql_query("SELECT * FROM Tb_Main WHERE id_m = '".$_POST['id']."';", $link);
   $result = mysql_query("SELECT * FROM Tb_Main inner join TbType_doc on (Tb_Main.type=TbType_doc.id_t) inner join TbLvl_pr on (Tb_Main.lvl=TbLvl_pr.id_lvl) WHERE id_m = '".$_POST['id']."';", $link);
              // перекидываем данные из MySQL в пхпшный ассоциативный массив
     $row = mysql_fetch_array($result);

      // проверяем не пуст ли элемент массива id. Если пуст, значит вставляем наши данные в БД
      if(empty($row['id_m']))
            $query = "INSERT INTO Tb_Main
                     (`name`,
                      `description`,
                      `type`,
                      `lvl`,
                      `search`)
                                      VALUES
                            ('".mysql_real_escape_string($_POST['name'])."',
                             '".mysql_real_escape_string($_POST['description'])."',
                             '".mysql_real_escape_string($_POST['type'])."',
                             '".mysql_real_escape_string($_POST['lvl'])."',
                             '".mysql_real_escape_string($_POST['search'])."')";
      // а вот если не пуст, значит с этим id уже есть запись и в данном случае мы ее просто отредактируем
      else
            $query = "UPDATE Tb_Main SET
                                     `name` = '".mysql_real_escape_string($_POST['name'])."',
                                     `description` = '".mysql_real_escape_string($_POST['description'])."',
                                     `type` = '".mysql_real_escape_string($_POST['type'])."',
                                     `lvl` = '".mysql_real_escape_string($_POST['lvl'])."',
                                     `search` = '".mysql_real_escape_string($_POST['search'])."'
                     WHERE id_m = '".$_POST['id']."';";
   //     var_dump($query);
//exit;


      // непосредственно записываем наши данные в базу (до этого мы просто описывали, что надо сделать, а теперь делаем)
      mysql_query($query, $link);

      // ну и просто выводим крикливую надпись, что скрипт отработал
      echo '<h3>Данные обновлены</h3>';
}


В чем проблема кроется?  smile 

Автор: Aliance 9.12.2008, 18:14
Дамп структуры БД дай.

Автор: Redstuff 9.12.2008, 20:45
Код

-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Время создания: Дек 09 2008 г., 20:45
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
-- 
-- БД: `gost`
-- 

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

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

DROP TABLE IF EXISTS `TbLvl_pr`;
CREATE TABLE IF NOT EXISTS `TbLvl_pr` (
  `id_lvl` int(11) NOT NULL auto_increment,
  `lvl_pr` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id_lvl`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=14 ;

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

INSERT INTO `TbLvl_pr` VALUES (11, 'Бакалавр');
INSERT INTO `TbLvl_pr` VALUES (12, 'Специалист');
INSERT INTO `TbLvl_pr` VALUES (13, 'Магистр');

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

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

DROP TABLE IF EXISTS `TbSearch_key`;
CREATE TABLE IF NOT EXISTS `TbSearch_key` (
  `id_key` int(11) NOT NULL auto_increment,
  `key` text character set utf8 collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id_key`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

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

INSERT INTO `TbSearch_key` VALUES (4, '');

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

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

DROP TABLE IF EXISTS `TbType_doc`;
CREATE TABLE IF NOT EXISTS `TbType_doc` (
  `id_t` int(11) NOT NULL auto_increment,
  `type_doc` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id_t`)
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=77 ;

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

INSERT INTO `TbType_doc` VALUES (70, 'ГОСТ');
INSERT INTO `TbType_doc` VALUES (71, 'ТУ');
INSERT INTO `TbType_doc` VALUES (72, 'СНиПы');
INSERT INTO `TbType_doc` VALUES (73, 'ГОСТ Р');
INSERT INTO `TbType_doc` VALUES (74, 'Нормы и правила');

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

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

DROP TABLE IF EXISTS `Tb_Main`;
CREATE TABLE IF NOT EXISTS `Tb_Main` (
  `id_m` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `description` text,
  `fname` varchar(255) default NULL,
  `type` int(11) default NULL,
  `lvl` int(11) default NULL,
  `search` text,
  PRIMARY KEY  (`id_m`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=67 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=67 ;

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

INSERT INTO `Tb_Main` VALUES (64, 'Тестовый 2111', '<p>Тестовый 21</p>\r\n<p>Тестовый 21</p>\r\n<p>Тестовый 21</p>\r\n<p>Тестовый 21</p>\r\n<p>Тестовый 211</p>', NULL, 0, 0, '\r\n                \r\n                \r\n                \r\n         Тестовый 2  1  1     1                      ');
INSERT INTO `Tb_Main` VALUES (65, 'Тестовый 213', '<p>Тестовый 21</p>\r\n<p>Тестовый 21</p>\r\n<p>Тестовый 21</p>', NULL, 0, 0, '\r\n                \r\n                \r\n         Тестовый 21   3                     ');
INSERT INTO `Tb_Main` VALUES (66, 'Тестовый 3', '<p>Тестовый 3</p>', NULL, 70, 11, '\r\n          Тестовый 3            ');
        

Автор: Aliance 10.12.2008, 11:14
Опиши еще раз проблему. Как я понял она возникает здесь:
Код

      else
            $query = "UPDATE Tb_Main SET
                                     `name` = '".mysql_real_escape_string($_POST['name'])."',
                                     `description` = '".mysql_real_escape_string($_POST['description'])."',
                                     `type` = '".mysql_real_escape_string($_POST['type'])."',
                                     `lvl` = '".mysql_real_escape_string($_POST['lvl'])."',
                                     `search` = '".mysql_real_escape_string($_POST['search'])."'
                     WHERE id_m = '".$_POST['id']."';";

Если я прав, то это происходит из-за того что какие-то данные могут быть пустые. Так?
Тогда попробуй делать так:
Код

if ( ! empty( $_POST['description'] ) ) $sql .= "`description` = '" . mysql_real_escape_string( $_POST['description'] ) . "',"


P.S.: Дамп можно было написать только для таблицы `Tb_Main` ;)

Автор: Redstuff 10.12.2008, 11:59
Aliance, т.е. нужны условия для каждого поля на проверку их содержания? а вообще тут где-то в др. месте косяк =(
потому что при редактировании _http://www.test2.ru/adm/lvlpr.php?id=11 (если просто нажать отправить с теми данными которые там храняться, то все нормально)
проблема заключается в выпадающих списках, если их не изменять они перезаписываются на 0, а это значит таких записей в БД просто нет, поэтому ничего не выводится =(

Автор: Aliance 10.12.2008, 12:47
Какие списки? В коде никаких списков не увидел.
Чтобы изправить это - необходимо проставлять значения в списках (checked) с помощью php из Базы.

Автор: Redstuff 10.12.2008, 13:05
_http://kr.wgost.ru/adm/main.php?id=new "тип документа" и "уровень подготовки"

Автор: Redstuff 12.12.2008, 16:13
Цитата(Aliance @ 10.12.2008,  12:47)
Чтобы изправить это - необходимо проставлять значения в списках (checked) с помощью php из Базы.

Можно поподробней плиз? проблема как раз в этих самых списках...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)