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

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



  #1  
ישן 04-03-2006, 14:27
  Rs3k Rs3k אינו מחובר  
 
חבר מתאריך: 17.05.04
הודעות: 1,454
שלח הודעה דרך ICQ אל Rs3k
תנאי שלא אמור להתקיים, מתקיים בכל זאת - למה ?

קוד PHP:
<?
    /* CommonHeader.inc */
 session_start();
    $restricted = 1;
    $admin = 0;
    $_SESSION['user'] = 'qa';
    $_SESSION['pass'] = 'qa';
 if($restricted){
  if(!isset($_SESSION['user']) || !isset($_SESSION['pass'])) {
   require "includes/eror.inc";
   die();
 }
      $info['user'] = $_SESSION['user'];
      $info['pass']  = $_SESSION['pass'];
  
  if($admin && $info['pass'] != 'query' || $info['user'] != 'query') {
   require "includes/eror.inc";
   die();
 }
}
echo 'bla bla';
?>


כפי שאתם רואים הגדרתי את המשתנה admin$ כ-false ומשום מה, זה עדיין עושה את התנאי השני...
מה שזה כרגע עושה זה עושה require ל eror.inc ו"מת" למרות שהוא אמור לרשום "bla bla"..
למישהו יש רעיון מה הסיבה?

נ.ב - אני די משוכנע שהבעיה היא בתנאי השני.
_____________________________________
EVERYTHING SHOULD BE MADE AS SIMPLE AS POSSIBLE, BUT NOT ONE BIT SIMPLER
ALBERT EINSTEIN


נערך לאחרונה ע"י Rs3k בתאריך 04-03-2006 בשעה 14:33.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 04-03-2006, 15:37
  Fixxxer Fixxxer אינו מחובר  
 
חבר מתאריך: 21.09.02
הודעות: 408
בתגובה להודעה מספר 1 שנכתבה על ידי Rs3k שמתחילה ב "תנאי שלא אמור להתקיים, מתקיים בכל זאת - למה ?"

יש דרך דיי פשוטה לבדוק איזה תנאי מוציא אותך. תכתוב בתוך כל תנאי, לפני שאתה הורג את הסקריפט, הוצאת פלט עם פלט שונה ולפי זה תוכל לזהות איפה הוא נתקע.
בכל מקרה, בנוגע לשאלה שלך, הלוגיקה במקרה הזה היא פשוטה. תחשוב על and ככפל וכל or כחיבור, ועכשיו תראה מה עשית:
קוד PHP:
 if($admin && $info['pass'] != 'query' || $info['user'] != 'query') { 

במידה ו $admin מכיל את הערך false, בדומה לכפל, הוא אוטומטית מחזיר 0 לגבי כל תנאי אחר שהוא בקשר and איתו. אך התנאי:
קוד PHP:
 $info['user'] != 'query' 

הוא בקשר של or, ולכן אם הוא מחזיר את הערך true נוצר לך מצב של:
קוד PHP:
 if (false || true) { 

הפיתרון? להשתמש בסוגריים, בדיוק כמו בחשבון, בכדי לקבוע את הגבולות שלך. לדוגמא, במקרה הספציפי הזה:
קוד PHP:
 if($admin && ($info['pass'] != 'query' || $info['user'] != 'query')) { 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.09 שניות עם 12 שאילתות

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

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