הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] בעיה בפונקציה לניהול פרטי משתמש (https://hosts.co.il/forums/showthread.php?t=41166)

ShoQER 08-03-07 19:34

[PHP] בעיה בפונקציה לניהול פרטי משתמש
 
שלום.

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

עכשיו הוספתי חלק אשר בודק האם המשתמש מחובר.

החלק הזה בודק אם המשתמש מופיע כמחובר במסד + האם הזמן שהוא יכול להיות מחובר לא עבר את המקסימום שהוקצב לו.

(בהיתחברות אני לוקח את הזמן הנוכחי (בעזרת TIME) ומוסיף לזה מספר מסויים של שניות ומכניס למסד.
לאחר מכן בבדיקה עצמה אני בודק אם הזמן הנוכחי לא גדול מהזמן שהוקצב לו)

עכשיו הכל עבד עד שעשיתי משהו...שלצערי אני לא יודע מה זה היה והאופציה שהוספתי תמיד מחזירה לי ערך FALSE.

מה שגורם לכך שהמשתמש מתנתק.

הפונקציה במלואה:
PHP קוד:

function userinf($need 0$do 0) {
 
$IP $_SERVER['REMOTE_ADDR'];
 
$where "`srLogged`='1' AND `srIP`='{$IP}'";
 
$select db::select('users'$whereFALSE1);
 
$count db::count($select);
 
$row db::fetch($select);
 
$ctime time();
 
$utime $row['srLogTime'];
 switch (
$need) {
  case 
0:
   if((
$count == 1) AND ($ctime $utime)) {
    return 
TRUE;
   } else {
    
db::update('users',"srLogged#0,srLocation#0,srIP#0,srLogTime#0","srIP={$IP}");
    return 
FALSE;
   }
  case 
1:
   return 
$row['srUName'];
   break;
  case 
2:
   return 
$row['srFName'].' '.$row['srLName'];
   break;
  case 
3:
   return 
$row['srID'];
   break;
  case 
4:
   if(
$do) {
    
$uid userinf(3);
    
db::update('users'"srLocation#{$do}""srID={$uid}");
   } else {
    
skin::error('Missing arrgument for "userinf()" function ($do)');
   }
   break;
  default:
   
skin::error('Invalid argument for "userinf()" function ($need)');
 }


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

if(userinf()) {
echo 
'logged';


אשמך מאוד אם תעזרו לי עם הבעיה

עריכה:
בדקתי מספר פעמיים שהזמן שהוקצב למשתמש אכן גדול מהזמן הנוכחי (בשניות לפי TIME)...אפילו שמתי שם 999999999999999999999999 (שזה בהרבה יותר גדול מהזמן הנוכחי)
אך עדין זה מחזיר לי ערך של שקר =/

WebProject 08-03-07 19:50

זה לא הגיוני בכלל

PHP קוד:

$ctime $utime 

את זה כתבת בתנאי, תחשוב הגיוני, אם ה$ctime, זה הזמן הנוכחי, איך הוא יכול להיות קטן מהזמן שבו התחבר המשתמש? הרי השעון סופר 1, 2, 3, לא 3,2,1 :)

מקווה שהבנת

-טל

ShoQER 08-03-07 19:58

חחח אני הבנתי...פשוט אתה לא הבנתה את ההסבר שלי...
המשתמש מתחבר כאשר הזמן שהיה אז היה:
176974234 (סתם משהו)
אני מוסיף לזה 3600 נגיד ואז מכניס למסד.
כלומר מה שנכנס למסד זה:
176977834

לכן זה הגיוני שהזמן שהוכנס למסד יוכל להיות גדול יותר מהזמן הנוכחי...ככה אני פשוט בודק כמה זמן המשתמש מחובר והאם הוא עבר את מגבלת הזמן האפשרית.

RS324 08-03-07 19:59

בנוסף דרך מאד גרועה לשימוש בקלאסים תעשה אינסטנאס לקלאס ותייבא אותו לפונקציות בעזרת GLOBAL

ShoQER 08-03-07 20:01

ציטוט:

נכתב במקור על ידי RS324 (פרסם 435363)
בנוסף דרך מאד גרועה לשימוש בקלאסים תעשה אינסטנאס לקלאס ותייבא אותו לפונקציות בעזרת GLOBAL

לא הבנתי את כוונתך

RS324 08-03-07 20:09

PHP קוד:

$db = new db();

$db->query("bla bla bla");


function 
getuserinfo($userid 0)
{
    global 
$db;
    if (
$userid 0)
    {
        return 
$db->query_fetch("SELECT * FROM users WHERE userid='$userid'");
    }
    else 
    {
        return 
false;
    }



ShoQER 08-03-07 20:12

ציטוט:

נכתב במקור על ידי RS324 (פרסם 435374)
PHP קוד:

$db = new db();

$db->query("bla bla bla");


function 
getuserinfo($userid 0)
{
    global 
$db;
    if (
$userid 0)
    {
        return 
$db->query_fetch("SELECT * FROM users WHERE userid='$userid'");
    }
    else 
    {
        return 
false;
    }



מה זה משנה אם אני כותב: db::query או $db->query ?

RS324 08-03-07 20:24

ציטוט:

נכתב במקור על ידי Dr. Bleff (פרסם 435376)
מה זה משנה אם אני כותב: db::query או $db->query ?

מבחינת השגיאה שלך זה לא משנה הרבה

מבחינת נכונות ותמיכה מורחבת באובייקטים זה הדרך הנכונה לעבוד
ומומלץ שתתרגל לעבוד כך

:: שייך לגרסאות הישנות של PHP שם התמיכה באובייקטים לא הייתה רחבה כמו היום.

ShoQER 08-03-07 20:29

ציטוט:

נכתב במקור על ידי RS324 (פרסם 435392)
מבחינת השגיאה שלך זה לא משנה הרבה

מבחינת נכונות ותמיכה מורחבת באובייקטים זה הדרך הנכונה לעבוד
ומומלץ שתתרגל לעבוד כך

:: שייך לגרסאות הישנות של PHP שם התמיכה באובייקטים לא הייתה רחבה כמו היום.

תודה רבה...חידשתה לי :)

אני ישמח אם משהו יעזור לי עם הבעיה המרכזית

ShoQER 08-03-07 20:55

PHP יכול להיות ממש מעצבן לפעמים לא כך?

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

טוב בכל מקרה שחכתי סך הכל לשים break בסופו של הSWITCH הראשון (ההוא שמבצע את הפעולה של הבדיקה)...כנראה זה גרם בסופו של דבר להחזיר ערך של שקר...

אפשרי לנעול.


כל הזמנים הם GMT +2. הזמן כעת הוא 17:56.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ