10-09-2007, 15:55
|
|
|
|
חבר מתאריך: 09.04.02
הודעות: 8,000
|
|
בתגובה להודעה מספר 1 שנכתבה על ידי Xpein שמתחילה ב "איך לעשות פונקציה, שאם קיים משתמש נוסף זה ירשום אותו?"
הדפסת הרשימה בדרך כזאת תצרוך הרבה משאבים ותבזבז זמן יקר. לא צריך אפילו להכנס לתורת הסיבוכיות - מספיק לראות שכמות השאילתות תהיה מספר המשתמשים הרשומים + 1
קודם כל, חשוב לתקן את שגיאות שעשית בקוד, גם אם התכנון עצמו לא נכון:
קוד PHP:
require ("config.php");
$id = 0;
$query = "SELECT * FROM `users`"; // למה שם המסד ולא שם הטבלה? תיקנתי את זה בכל השאילתות שבהמשך
$idnum = mysql_num_rows ($query); // שוב אותה טעות - מרכאות בודדות גורמות ל-PHP לא לפענח משתנים או סימנים מיוחדית במחרוזת. אם אתה מתעקש, תוכל להשתמש במרכאות כפולות, אבל הכי טוב שלא תשתמש במרכאות בכלל. תיקנתי את זה בכל הקריאות ל-mysql_query שיש בהמשך
function adduser() {
global $id; // השורה הזאת מאפשרת לך לגשת בתוך הפונקציה למשתנה id, שהוגדר בטווח ההכרה הגלובלי (שאליו לפונקציות אין גישה כברירת מחדל)
$qusers = "SELECT * FROM `users` WHERE ID = '$id'";
$theus = mysql_fetch_array ($qusers);
echo "$theus[=\]";
}
while ($idnum < 100) { // התנאי שבסוגריים אומר ללולאה לרוץ על עוד הוא נכון, ולא כל עוד הוא שגוי - ולכן שיניתי את סימן ה-"גדול מ" ל-"קטן מ". שים לב לזה בהמשך
$id++; // שכחת כאן נקודה פסיק... הוספתי
adduser(); // גם כאן שכחת
}
אגב, אם קשה לקרוא את ההערות שלי בגלל היישור, פשוט תעתיק אותן לתוכנת עריכת טקסט ותשנה את היישור למימין לשמאל.
ועכשיו, אחרי שקראת והפנמת, הנה הקוד המתוקן. הוא מבוסס על שליפת כל השורות בטבלה בשאילתה אחת, ולאחר מכן מעבר על השורות בלולאת while והדפסתן אחת-אחת.
קוד PHP:
require ('config.php');
$userlistQuery = mysql_query('SELECT * FROM `users`');
// שים לב שהסרתי את כל הפונקציה שהייתה כאן
while ($user = mysql_fetch_assoc($userlistQuery))
{
echo $user['nickname'] . '<br />';
}
אה, עוד משהו קטן - שיניתי את כל המרכאות הכפולות למרכאות בודדות. זה הרבה יותר יעיל, כי כמו שכתבתי קודם, PHP מחפשת שמות משתנים וסימנים מיוחדים במחרוזות שתחומות במרכאות כפולות, מה שצורך כמובן זמן מעבד...
אני מקווה שהכל ברור. אם לא, אתה יודע מה לעשות... פשוט לשאול
|