צריך עזרה בפונקציה ב PHP

בזיליקו

New member
צריך עזרה בפונקציה ב PHP

שלום לכולם! אני מנסה להכניס מודול למערכת הPHPNUKE6.5 שלי , יש לי בעיה עם פונקציה מסוימת. כעקרון אם אתה מתחבר כמשתמש GOD - אז אתה יכול לערוך עוד מספר דברים במודול , רק שאני לא מצליח , למרות שאני ניכנס בתור המנהל. הפונקציה היא זו:(פונקציה במודול שלפי דעתי אחראית לדעת אם אתה GOD או לא)
$sql="select * from ${user_prefix}_users"; $results=sql_query($sql,$dbi); $row = sql_fetch_array($results,$dbi); $row = sql_fetch_array($results,$dbi); if ($Version_Num=="6.5") { $admin_name=$row[username]; } else { $admin_name=$row[uname]; };​
לפי דעתי הוא לא לוקח את השם של המנהל כי השם של המנהל נמצא ב user_prefix}_autors- ולא ב USERS , השאלה , אז מה כן הוא מושך מה USERS? איזה שם משתמש באיזו שורה? יש לי כרגע שני משתמשים עם id - 2 , 3 יכול להיות שזאת הבעיה?שהוא מחפש את id 1? ועוד שאלה , איך בכל זאת אפשר לעשות פונקציה שתאפשר עריכה במודול ,שאני נכנס בתור מנהל , או שאני ניכנס בתור אחד מהUSERים בID 2 או 3 תודה.
 

shanor

New member
מממ...

לפי התיאור שלך ולפי מה שנתת כאן, דיי קשה לדעת מה בדיוק קורה שם... בטח שלא כאשר אין את הקוד המלא, את הדברים שמוכלים בתוך מאגר הנתונים שלך וכו'. בגדול מה שאני הייתי עושה כדי לבדוק מה בדיוק יוצא בשאילתה הוא: בשורה הראשונה שכתבת, השאילתה נכנסת לתוך משתנה שנקרא sql$, בשורה הבאה תכניס פקודת ;echo $sql ותבדוק מה בדיוק השאילתה שלך. קח את השאילתה לתוך MYSQL ותריץ אותה שם על מאגר הנתונים שלך ותבדוק מה אתה מקבל. שים רק לב לדבר אחד שלי אישית הוא לא מובן, השאילתה מוציאה את התוצאות אבל לפי הקוד שכתבת כאן אתה תמיד קורא את התוצאה הראשונה ואחר כך קורא את התוצאה השניה (ובהמשך הסקריפט שלך אתה מתייחס רק לתוצאה השניה שקיבלת), דבר שמעורר מספר שאלות בנוגע למצבים שונים שבהם אתה מקבל 0 תוצאות, תוצאה 1 או יותר מ-2 תוצאות... שוב אני אומר, אלו רק תהיות לגבי מצבים שונים, שהרי לא כתבת מה בדיוק מבנה הנתונים שלך ומה בדיוק הם מכילים, אז מאוד ייתכן ואף דיי סביר להניח שככה זה אמור להיות, אבל בכל זאת לדעתי, שווה בדיקה, משום שיתכן שכפי שציינת החיפוש הוא חיפוש של ID =1 ובמקרה שלך אין כזה.... בכל אופן, מקווה שנתתי כאן קצה חוט להתחיל ממנו. בברכת הצלחה, שנאור.
 

בזיליקו

New member
תודה והמשך הסבר.

תודה על התגובה , ראשית עלי לציין שאיני יודע לתכנת בשפת PHP , כל הידע שלי הוא מתוך הגיון פשוט וידע קל ב C. אני מצרף את כל הקוד:(בקובץ מצורף) אוסיף ואומר , לפי דעתי הוא קורא את השורות מ $sql="select * from ${user_prefix}_users"; בטבלה הזה (${user_prefix}_users" - שאצלי הוא נקרא nuke_users , נמצאים היוזרים שלי , בטור הראשון נמצא ה ID אחר כך השם , הסיסמא ועוד פרטים מסוימים. האם הוא מחפש משם או לשם הוא עושה את השאילתא? שם המנהל רשום בטבלה אחרת כמו שאמרתי בהודעה הקודמת . איך אפשר לשנות את הפונקציה שתקרא רק את השם השני , (שורה 2)ID2. תודה.
 

shanor

New member
מממ...

האמת היא שאני לא מכיר מספיק את המערכת עצמה כדי לדעת איך היא פועלת, אבל כמו שאמרתי קודם, אתה צריך לבדוק מה בדיוק השאילתה שמבוצעת כאן ומה התוצאות שהיא מוציאה. על פי מה שאני מבין הערך שנמצא ב- USER_PREFIX הוא NUKE כאשר NUKE_USERS היא טבלת המשתמשים שלך אבל לא אותה אתה רוצה, אלא טבלה אחרת... אז אם כך למה שלא תכתוב שאילתה נוספת או תחליף את השאילתה הקיימת באחת שתבוצע על הטבלה של המנהלים? אם אתה רוצה לבצע משהו על הטבלה החדשה, אתה כבר יודע (כנראה) שהמשתמש הוא בעל הרשאה/הררכיה/או איך שתקרא לזה, של מנהל, אם כך אז ברגע שאתה יודע שהמשתמש שלך הוא בעל הרשאת מנהל, למה לא לתת ל- USER_PREFIX את הערך המתאים של טבלת המנהלים...? אני דיי יורה כאן באפלה בניסיון אולי לפגוע במשהו, לא בטוח שאני מצליח.... המלצה שלי, גש לאתר של PHPNUKE ותנסה לברר שם האם אפשר/כדאי לעשות דבר כזה. בהצלחה שנאור.
 

בזיליקו

New member
מממממ....שוב;)

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

shanor

New member
מממ...

הפונקציה שכתבת בהודעה הראשונה היא דיי בסיסית ולא עושה ממש הרבה אבל הנה:
$sql="select * from ${user_prefix}_users";​
מכניס את השאילתה לתוך המשתנה של sql$, כאשר השאילתה מתבעת על הטבלה שנקראת AAA_users כאשר AAA הוא הערך שנמצא בתוך המשתנה user_prefix$.
results=sql_query($sql,$dbi);​
ביצוע השאילתה והכנסת התוצאות לתוך מיקום שמיועד לכך בזיכרון כאשר בתוך result$ מאכסן בתוכו את הפוינטר שמצביע למיקום של התוצאות.
$row = sql_fetch_array($results,$dbi);​
שתי שורות זהות, שלוקחות את השורה הראשונה (ואחר כך השניה) ומכניסה את התוצאות לתוך מערך row$.
if ($Version_Num=="6.5")​
אם הערך של Version_Num הוא 6.5 (שים לב - לא הערך המספרי 6.5 אלא הערך המחרוזתי (STRING) הוא "6.5". אם התנאי מתקיים:
$admin_name=$row[username];​
תכניס את הערך שנמצא ב- [row[username$ (שהתקבל מהתוצאה של השאילתה) לתוך admin_name$. אם התנאי לא מתקיים:
$admin_name=$row[uname];​
תכניס לתוך אותו משתנה את [row[uname$. זהו. עכשיו שים לב שבשני המקומות של התנאי אם הוא מתקיים לוקחים את USERNAME ואם הוא לא מתקיים לוקחים את UNAME שהם שני דברים שונים בתוך המערך של ROW. שני הדברים USERNAME ו-UNAME אמורים להיות תאים בתוצאה שהתקבלה מהשאילתה. מקווה שהייתי ברור מספיק. בברכת הצלחה, שנאור.
 

miok

New member
איך ה post_nuck ?

לי יש אתר שעובד על geeklog בזמנו גיירתי את הגרסה הישנה שלו ועכשיו אני חושב לעשות עדכון שיתאים לגרסה החדשה .. מעניין אותי לדעת איך הpost_nuck, בזמנו התעניינתי במערכת הזו.
 
למעלה