2012-08-02 4 views
0

Я хочу сделать онлайн/оффлайн статус, я сделал таблицу user_status, и я хочу добавить в SQL-код заголовка, поэтому каждый раз, когда пользователь загружает страницу, таблица будет обновляться с помощью этого время;Обновление таблицы sql всякий раз, когда страница загружается

таблица user_status: user_id | last_activity_time; user_id из таблицы users;

я добавил это в заголовке:

//check update last_time_active 
$date = date("Y-m-d H:i:s"); 

$query = mysql_query("update user_status SET last_activity_time=$date "); 
?> 

как я могу также добавить пользователя? если он вошел в систему, проверьте его user_id и обновите таблицу user_id и last_activity_time? это правильно?

После этого я хочу добавить на конкретные страницы текст рядом с именем пользователя (онлайн/офлайн).

Спасибо всем!

+2

Не полагайтесь на время PHP. Вместо этого установите 'last_activity_time = NOW()' – Matt

+0

Также вы должны вытащить 'user_id' из вашей переменной' $ _SESSION'. – Matt

+0

действительная точка, я сделаю это на время, спасибо – Abude

ответ

2

Храните идента в пользовательской $_SESSION, когда они войти Затем потяните его и вставьте в ваш запрос..

<?php 
//confirmed login, set $userid to the user's ID 
session_start(); 
$_SESSION['userid'] = $userid; 

Тогда ваш запрос будет выглядеть следующим образом (ОБНОВЛЕНО):

// Since, according to your comment, $username = $_COOKIE['username'] 

"UPDATE user_status SET last_activity_time = NOW() where user_id = (SELECT userid FROM users WHERE username='" . $_COOKIE['username'] . "')"; 

Однако DO NOT использование mysql_* функций больше. Они устарели. Вместо этого используйте PDO или mysqli. Если вы не знаете, какой из них использовать, read this article from SO.

+0

это здорово, но на самом деле у меня есть от сеанса имя пользователя, и я должен установить соединение между 'user_id' в таблице' users' и 'user_status' table .... – Abude

+0

вот так:' $ username = $ _COOKIE ['username']; 'как я могу это сделать?можете ли вы обновить ответ, пожалуйста? благодаря ! – Abude

+0

Обновлено. Мой запрос может быть не совсем оптимизирован, но он будет работать. – Matt

2

Как указано в the introduction к главе руководства PHP на mysql_* функции:

Это расширение не рекомендуется для написания нового кода. Вместо этого следует использовать расширение mysqli или PDO_MySQL. См. Также MySQL API Overview для получения дополнительной информации при выборе API MySQL.

Использование PDO:

$dbh = new PDO("mysql:host=$host;dbname=$db", $user, $pass); 
$qry = $dbh->prepare(' 
    UPDATE user_status SET last_activity_time = NOW() WHERE user_id = ? 
'); 
$qry->bindValue(1, $_SESSION['userid']); 
$qry->execute(); 
+0

Я хочу взять его из $ _session – Abude

+0

@ Jimmy этот код позволяет вам взять его из сеанса. eggyal просто использует PDO, чтобы выполнить то, что вы хотите сделать. – Matt

1

Вы хотите что-то вроде:

<?php 
    $date = date("Y-m-d H:i:s"); 

    if(isset($_SESSION['userid']) 
    // or whatever you are using to see if the user is active? 
    { 
     $query = mysql_query("update user_status SET userID=".$_SESSION['userID'], last_activity_time=".$date.";"); 
    } 

?> 
+0

-1 для использования 'mysql_ *'. Это устарело и больше не должно использоваться. [PDO] (http://php.net/manual/en/book.pdo.php) или [mysqli] (http://php.net/manual/en/book.mysqli.php). – Matt

Смежные вопросы