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 :: Перезапись строки через 12 часов

 PHP.SU

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


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

> Описание: Как удалить определенную строку из таблицы через 12 часов
Ishan
Отправлено: 16 Ноября, 2014 - 13:27:36
Post Id



Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Нояб. 2014  


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




Здравствуйте, сталкнулся с очередной проблемой.

Есть таблица "coliseum_battle" в которой есть столбцы "login_user", "time", "id_1", "id_2" и т.д.. При переходе на страницу "coliseum.php" ищем строку, где '"login_user"="user"'. Если такой строки нет, то необходимо ее создать, задав значения полей '"login_user"="user"' и "time"=time().

Это я легко могу сделать, но проблема в том, что кроме этого нужно еще проверить поле "time" в случае, если необходимая строка уже была в таблице. Значение поля нужно сравнить с текущим временем и если разница больше 12 часов, нужно либо удалить строку и создать ее вновь, либо перезеписать все поля, оставив поле '"login_user"="user"', полю "time" присвоив значение текущего времени, а поля "id_1", "id_2" и т.д. привести к пустому значению, то есть "NULL". И вот с этим у меня проблема. Как ни пытался, не могу сделать так, чтобы строка перезаписывалась через 12 часов. Это происходит каждый раз, когда обновляеться страница.

Может кто нибудь знает, как это стелать?

(Отредактировано автором: 16 Ноября, 2014 - 13:29:17)

 
 Top
KingStar
Отправлено: 16 Ноября, 2014 - 14:07:15
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE
  2.      `login_user`
  3. SET
  4.      `login_user`='NULL'
  5. WHERE
  6.      `time` < UNIX_TIMESTAMP(NOW()) - 3600 * 12


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Ishan
Отправлено: 16 Ноября, 2014 - 14:50:54
Post Id



Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Нояб. 2014  


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




KingStar пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE
  2.      `login_user`
  3. SET
  4.      `login_user`='NULL'
  5. WHERE
  6.      `time` < UNIX_TIMESTAMP(NOW()) - 3600 * 12


Что-то я не понял, что с этим делать.

До этого я пробовал такой код:
PHP:
скопировать код в буфер обмена
  1. $reg_battle = mysql_query("SELECT * FROM `coliseum_battle` WHERE `login_user`='".$user['login']."'");
  2. if(mysql_num_rows($reg_battle) > 0){
  3. $lists_battle = mysql_fetch_array($reg_battle);
  4. $tame_a = $lists_battle['time'];
  5. $tame_b = time();
  6. $tame_r = $tame_b-$tame_a;
  7. if($tame_r > 43200){
  8. mysql_query("DELETE FROM `coliseum_battle` WHERE `login_user`='".$user['login']."'");
  9. }
  10. }elseif(mysql_num_rows($reg_battle)==0){
  11. mysql_query("INSERT INTO `coliseum_battle` SET `login_user` = '".$user['login']."', `time` = '".time()."'");
  12. }
  13. $lists_battle = mysql_fetch_array($reg_battle);
  14.  


Так код удаляет строку и чтобы записать чистую строку приходиться обновлять страницу.
 
 Top
KingStar
Отправлено: 16 Ноября, 2014 - 15:45:44
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




зачем удалять и создавать новую, если можно обновить старую?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. $reg_battle = mysql_query("SELECT * FROM `coliseum_battle` WHERE `login_user`='".$user['login']."'");
  2.  
  3. if(mysql_num_rows($reg_battle) > 0)
  4. {
  5.                 mysql_query("UPDATE
  6.                         `coliseum_battle`
  7.                 SET
  8.                         `time`= UNIX_TIMESTAMP(NOW()),
  9.                         `id_1` = 'NULL',
  10.                         `id_2` = 'NULL'
  11.                 WHERE
  12.                         `time` < UNIX_TIMESTAMP(NOW()) - 3600 * 12");
  13.        
  14. }
  15. elseif(mysql_num_rows($reg_battle) == 0)
  16. {
  17.         mysql_query("INSERT INTO `coliseum_battle` SET `login_user` = '".$user['login']."', `time` = '".time()."'");
  18. }
  19.  
  20. $lists_battle = mysql_fetch_array($reg_battle);

(Добавление)
как-то так думаю


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Ishan
Отправлено: 16 Ноября, 2014 - 17:51:01
Post Id



Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Нояб. 2014  


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




KingStar пишет:
зачем удалять и создавать новую, если можно обновить старую?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. $reg_battle = mysql_query("SELECT * FROM `coliseum_battle` WHERE `login_user`='".$user['login']."'");
  2.  
  3. if(mysql_num_rows($reg_battle) > 0)
  4. {
  5.                 mysql_query("UPDATE
  6.                         `coliseum_battle`
  7.                 SET
  8.                         `time`= UNIX_TIMESTAMP(NOW()),
  9.                         `id_1` = 'NULL',
  10.                         `id_2` = 'NULL'
  11.                 WHERE
  12.                         `time` < UNIX_TIMESTAMP(NOW()) - 3600 * 12");
  13.        
  14. }
  15. elseif(mysql_num_rows($reg_battle) == 0)
  16. {
  17.         mysql_query("INSERT INTO `coliseum_battle` SET `login_user` = '".$user['login']."', `time` = '".time()."'");
  18. }
  19.  
  20. $lists_battle = mysql_fetch_array($reg_battle);

(Добавление)
как-то так думаю


Да, так гораздо лучше. Ради этого я и создал эту тему. Спасибо за помощь.
 
 Top
Ishan
Отправлено: 19 Ноября, 2014 - 07:53:09
Post Id



Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Нояб. 2014  


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




Опять не получаеться.

Сейчас использую такой код:
PHP:
скопировать код в буфер обмена
  1. //Ищем игрока в табице 'coliseum_battle'
  2. $reg_battle = mysql_query("SELECT * FROM `coliseum_battle` WHERE `login_user`='".$user['login']."'");
  3. //Если нашли то, проверяем
  4. if(mysql_num_rows($reg_battle) > 0){
  5. mysql_query("UPDATE `coliseum_battle` SET `time`= '".time()."', `id_1` = 'NULL', `id_9` = 'NULL', `id_16` = 'NULL', `id_25` = 'NULL' WHERE `time` < '".time()."' - 3600 * 12");
  6. }elseif(mysql_num_rows($reg_battle)==0){//Если нет, то создаем
  7. mysql_query("INSERT INTO `coliseum_battle` SET `login_user` = '".$user['login']."', `time` = '".time()."'");
  8. }
  9. $lists_battle = mysql_fetch_array($reg_battle);
  10.  


В принципе работает, но возникла другая проблема.

Когда проходят 12 часов и строка обновляеться значения полей `id_1`, `id_9` и т.д. принимают значение '0', хотя мне надо именно пустое поле.

Как это исправить?
 
 Top
Sail
Отправлено: 19 Ноября, 2014 - 08:46:30
Post Id



Участник


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


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




Ishan пишет:
значения полей `id_1`, `id_9` и т.д. принимают значение '0', хотя мне надо именно пустое поле.

Как это исправить?

1. Вместо 'NULL' надо использовать просто NULL. Без кавычек.
2. Убедиться, что поле в таблице не описано как имеющее свойство 'Not Null'.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB