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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> users online 
V
    Опции темы
fakeman
Дата 1.6.2009, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

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



Всю ночь отвазился так и не решил проблему с удалением и выводом нормального числа в такой задаче как "Скока юзеров и онлайн и кто именно" 
Вот код:

Код

$datentime = time() - 10;
mysql_query("DELETE * FROM online WHERE dnt<".$datentime." LIMIT 1" );
$res = mysql_query("SELECT * FROM online WHERE dnt > '$datentime'");
while($b = mysql_fetch_array($res))
{
echo "<br>".$b['id_user'].", last click at ".date('d.m.Y // H:i:s', $b['dnt'])."<br>";
}
$res1 = mysql_query("UPDATE online SET dnt='".time()."' WHERE id_user='".$id_user."'");

if(mysql_affected_rows() != 1)
{
$res2 = mysql_query("INSERT INTO online  VALUES ('$id_user','".time()."')");

}
 $res3 = mysql_query("SELECT * FROM online ");
$res_r = mysql_fetch_row( $res3 );
$users_online = count($res_r);
echo "<br>".$users_online;


Почему запись не удаляется через 10сек из базы ?
И почему если 1 узер онлайн то он пишет что их 2 :( в чем проблема с 
Код

$res3 = mysql_query("SELECT * FROM online ");

П.с. таблица(online) такая : 2 столбца id_user(уникальный key, INT(100)) и dnt(VARCHAR(255)) 
PM MAIL   Вверх
Рыжий
Дата 1.6.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


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

Репутация: 2
Всего: 20



Код

mysql_query("DELETE * FROM online WHERE dnt<".$datentime." LIMIT 1" );

Зачем LIMIT 1? Уберите его.
Код

$res = mysql_query("SELECT * FROM online WHERE dnt > '$datentime'");

Тут, в принципе, можно и без WHERE dnt > '$datentime'.
И нужно добавить:
Код

$res = mysql_query("SELECT * FROM online WHERE dnt > '".$datentime."' AND id_user=".$id_user." LIMIT 1");


Код

$res2 = mysql_query("INSERT INTO online  VALUES ('$id_user','".time()."')");

$id_user - числовой ведь:
Код

$res2 = mysql_query("INSERT INTO online  VALUES (".$id_user.",'".time()."')");


PM MAIL ICQ   Вверх
youri
Дата 1.6.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



а что mysql адекватно воспринимает unix timestamp'ы, без FROM_UNIXTIME()?
PM   Вверх
Рыжий
Дата 1.6.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


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

Репутация: 2
Всего: 20



youri, тут MySQL вообще не работает с Timestamp, dnt ведь VARCHAR(255) а в него идет time()

fakeman, кстати если уж такое юзать, то лучше обявить dnt числовым. А еще лучше TIMESTAMP`ом

PM MAIL ICQ   Вверх
fakeman
Дата 1.6.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

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



Так довайте по порядку с самого начала создаю в базе таблицу с 2 столбцами: id_user(VARCHAR(100) U_KEY) dnt(TIMESTAMP)
так ? 
Далее как сделать запись в базу что бы в столбике dnt не было нулей а время. 
PM MAIL   Вверх
bars80080
Дата 1.6.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(fakeman @  1.6.2009,  14:38 Найти цитируемый пост)
id_user(VARCHAR(100)

а почему строка? id_user разве не число?

Цитата(fakeman @  1.6.2009,  14:38 Найти цитируемый пост)
Далее как сделать запись в базу что бы в столбике dnt не было нулей а время.  

Код

insert into `table_name` (id_user) values (значение)


PM MAIL WWW   Вверх
youri
Дата 1.6.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



Цитата(Рыжий @  1.6.2009,  11:31 Найти цитируемый пост)
youri, тут MySQL вообще не работает с Timestamp, dnt ведь VARCHAR(255) а в него идет time()

да, не заметил  smile 

p.s. а еще в mysql есть такая функция как NOW()
PM   Вверх
fakeman
Дата 1.6.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

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



Цитата(bars80080 @  1.6.2009,  14:58 Найти цитируемый пост)
а почему строка? id_user разве не число?

Упс опичатался тут 
Цитата(fakeman @  1.6.2009,  14:38 Найти цитируемый пост)
_user(VARCHAR(100) U_KEY)

у меня в базе Int стоит.

Код

$id_user = $_SESSION['id'];

$userq = mysql_query("SELECT * FROM online WHERE id_user='".$id_user."'");
$array = mysql_fetch_row($userq);
if(!isset($array['id_user']))
{
mysql_query("INSERT INTO online (id_user) VALUES ('".$id_user."')");
}
else
{
echo "Обновить таблицу";
}


Чего то я запутался и не пойму почему он не выводит "Обновить таблицу" если в таблице есть запись.
П.с. как сделать обновление таблицы.
PM MAIL   Вверх
Shark
Дата 1.6.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

echo "Обновить таблицу";

Код

mysql_query("UPDATE online SET dnt=now() WHERE id_user='".$id_user."'")


Это сообщение отредактировал(а) Shark - 1.6.2009, 16:01


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
fakeman
Дата 1.6.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

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



Он почему то не делает UPDATE да и вообше он не доходит то else если в таблице есть хуть одна запись, разве здесь есть какая то проблема 
Цитата(fakeman @  1.6.2009,  15:51 Найти цитируемый пост)
if(!isset($array['id_user']))
 ?

PM MAIL   Вверх
Shark
Дата 1.6.2009, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$id_user = $_SESSION['id'];

$userq = mysql_query("SELECT * FROM online ");
$array = mysql_fetch_row($userq);
if($array['id_user'] != $id_user)
{
mysql_query("INSERT INTO online (id_user) VALUES ('".$id_user."')");
}
else
{
mysql_query("UPDATE online SET dnt=now() WHERE id_user='".$id_user."'")
}


попробуй так

Это сообщение отредактировал(а) Shark - 1.6.2009, 23:26


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
fakeman
Дата 1.6.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

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



если написать такое.
Код

$id_user = $_SESSION['id'];
$userq = mysql_query("SELECT * FROM online ");
$array = mysql_fetch_row($userq);
if($array['id_user'] != $id_user)
{
echo "1";
mysql_query("INSERT INTO online (id_user) VALUES ('".$id_user."')");
}
else
{
echo "2";
mysql_query("UPDATE online SET dnt=now() WHERE id_user='".$id_user."'");
}


По идеи если есть запись в таблице то должен делать UPDATE и выдать на экран 2 ? Но он всё время выводит тока 1 :(
PM MAIL   Вверх
Shark
Дата 1.6.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



блин.. конечно...незаметил у тя функцию mysql_fetch_row
Код

$id_user = $_SESSION['id'];
$userq = mysql_query("SELECT * FROM online ");
$array = mysql_fetch_row($userq);
if($array[0] != $id_user)
{
echo "1";
mysql_query("INSERT INTO online (id_user) VALUES ('".$id_user."')");
}
else
{
echo "2";
mysql_query("UPDATE online SET dnt=now() WHERE id_user='".$id_user."'");
}




--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
Рыжий
Дата 1.6.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


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

Репутация: 2
Всего: 20



Код

$userq = mysql_query("SELECT * FROM online ");
$array = mysql_fetch_row($userq);
if($array[0] != $id_user)


Это можно реализовать так:

Код

$userq = mysql_query("SELECT COUNT(*) FROM online WHERE `id_user` = ".$id_user." ");
$array = mysql_fetch_row($userq);
if($array[0] > 0){
// Есть
}
else {
// Нет
}

PM MAIL ICQ   Вверх
fakeman
Дата 2.6.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

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



Shark
Рыжий
Эта проблема решина, спасибо. Теперь как бы грамотно удалить из базы запись катора я не обновлялась n времени допустим 1мин. 

Код

mysql_query ("DELETE FROM online WHERE dnt < DATE_SUB(NOW(), INTERVAL 1 MINUTE)");

PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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