و تو صفحه online.php به این صورت کد نوشتم :
<?php
include("config.php");
session_start();
if(isset($_SESSION['myusername']) )
{
$query= "insert into online
(id,session) VALUES
('','".@$_SESSION['myusername']."')";
$result = mysql_query($query);
echo "<a href=showonline.php>Online User's</a>";
}
else
{
echo ' no user online ';
}
خوب این کد خیلی واضحه که چی کار میکنه
ولی اینم میدونم که این کار اشتباس و همین چیزی نمیشه ولی خوب به یک چیزایی خودم رسیدم اما نتونستم فعلاً کاری بکنم .
من میخوالم طوری باشه که وقتی طرف لاگین میکنه اسمش تو صفحه show.php نمایش داده بشه و وقتی خارج مشیه از سایت session اون طرف خراب بشه و اسمش از صفحه Show.php
ممنون مشیم دوستان راهنمایی کنن
با هر بار اجرا شدن اسكريپت ابتدا سطر هاي جدول اطلاعات آنلاين ما بر اساس "مدت زمان آنلاين" حذف ، و اطلاعات كاربر فعلي به جدول افزوده خواهد شد ، در صورتي كه اسكريپت ما توسط كاربر فعلي قبلاً اجرا شده بود ، سطر مربوطه در جدول ما تنها به روز (update) خواهد شد.
"مدت زمان آنلاين" طبق زمان فعلي محاسبه مي شه و در جداول با توجه به زمان فعلي تا مدت زمان آنلاين حذف يا به روز مي شن.
كد زير ساده ترين شكل اين اسكريپت رو به ما نشون مي ده:
mysql_connect(localhost, username, password) or die();
mysql_select_db("mysql_database") or die();
$datume= date("U");
$datumex=$datume-600;
$tojvip=$_SERVER["REMOTE_ADDR"];
$query1 = "DELETE FROM online where ip='$tojvip'";
$result1 = mysql_query($query1) or die();
$query2 = "DELETE FROM online where datum<$datumex";
$result2 = mysql_query($query2) or die();
$query = "INSERT into online VALUES (''$tojvip',$datume')";
$result = mysql_query($query) or die();
$resultkolk = mysql_query("SELECT * FROM online");
$num_rowskolk = mysql_num_rows($resultkolk);
echo "اعضاء آنلاين: $num_rowskolk"
لطفاً اطلاعات جدول online رو بگید که چه فیلد و .... باید واسش ساخته بشه تا این کد اجرا بشه ؟
بر روی لوکال هاست هم میشه این کارو انجام داد ( تست کرد ) ؟ البته فقط کاربران آنلاین شده داخل دیتابس رو میگم ؟
تا اونجایی که من فهمیدم این کد اعضای آنلاین ( مهمان ) رو نمایش میده
راجبه جدولش باید بگم که :
یک جدول به نام online و 2 تا فیلد به نام ip , dateum که dateum باید نوعش DATE باشه
من تست کردم به همین صورتی که گفتم جوابی نگرفتم ، چون داریم یه جایی یه اشتباهی میکنیم
منتظر جواب جناب بنیان عالم میمونیم
جدولش رو هم همونطور که abedi98 گفته ایجاد نمایید به درستی کار می کنه .
بازم توجه کنید که نحوه استفاده یا تکمیل کد بالا به سلیقه ،شیوه کد نویسی، نیازهای شما و .. شما بستگی داره و برای درک بهتر عملکرد کد بهتره خودتون کاملش کنید ولی نمونه ی زیر یه نمونه ی کامل برای کاربران آنلاینه
اول پایگاه دادتون رو به صورت زیر تعریف می کنید :
CREATE TABLE `user_online` (
`session` char(100) NOT NULL default '',
`time` int(11) NOT NULL default '0'
) TYPE=MyISAM;
اینم کدهای کامل برای تنظیمات و بقیع کارهای لازم :
<?
session_start();
$session=session_id();
$time=time();
$time_check=$time-600; //SET TIME 10 Minute
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="user_online"; // Table name
// Connect to server and select databse
mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");
$sql="SELECT * FROM $tbl_name WHERE session='$session'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count=="0"){
$sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
$result1=mysql_query($sql1);
}
else {
"$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";
$result2=mysql_query($sql2);
}
$sql3="SELECT * FROM $tbl_name";
$result3=mysql_query($sql3);
$count_user_online=mysql_num_rows($result3);
echo "User online : $count_user_online ";
// if over 10 minute, delete session
$sql4="DELETE FROM $tbl_name WHERE time<$time_check";
$result4=mysql_query($sql4);
mysql_close();
// Open multiple browser page for result
?>
همونطور که می بینید اول کد مشخصات لازم برای Session تنظیم شده اند .
_____
با اجازه ملیکا من یک توضیحی بدم راجبه این کد :
این کد رو شما باید تو صفحه ای قرار بدی که کاربر بعد از لاگین کردن ( وقتی سشن کاربر ایجاد شد ) به اون صفحه اصلی منتقل شد مثلاً : iindex.php
مثلاً من سشن کاربرای سایت رو myusername گذاشتم پس باید تو این کد مقدار $session رو به $_session['myusername'] تغیر بدم :
$session=@$_SESSION['myusername'];
خوب به کد زیر نگاه کنید :
$sql="SELECT * FROM $tbl_name WHERE session='$session'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
این کوئری میگه که مقدار های فیلد session رو از جدول user_online نمایش بده و خط بعدیش میگه که تعداد سطرها ی این جدول رو نشون بده ( مثلاً : 2 تا مقدار وارد این فیلد شده باشه عدد 2 را چاپ میکنه )
حالا این کد رو نگاه کنید :
if($count=="0"){
$sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
$result1=mysql_query($sql1);
}
else {
"$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";
$result2=mysql_query($sql2);
}
خط اول این کد متغیر $count که در بالا توضیحشو گفتم داخل یک شرط میزاره و بررسی میکنه که اگر مقدار = 0 بود
مقدار $session و $date رو وارد فیلدهای جدول کن
مثلاً : وقتی من لاگین میکنم و سشن من ایجاد میشه باید توسط یک دستور زمان لاگین من و اسم سشن من بره تو دیتابیس ذخیره بشه دیگه .
اینجا هم به همین صورته که مقدار سشن من و زمان ورود من رو داخل جدول ذخیره میکنه .
و در else اون گفته شده که اگر مقدار وجود داشت فقط مقدارها رو آپدیت کن ( تغیر بده )
و حالا باید مقدار های جدول رو به نمایش بزارید :
تو کدی که ملیکا گذاشته ، تعداد رکوردهای جدول رو شمارش میکنه و نمایش میده و فقط یک رکورد رو به نمایش میزاره .
شما برای اینکه تمام کاربرانی که لاگین کردن رو نمایش بدید با نام کابری آنها به صورت زیر عمل کنید :
$sql3="SELECT * FROM $tbl_name";
$result3=mysql_query($sql3);
while($count_user_online=mysql_fetch_array( $result3) )
{
echo "User online : $count_user_online[session] <br> ";
}
// if over 10 minute, delete session
$sql4="DELETE FROM $tbl_name WHERE time<$time_check";
$result4=mysql_query($sql4);
mysql_close();
// Open multiple browser page for result
?>
تنها فرقش اینه که من داخل یک حلقه قرار دادم که تمام مقادیر رو نمایش بده و نام کاربری افرادی که وارد شدن رو نشون بده .
امید وارم درست توضیح داده باشم
موفق باشید