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

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



  #1  
ישן 06-12-2007, 23:07
צלמית המשתמש של netaneldj
  netaneldj netaneldj אינו מחובר  
 
חבר מתאריך: 01.05.06
הודעות: 7,861
Facebook profile
לולאה שמתעקשת לזכור את סיום שליפתה הקודם.

אני מציג קטגוריות, ובתוך כל קטגוריה פורום.

אני שולף את -כל- הפורומים ב SQL ובעזרת PHP מקטלג אותם לפי ה assign שלהם לכל קטגוריית האם שלהם.

המבנה הוא כזה:
קוד PHP:
 $query1 mysql_query("בחר את כל הקטגוריות");
$query2 mysql_query("בחר את כל הפורומים");[/left]
[
left]while($category mysql_fetch_assoc($query1))
{
  while(
$forum mysql_fetch_assoc($query2))
  {
   
  }

נגיד ויש לי:
  • קטגוריה1:
  • פורום1
  • פורום2
  • פורום3
.
  • קטגוריה2:
  • פורום4
  • פורום5
הלולאה החיצונית רצה פעמיים כמספר הקטגוריות, והפנימית שולפת את כל הפורומים (5) ובעזרת PHP אני מחליט אם הפורום שייך לקטגוריה או לא.

אבל, וזה אבל גדול כלכך שאני יושב עליו כבר יום שלם

יוצא שהלולאה הפנימית רצה 5 פעמים * 2 קטגוריות (כמו שכבר אמרתי, אתן ל PHP לעשות את הסלקציה).

מסיבה שלא ברורה לי, אחרי שהלולאה הפנימית רצה 5 פעמים, PHP זוכר שהיא שלפה את כל הפורומים שיש, בריצה השניה שלה שאמורה שוב לשלוף 5 פורומים, היא "נגמרת" ולא רצה יותר בכלל.

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

ובניסוח אחר: "אחרי שהלולאה הפנימית שולפת את כל הפורומים, אפילו אם מריצים את הלולאה שוב, היא כבר לא שולפת יותר כלום"

למה זה בכלל קורה? יתכן סיכוי שזהו באג בPHP?

נערך לאחרונה ע"י netaneldj בתאריך 06-12-2007 בשעה 23:09.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 07-12-2007, 12:05
  GreenBerret GreenBerret אינו מחובר  
 
חבר מתאריך: 13.12.05
הודעות: 1,963
בתגובה להודעה מספר 1 שנכתבה על ידי netaneldj שמתחילה ב "לולאה שמתעקשת לזכור את סיום שליפתה הקודם."

זה לא באג בכלל, תלמד קצת על מה שנקרא mysql resource
בקצרה, זהו מצביע. מה שקורה כשאתה רושם את אחת מהפקודות mysql_fetch, לרוב הוא יקדם את המשאב (resource) להצביע על השורה הבאה.

אז אחרי ריצה אחת של הלולאה (הפנימית), זהו, הוא בסוף.
אתה צריך לאפס את המשאב שיצביע בחזרה על השורה הראשונה, ז"א לאחר שהלולאה הפנימית מסתיימת אתה צריך להחזיר את המשאב הפנימי שיסתכל על השורה הראשונה בחזרה.
קוד PHP:
 mysql_data_seek($query20


בגדול הקוד שלך צריך להראות כך:
קוד PHP:
 $query1 mysql_query("בחר את כל הקטגוריות");
$query2 mysql_query("בחר את כל הפורומים");
while(
$category mysql_fetch_assoc($query1))
{
  while(
$forum mysql_fetch_assoc($query2))
  {
 
// Ifs and prints  
  
}
mysql_data_seek($query20);




אני לא יודע כמה קטגוריות וכמה פורומים יש לך, אבל זו לא שיטה טובה להציג אותם.
אני ממליץ לך להשתמש בשאילתה אחת עם JOIN כלשהו.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 07-12-2007, 15:23
  GreenBerret GreenBerret אינו מחובר  
 
חבר מתאריך: 13.12.05
הודעות: 1,963
בתגובה להודעה מספר 8 שנכתבה על ידי netaneldj שמתחילה ב "בגלל שאני לא יודע איך פונקציות הfetch פועלות, אני לא סגור על מה שאני עומד להגיד"

אני תמיד מעדיף להשתמש בכמה שפחות שאילתות, ככה שהדרך הראשונה נראית לי נכונה יותר.
למרות שאפשר לעשות משהו כזה:
קוד PHP:
 $result mysql_query('SELECT Forums.* AS Forum, Categories.* AS Category FROM Forums LEFT JOIN Categories ON Categories.id = Forums.category_id ORDER BY Categories.order, Forums.order');
$old_category 0// Remembers the last category
while ($line mysql_fetch_array($result)) {
     if (
$old_category != $line['Category.id']) {
         if (
$old_category != 0) echo '</ul>'// Closes the previous category
        
echo "<h3>{$line['Category.name']}</h3><ul>"// Starts a new category
    
}
    echo 
"<li class=\"forum\">{$line['Forum.name']}</li>"// Prints the forum line
    
$old_category $line['Category.id'];
}
echo 
"</ul>"// Closes the last list 

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

נערך לאחרונה ע"י GreenBerret בתאריך 07-12-2007 בשעה 15:25.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

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

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

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