تایید درستی یک کد؟!

شروع موضوع توسط 3dsmax ‏9 مارس 2008 در انجمن برنامه‌نویسی با PHP

  1. 3dsmax

    3dsmax Member

    ارسال‌ها:
    214
    تشکر شده:
    65
    امتیاز دستاورد:
    16
    این کدا رو ببینید آیا درست هستن یا مشکل دارن
    نمیدونم چرا رو سرور میزنه افراد آنلاین 8 تا با اینکه 8 نفر آنلاین نیستن و بعد از 1 ساعت دوباره رفتم تو سایت بازدید ها شدن 2 تا ولی 8 تا آنلاین هنوز بود حالا نمی دونم مشکل از نمایش آفراد آنلاین یا بازدید ها این کدها رو ببینید.

    PHP:
    <?php
    require_once('mysql.php');

    $ip = $_SERVER['REMOTE_ADDR'];
    $page = $_SERVER['REQUEST_URI'];
    $come_page = $_SERVER['HTTP_REFERER'];
    $win = $_SERVER['HTTP_USER_AGENT'];
    $out = 2592000;
    $time = time();
    $timeout = $time - $out;

    $conn = db_connect();
    mysql_select_db($db_name,$conn);
                               
                               
    mysql_query("INSERT INTO amar_online (date, ip, page, come_page, win) VALUES ('".$time."','".$ip."','".$page."','".$come_page."','".$win."')");
    mysql_query("DELETE FROM amar_online WHERE date < $timeout");
    $select = mysql_query("SELECT DISTINCT ip FROM amar_online WHERE page='$page'");
    $online = mysql_num_rows($select);
                                                           
    if ($online == 1) {
        echo "افراد آنلاین :  $online<br />";
    }
    else {
        echo "افراد آنلاین :  $online<br />";
    }
    ////////////////////////////////////////////////////////////////////////
    $date=date("y-m-d");
                                                           
    $sql = mysql_query("SELECT * FROM amar_tedad WHERE date='$date'");
    if(mysql_num_rows($sql)>0) {
        $q=mysql_query("UPDATE amar_tedad SET counter=counter+1 WHERE date='$date'");
    }
    else {
        $q=mysql_query("INSERT INTO amar_tedad (`counter`,`date`) VALUES('1','$date') ");
    }
                                                           
                                                           
    // بازدید امروز
    $q=mysql_query("SELECT * FROM amar_tedad WHERE date='$date'");
    $row=mysql_fetch_array($q);
    $co=$row['counter'];
    if($co == "") {
        $co = "0";
    }
    echo "بازدید امروز : $co <br>";
                                                           
                                                           
    // بازدید دیروز
    $pdate=date("y-m-d",time()-86400);
    $q2=mysql_query("SELECT * FROM amar_tedad WHERE date='$pdate'");
    $row2=mysql_fetch_array($q2);
    $co2=$row2['counter'];
    if($co2 == "") {
        $co2 = "0";
    }
    echo "بازدید دیروز : $co2 <br>";
                                                           
                                                           
    $q6 = mysql_query("SELECT sum(counter) FROM amar_tedad");
    $row6 = mysql_fetch_array($q6);
    if($row6 == "")
        $row6 = "0";
    }
    echo "بازدید کل : $row6[0]";
                                                           
    mysql_close();
    ?>
    اینم mysql.php

    PHP:
    <?php
    function db_connect()
    {
       $result = mysql_connect("localhost","user","pass");
       if (!$result)
          return false;
       if (!mysql_select_db('نام بانک اطلاعاتی'))
          return false;
       return $result;
    }
    ?>
    بانک اطلاعاتیشم که معلومه
    لطفا کمکم کنید فوریه:sad:

    یه سوال دیگه هم داشتم چطور میشه هم افراد آنلاین در صفحه ی جاری رو نمایش بده هم آفراد آنلاین در کل صفحات؟:sad:
     
    آخرین ویرایش: ‏9 مارس 2008
    نوشته شده توسط 3dsmax در ‏9 مارس 2008
  2. NabiKAZ

    NabiKAZ Well-Known Member

    ارسال‌ها:
    1,184
    تشکر شده:
    430
    امتیاز دستاورد:
    83
    سلام،

    اگر کمی الگوریتم رو بررسی میکردی متوجه میشدی. چشم بسته کدها رو کپی پست کردن همین سوال ها رو هم ناشی میشه!

    به هر حال...
    شما امکان تشخیص زمان خروج رو ندارید. بنابراین برای تشخیص تعداد کاربران آنلاین، در هر بار بازدید صفحه، آی پی و زمان بازدید صفحه در بانک اطلاعاتی ذخیره میشه. سپس یه زمان انقضاء (در این مثال out$) تعریف میشه. حالا... برای دفعات آینده وقتی صفحه بازدید میشه رکوردهایی که از این زمان انقضاء کوچکتر باشند حذف میشن. پس اگر در این فاصله زمانی (یعنی رسیدن به زمان انقضاء) کسی از سایت بازدید کنه، رکورد جدید اضافه میشه و در غیر این صورت حذف میشه و ...
    با اجرای این رویه، نهایتاً در هر لحظه تعداد رکوردهایی که در بانک موجوده نشانه تعداد کاربران آنلاین سایت هست.
    این میزان کاملاً در ارتباط با اون زمان انقضاء تعریف شده، است. در واقع هر چی این زمان بیشتر باشه، تعداد کاربران بیشتری به عنوان آنلاین نمایش داده میشه و بلعکس، یعنی اگر این زمان کمتر باشه اونوقت ممکنه کمتر از حد واقعی باشه. در نتیجه نمایش تعداد افراد آنلاین یک مقدار نسبی است و همیشه دقیق نیست.
    این زمان بر حسب ثانیه در متغییر ذخیره شده. در مثال شما 2592000 ثانیه (30 روز) است، که اطلاعات کاربران رو تا این مدت نگه میداره. یعنی تو این فاصله زمانی، هر کابری که از سایت دیدن میکنه حتی اگر بلافاصله از سایت خارج بشه، باز هم یک نفر به افراد آنلاین اضافه میشه و تا 30 روز که از لیست خارج میشه...
    عددی که شما وارد کردی خیلی غیر واقعیه. پیشنهاد من استفاده از 600 (10 دقیقه) و یا حداکثر 1800 (30 دقیقه) است. این زمان برابر زمان تخمینی و میانگین زمانی است که یک کاربر ممکنه در سایت شما باقی بمونه.

    الگوریتم سادست ولی توضیحش کمی سخت بود. خیلی سعی کردم منظور رو برسونم...

    امیدوارم متوجه شده باشید.

    پ.ن1: به علامت های کاما دقت کن.
    پ.ن2: متن تاپیک هم میشد بهتر انتخاب کنی.


    موفق باشید
    نبی
     
    نوشته شده توسط NabiKAZ در ‏9 مارس 2008
    3dsmax از این پست تشکر کرده است.
  3. 3dsmax

    3dsmax Member

    ارسال‌ها:
    214
    تشکر شده:
    65
    امتیاز دستاورد:
    16
    مرسی از اقا نبی گرفتم چی شد , من فکر کرده بودم این $out اطلاعاتی رو که در بانک اطلاعاتی ذخیره می کنه بعد از 3 روز دوباره این اطلاعات از تو بانک اطلاعاتی پاک می شوم و اطلاعات جدید دوباره save میشن برای یک ماه!!:cry::wink:
     
    نوشته شده توسط 3dsmax در ‏10 مارس 2008

به اشتراک بگذارید