Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вопрос по обновлению записей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Altynayka
Отправлено: 15 Апреля, 2008 - 06:37:20
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Добрый день!
У меня возник вопрос по поводу обновления записей. Не соображу, как решить проблему. Обновляю запись след. образом. :
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3. $sql=("UPDATE `note` SET reg_date='".addslashes($sadd_date)."' , reg_date_begin='".addslashes($sadd_date_begin)."',
  4. reg_date_end='".addslashes($sadd_date_end)."' ,predmet='".addslashes($sadd_preddog)."'  WHERE reg_number= '$sadd_rnomer'");
  5.  
  6.  

Все прекрасно работает. Однако, если у меня некоторые из переменных не содержат новых данных, то в запись идут значения "0". И приходится всю запись набирать заново. Очень неудобно, так как хотелось бы исправить данные одного поля, а выходит что исправляются все поля.
Можно ли сделать так, чтобы обновлялись только те поля, где переменные содержат данные. А в обратном случае поля в записи оставались прежними.
Подскажите пожалуйста.
Надо ли проверить каждую переменную до выполнения запроса?

(Отредактировано автором: 15 Апреля, 2008 - 06:38:12)

 
 Top
RomAndry Администратор
Отправлено: 15 Апреля, 2008 - 09:12:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




ну самое простое - это выводить значения в поля формы из базы, тогда все поля строки обновятся нормально.
или собирать запрос по isset
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $sql = 'UPDATE `note` SET ';
  4. $sql. = (isset($_POST['sadd_date']) AND $_POST['sadd_date']!='') ? 'reg_date='.addslashes($_POST['sadd_date']).' ,' : '';
  5. $sql.= ' WHERE reg_number= '.intval($_POST['sadd_rnomer']);
  6. ?>
  7.  
не забываем, что в последней проверке запятая не нужна.
 
My status
 Top
EuGen Администратор
Отправлено: 15 Апреля, 2008 - 09:27:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $rgUpdate=array();
  4. if (isset($_POST['sadd_date']))
  5.    $rgUpdate[]="reg_date='".addslashes($_POST['sadd_date'])."'";
  6. if(isset($_POST['sadd_date_begin']))
  7.    $rgUpdate[]="reg_date_begin='".addslashes($_POST['sadd_date_begin'])."'";
  8. if(isset($_POST['sadd_date_end']))
  9.    $rgUpdate[]="reg_date_end='".addslashes($_POST['sadd_date_end'])."'";
  10. if(isset($_POST['sadd_preddog']))
  11.    $rgUpdate[]="predmet='".addslashes($_POST['sadd_preddog'])."'";
  12. $strUpdate=join(",",$rgUpdate);
  13. if(isset($_POST['sadd_rnomer'])&&$strUpdate)//то есть есть что обновлять и передано условие
  14.    mysql_query("UPDATE `note` SET ".$strUpdate." WHERE reg_number= '".addslashes($_POST['sadd_rnomer'])."'");
  15. ?>
  16.  

(Отредактировано автором: 15 Апреля, 2008 - 09:28:29)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 15 Апреля, 2008 - 12:12:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




EuGen
сделала, все что было Вами указано, но увы, не вышло. проблема осталась.
 
 Top
EuGen Администратор
Отправлено: 15 Апреля, 2008 - 12:14:30
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Это может быть, только если передаются какие-то значения $_POST (в указанных полях). В этом случае можно добавить проверку на пустоту строки:
$_POST['index']!=""
И сделайте print_r($_POST);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 15 Апреля, 2008 - 13:12:03
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




RomAndry
не могли бы уточнить как правильно закрыть последнюю проверку?
так будет правильно?
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3. $sql= 'update `note` set ';
  4. $sql.=(isset($_POST['add_date']) and $_POST['add_date']!='') ? 'reg_date='.addslashes($_POST['add_date']).' ,'';
  5. $sql.=(isset($_POST['add_date_begin']) and $_POST['add_date_begin']!='') ? 'reg_date_begin='.addslashes($_POST['add_date_begin']).' ':'';
  6. $sql.=' where reg_number='.addslashes($_POST['add_rnomer']);
  7.  

Дело в том, что у меня появляется запятая всегда перед where.
Не получается подправить
EuGen
сделала проверку :
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3. if ((isset($_POST['add_date']))||((isset($_POST['add_date']))!=''))
  4.    $rgUpdate[]="reg_date='".addslashes($_POST['add_date'])."'";
  5.  

все то же.

(Отредактировано автором: 15 Апреля, 2008 - 13:41:57)

 
 Top
RomAndry Администратор
Отправлено: 15 Апреля, 2008 - 14:33:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




Altynayka
а Вы сделайте

увидите свой запрос и проанализируете.
(Добавление)
Цитата:
сделала проверку :

вместо ИЛИ нужно использовать И (AND, &&)
 
My status
 Top
EuGen Администратор
Отправлено: 15 Апреля, 2008 - 14:39:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Соглашусь с RomAndry, посмотрите, какой у Вас запрос получается, и насчет проверки тоже.
Делаете так:
1. print_r($_POST) - смотрите, а что же Вы собственно передаете
2. Делаете echo($sql) - смотрите Ваш запрос
3. После выполнения 1 и 2 должно стать ясно, какие условия означают отсутствие данных в $_POST и, соответственно, какие условия нужно написать, так как isset я писал, исходя из того, что данные были не переданы (а это может быть не так).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 16 Апреля, 2008 - 07:01:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Возник вопрос не по теме, как бы нелепо это не звучало, но ,мне кажется связан каким-то образом с предыдущей темой, так как эта проблема возникла после проверки isset.
Вообщем, при регистрации , например, на получение почтового адреса нужно заполнить форму. И в случае неудачной передачи, т.е. после того, как вы нажали на кнопку "Выполнить", выходит сообщение, что какие-то данные не были введены правильно, и обычно при нажатии кнопки "Назад", поля формы, содержат те записи, которые вы вводили до нажатии кнопки "Выполнить", кроме пароля.
У меня проблема такая, что после того, как я сделала провеку на обязательную передачу и не пустые поля, то при нажатии кнопки "Назад", поля формы остаются пустыми. Помогите решить эту проблему. Огорчение
SOS!!!

(Отредактировано автором: 21 Апреля, 2008 - 12:35:32)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB