09/10/2018, 23:43
Cao thủ PHP giúp mình đoạn code này tý
Mình có đoạn code thế này:
Bạn để ý dòng in đậm nhé, chắc bạn biết nó làm gì rồi đúng không?
Code hoàn toàn bình thường, và chạy ngon nhưng có 1 vấn đề là nó insert tất, ví dụ có thành viên abc online sau đó thoát ra rồi sau đó login thì nó lại ghi tiép vào dữ liệu 1 row giống hệt trước đó nó đã ghi. Cách khắc phục sẽ là để nó check trong table onlinetoday nếu có thành viên đó rồi thì nó chỉ update IP và timestamp thôi, còn nếu chưa có thành viên đó thì nó mới ghi vào như code hiện đang làm.
Mình đã thử nhưng không biết code lệnh hoàn toàn cho hợp với đoạn code trên, mình mới tập tọe php mà. Ai giúp với. Cảm ơn bạn nhiều
else {
$r = $mysql->fetch_array($q);
$_SESSION['user_id'] = $r['user_id'];
$salt = 'Nothing';
$identifier = md5($salt.IP.$r['user_id'].$salt);
$level = $r['user_level'];
$timeout = NOW + 2*60*60;
m_setcookie('USER', $identifier);
$mysql->query("DELETE FROM ".$tb_prefix."online WHERE sid = '".SID."'");
$mysql->query("INSERT INTO ".$tb_prefix."onlinetoday (timestamp, sid, ip, username,user_id,user_level,user_online) VALUES ('".NOW."', '".SID."', '".IP."','".$name."','".$r['user_id']."','".$level."','1')");
$mysql->query("UPDATE ".$tb_prefix."users SET user_online = 1,online_trongngay = 1, user_ip = '".IP."', user_identifier = '".$identifier."', user_timeout = '".$timeout."' WHERE user_id = '".$r['user_id']."'");
}
exit();
}
$r = $mysql->fetch_array($q);
$_SESSION['user_id'] = $r['user_id'];
$salt = 'Nothing';
$identifier = md5($salt.IP.$r['user_id'].$salt);
$level = $r['user_level'];
$timeout = NOW + 2*60*60;
m_setcookie('USER', $identifier);
$mysql->query("DELETE FROM ".$tb_prefix."online WHERE sid = '".SID."'");
$mysql->query("INSERT INTO ".$tb_prefix."onlinetoday (timestamp, sid, ip, username,user_id,user_level,user_online) VALUES ('".NOW."', '".SID."', '".IP."','".$name."','".$r['user_id']."','".$level."','1')");
$mysql->query("UPDATE ".$tb_prefix."users SET user_online = 1,online_trongngay = 1, user_ip = '".IP."', user_identifier = '".$identifier."', user_timeout = '".$timeout."' WHERE user_id = '".$r['user_id']."'");
}
exit();
}
Code hoàn toàn bình thường, và chạy ngon nhưng có 1 vấn đề là nó insert tất, ví dụ có thành viên abc online sau đó thoát ra rồi sau đó login thì nó lại ghi tiép vào dữ liệu 1 row giống hệt trước đó nó đã ghi. Cách khắc phục sẽ là để nó check trong table onlinetoday nếu có thành viên đó rồi thì nó chỉ update IP và timestamp thôi, còn nếu chưa có thành viên đó thì nó mới ghi vào như code hiện đang làm.
Mình đã thử nhưng không biết code lệnh hoàn toàn cho hợp với đoạn code trên, mình mới tập tọe php mà. Ai giúp với. Cảm ơn bạn nhiều
Bài liên quan
Lúc kiểm tra thì fetch mỗi field đó ra rồi check thôi. Hết ngày thì empty nó lại
Tập tọe không có nghĩa là không được fang những gì mình thích, đừng nói giọng mỉa mai thế chứ
Tớ sửa thế này, mà nó vẫn không được. Thêm hàm if, nếu tìm trong list danh sách đã đăng nhập có user đó thì update , dòng thêm được in đậm
$r = $mysql->fetch_array($q);
$_SESSION['user_id'] = $r['user_id'];
$salt = 'Nothing';
$identifier = md5($salt.IP.$r['user_id'].$salt);
$level = $r['user_level'];
$timeout = NOW + 2*60*60;
m_setcookie('USER', $identifier);
$mysql->query("DELETE FROM ".$tb_prefix."online WHERE sid = '".SID."'");
//
if ($mysql->num_rows($mysql->query("SELECT user_id FROM ".$tb_prefix."onlinetoday WHERE username = '".$name."'")))
$mysql->query("UPDATE ".$tb_prefix."onlinetoday SET user_online = 1, user_ip = '".IP."' WHERE username = '".$name."'");
$mysql->query("INSERT INTO ".$tb_prefix."onlinetoday (timestamp, sid, ip, username,user_id,user_level,user_online) VALUES ('".NOW."', '".SID."', '".IP."','".$name."','".$r['user_id']."','".$level."','1')");
$mysql->query("UPDATE ".$tb_prefix."users SET user_online = 1,online_trongngay = 1, user_ip = '".IP."', user_identifier = '".$identifier."', user_timeout = '".$timeout."' WHERE user_id = '".$r['user_id']."'");
}
exit();
}
@ amida, không cần thêm vì trong table onlinetoday tớ đã có đủ username, user_id và level cho nó rồi mà, giờ tớ chỉ cần giúp về cái query trong table đó theo username, nếu username đăng nhập đã có trong table onlinetoday thì nó update, còn nếu chưa có thì insert thôi , nói như bố tướng vậy nhưng gà nên mới phải nhờ mọi người giúp
Còn cái table onlinetoday của bác, mỗi lần kiểm tra lại user nào đã vào thì chẳng lẽ chạy từ đầu tới cuối chỉ để lấy username ra?
good luck
$r = $mysql->fetch_array($q);
$_SESSION['user_id'] = $r['user_id'];
$salt = 'Nothing';
$identifier = md5($salt.IP.$r['user_id'].$salt);
$level = $r['user_level'];
$timeout = NOW + 2*60*60;
m_setcookie('USER', $identifier);
$mysql->query("DELETE FROM ".$tb_prefix."online WHERE sid = '".SID."'");
//
if ($mysql->num_rows($mysql->query("SELECT user_id FROM ".$tb_prefix."onlinetoday WHERE username = '".$name."'"))){
$mysql->query("UPDATE ".$tb_prefix."onlinetoday SET user_online = 1, ip = '".IP."' WHERE username = '".$name."'");
$mysql->query("UPDATE ".$tb_prefix."users SET user_online = 1, user_ip = '".IP."', user_identifier = '".$identifier."', user_timeout = '".$timeout."' WHERE username = '".$name."'");
}
else {
$mysql->query("INSERT INTO ".$tb_prefix."onlinetoday (timestamp, sid, ip, username,user_id,user_level,user_online) VALUES ('".NOW."', '".SID."', '".IP."','".$name."','".$r['user_id']."','".$level."','1')");
$mysql->query("UPDATE ".$tb_prefix."users SET user_online = 1,online_trongngay = 1, user_ip = '".IP."', user_identifier = '".$identifier."', user_timeout = '".$timeout."' WHERE user_id = '".$r['user_id']."'");
}
exit();
}
}
@amida
Thì ý mình cũng chỉ là lục tung nó lên để tìm xem thằng nào đã login 1 lần trong ngày rồi mà, mình ko cần thêm field như bạn nói vì nó có sẵn mình tạo rồi, giờ chỉ há miệng chờ sung thôi
Trong table chọn 1 khóa chính là user_id chẳng hạn
dùng if( update không thành công )//tức là chưa có user đó trong data
thì insert vào data. Vậy là xong
if(!mysql_query("update.."))
{
mysql_query("insert...");
}