לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 10-04-2009, 13:33
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 2 שנכתבה על ידי tnadav1 שמתחילה ב "חפש בפורום, שאלו מלא פעמים"

יש לי את הפונקציה הבאה
הבנתי שזו פונקציה לבדיקת יוזרים מחוברים

אבל אני לא מבין כלום

אשמח לקבל פירוט על כל פונקציה ובנוסף על הנתונים שהפונקציה מקבלת

ואיך אני מוציא את הנתון של מספר האנשים שמחוברים

קוד PHP:
 function open($save_path$session_name)
{
  global 
$sess_save_path;

  
$sess_save_path $save_path;
  return(
true);
}

function 
close()
{
  return(
true);
}

function 
read($id)
{
  global 
$sess_save_path;

  
$sess_file "$sess_save_path/sess_$id";
  return (string) @
file_get_contents($sess_file);
}

function 
write($id$sess_data)
{
  global 
$sess_save_path;

  
$sess_file "$sess_save_path/sess_$id";
  if (
$fp = @fopen($sess_file"w")) {
    
$return fwrite($fp$sess_data);
    
fclose($fp);
    return 
$return;
  } else {
    return(
false);
  }

}

function 
destroy($id)
{
  global 
$sess_save_path;

  
$sess_file "$sess_save_path/sess_$id";
  return(@
unlink($sess_file));
}

function 
gc($maxlifetime)
{
  global 
$sess_save_path;

  foreach (
glob("$sess_save_path/sess_*") as $filename) {
    if (
filemtime($filename) + $maxlifetime time()) {
      @
unlink($filename);
    }
  }
  return 
true;
}

session_set_save_handler("open""close""read""write""destroy""gc");

session_start(); 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 11-04-2009, 17:39
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
מצאתי אחת שעברת על MYSQL
בתגובה להודעה מספר 3 שנכתבה על ידי tsachibenezra שמתחילה ב "יש לי את הפונקציה הבאה הבנתי..."

אבל יש לי בעיה אני לא מצליח ליצור חיבור עם ה DB

זאת הפונקציה
קוד PHP:
<?php
//echo 'עברית';
class SessionManager
{    
    var 
$life_time;
    
    
    function 
SessionManager()
    {
        
// Read the maxlifetime setting from PHP
        
        
$this->life_time get_cfg_var("session.gc_maxlifetime");
        
        
// Register this object as the session handler
        
session_set_save_handler(    array( &$this"open" ), 
                                    array( &
$this"close" ),
                                    array( &
$this"read" ),
                                    array( &
$this"write"),
                                    array( &
$this"destroy"),
                                    array( &
$this"gc" )
                                    );
    
    }
    
    function 
open$save_path$session_name )
    {
        global 
$sess_save_path;
        
$sess_save_path $save_path;      // Don't need to do anything. Just return TRUE.
        
return true;
    }
    
    function 
close()
    {
        return 
true;
    }
    
    function 
read$id )
    {
        
$data '';  // Set empty result
        
        // Fetch session data from the selected database
        
        
$time time();
        
$newid mysql_real_escape_string($id);
        
$sql "SELECT session_data FROM sessions WHERE session_id = '".$newid."' AND expires > ".$time;    
        
$rs mysql_query($sql);
        
$a mysql_num_rows($rs);
        
        if(
$a 0)
        {
            
$row mysql_fetch_assoc($rs);
            
$data $row['session_data'];
        }
    
        return 
$data;
    }
    
    function 
write$id$data )
    {
        
// Build query                
        
        
$time time() + $this->life_time;
        
$newid mysql_real_escape_string($id);
        
$newdata mysql_real_escape_string($data);
        
$sql "REPLACE sessions (session_id,session_data,expires) VALUES('".$newid."','".$newdata."', ".$time.")";    
        
$rs mysql_query($sql);
    
        return 
TRUE;
    }
    
    function 
destroy$id )
    {    
        
// Build query
        
        
$newid mysql_real_escape_string($id);
        
        
$sql "DELETE FROM sessions WHERE session_id =".$newid;
        
mysql_query($sql);
        
        return 
TRUE;
    }
    
    function 
gc()
    {
        
// Garbage Collection
        // Build DELETE query.  Delete all records who have passed
        //  the expiration time
        
        
$sql 'DELETE FROM sessions WHERE expires < UNIX_TIMESTAMP();';
        
mysql_query($sql);
        
        
// Always return TRUE

        
return true;
    }

}
?>


ככה מפעילים אותה
קוד PHP:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Untitled Document</title>
</
head>

<
body>
<?
php
require_once("onlineusersMYSQL.php");

$sess = new SessionManager();

session_start();
?>
</body>
</html> 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 14-04-2009, 23:31
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 6 שנכתבה על ידי tsachibenezra שמתחילה ב "אולי תעזור לי קצת <-:"

טוב, בגלל שקצת קשה למצוא את זה:
מה שמצאת זה דרך לנהל Session-ים דרך MySQL, זה אמנם לא קשור אבל זה התחלה לאיך לעשות את זה.

אני יסביר לך לפי איך שהמערכת שלי פועלת, אם למישהו יש רעיון יותר טוב ליישם את זה הוא מוזמן ורצוי שהוא יכתוב.

יש טבלה בשם Sessions, שאוגרת את כל המשתמשים המחוברים, עם העמודות הבאות:
id,
logPass,
user,
pass,
lastAction
בעוגיה \ Session מופיעים id ו- logPass, שני ערכים אקראיים שנוצרים בעת ההתחברות לצורך סימון הרשומה, הסיבה ש- logPass קיים זה רק אמצאי זהירות כדי להקשות על "ניחוש" הרשומה וכך בעצם לפרוץ למערכת.

כל דף שהמשתמש נכנס אליו, מעדכן את הרשומה lastAction לזמן שבוא המשתמש עשה את הפעולה.

בשביל לבדוק מי מחובר, כל מה שאתה צריך לעשות עכשיו, זה לשלוף את כל הרשומות שה- lastAction הוא לא מלפני חמש דקות או משהו בסגנון
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 15-04-2009, 07:14
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 7 שנכתבה על ידי tnadav1 שמתחילה ב "טוב, בגלל שקצת קשה למצוא את..."

בניתי את זה מה אתה אומר

קוד PHP:
 function numberofonlineusers();
{
    
$i 0;
    
$time date('Hi');
    require(
'../../db/db.php');
    
$query 'SELECT * FROM onlineusers';
    
$res mysql_query($query,$link)or die(mysql_error());
    while(
$row mysql_fetch_array($res))
    {
        
$lastaction = (int)$row['lastaction'];
        
$online $lastaction 15 ;
        if(
$time $online)
        {
            
$query1 'UPDATE onlineusers SET lastaction='.$time.' WHERE userid='.$row['userid'];
            
$res1 mysql_query($query1,$link)or die(mysql_error());
        }
        else
        {
            
$query2 'DELETE FROM onlineusers WHERE userid='.$row['userid'];
        }
    }
    
$query3 'SELECT * FROM onlineusers';
    
$res mysql_query($query,$link)or die(mysql_error());
    while(
$row mysql_fetch_array($res))
    {
        
$i++
    }
    
$_SESSION['numberofonlineusers'] = $i;
    
mysql_close();

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 15-04-2009, 10:33
צלמית המשתמש של MatiM
  משתמש זכר MatiM MatiM אינו מחובר  
 
חבר מתאריך: 12.04.06
הודעות: 2,021
שלח הודעה דרך MSN אל MatiM
בתגובה להודעה מספר 8 שנכתבה על ידי tsachibenezra שמתחילה ב "בניתי את זה מה אתה אומר ..."

בדקת האם המשתמש מחובר ב15 הדקות האחרונות, ואם כן עידכנת את הזמן לרגע זה?

במצב כזה, כל עוד יהיו פעילויות תוך 15 דקות, כל מי שהיה מחובר גם לפני יומיים, ישאר מחובר. המצב היחיד שבו ימחקו אנשים מהרשימה זה כאשר לא תהיה פעילות באתר במשך 15 דקות.


דרך פשוטה יותר לעשות את זה - היא באמצעות שאילתות בלבד.

תשתמש בWHERE ותבדוק "כאשר last action גדול מ time - 15" - ותדפיס את השמות של כל המשתמשים.

ובנוסף תשתמש בDELETE ... WHERE "כאשר last action קטן מ time - 15" - ותמחק את כל השורות בתוצאה.


במקום הרבה תנאים, בדיקות ושאילתות, יהיו לך 2 שאילתות.
1 - מקבלים את מי שבטווח המוגדר ובאמצעות while מדפיסים את כל השמות.
2 - מוחקים את כל מי שלא בטווח המוגדר.




בנוגע לעידכון הפעילות האחרונה של המשתמש - את זה אתה אמור לשים בראש כל דף באתר [או - אם יש לך index שממנו זה קורא לכל עמוד - או משהו דומה, אז רק באותו עמוד.] ולא בבדיקת המחוברים.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 15-04-2009, 17:50
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
תיקון הפונקציה
בתגובה להודעה מספר 10 שנכתבה על ידי tsachibenezra שמתחילה ב "אני חושב שזה מה שעשיתי, לא?!?!"

זאת הפונקציה העדכנית

קוד PHP:
 $i 0;
    
$time date('Hi');
    
$userid $_SESSION['userid'];
    require(
'../../db/db.php');
    
$query 'SELECT * FROM onlineusers';
    
$res mysql_query($query,$link)or die(mysql_error());
    while(
$row mysql_fetch_array($res))
    {
        
$lastaction = (int)$row['lastaction'];
        
$online $lastaction 15;
        if(
$userid == $row['userid'])
        {
            if(
$time $online)
            {
                
$query1 'UPDATE onlineusers SET lastaction='.$time.' WHERE userid='.$row['userid'];
                
$res1 mysql_query($query1,$link)or die(mysql_error());
            }
        }
        if(
$time $online)
        {
            
$query2 'DELETE FROM onlineusers WHERE userid='.$row['userid'];
            
$res2 mysql_query($query2,$link)or die(mysql_error());
        }
    }
    
$query3 'SELECT * FROM onlineusers';
    
$res mysql_query($query,$link)or die(mysql_error());
    while(
$row mysql_fetch_array($res))
    {
        
$i++;
    }
    
$_SESSION['numberofonlineusers'] = $i;
    
mysql_close(); 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 16-04-2009, 00:44
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 8 שנכתבה על ידי tsachibenezra שמתחילה ב "בניתי את זה מה אתה אומר ..."

מה שעשית הוא לא טוב.
יש הרבה מה לייעל בסקריפט, ולא נראה שחשבת על זה.
יש הרבה דברים שאין להם היגיון.
המבנה ב-DB הוא לא טוב.
את החישובים עשית ב-PHP, עדיף לעשות אותם על MySQL, תקרא את ה- Reference לפונקציות ב- MySQL

למה את המידע אתה שומר ב- Session?
למה אתה עושה חיבור נפרד רק לחישוב הזה?

השדה lastaction צריך להיות מסוג DATETIME, ככה שאפשר לעשות חישובים ב- MySQL
אני הייתי עושה את זה ככה: (עם כמה התפשרויות בשביל שזה יתאים למה שאתה עושה)

קוד PHP:
 function numberofonlineusers() {
    static 
$numberOfOnlineUsers 0;

    if(!$
$numberOfOnlineUsers) {
        
mysql_query('UPDATE `onlineusers` SET `lastaction` = NOW() WHERE `userid` = '.USER_ID) OR die(mysql_error());
        
mysql_query('DELETE FROM `onlineusers` WHERE `lastaction` < DATE_ADD(NOW(), INTERVAL 15 MINUTES)') OR die(mysql_error());
        
$query mysql_query('SELECT COUNT(*) AS `numRows` FROM `onlineusers`');
        
        
$info mysql_fetch_assoc($query);
        
$numberOfOnlineUsers $info['numRows'];
    }

    return 
$numberOfOnlineUsers;

_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 16-04-2009, 17:51
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 13 שנכתבה על ידי tsachibenezra שמתחילה ב "תודה אני אגיד לך את האמת,..."

ה- if קיים בשביל שכל השאילתות והפעולות האלו ייעשו רק אם התוכנה עוד לא חישבה כמה משתמשים מחוברים.
למה זה טוב? למקרה שאתה רוצה לקרוא לפונקציה כמה פעמים.

שים לב לקבוע USER_ID, בגלל שאני לא ממש יודע איך אתה מביא את המשתנה הזה, שמתי קבוע במקומו.

הפונקציה שלי הרבה יותר קריאה, למרות שלא שמתי הערות בכלל, אפשר לראות מה בעצם מבוצע. הפשטות של הפונקציה מתורגמת גם לביצועים יותר טובים, חוץ מזה שחסכתי לך שאילתה.

אתה יכול להשתמש בפונקציה COUNT ב- SQL, או mysql_num_rows ב- PHP כדי לראות כמה תוצאות קיבלת, הרבה יותר טוב מלעשות לולאה וכל זה..
_____________________________________



נערך לאחרונה ע"י tnadav1 בתאריך 16-04-2009 בשעה 17:52. סיבה: יותר מידי שים לב P:
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 22:53

הדף נוצר ב 0.11 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר