כמה שאלות ב PHP ו MYSQL אני חדשה בתחום - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

כמה שאלות ב PHP ו MYSQL אני חדשה בתחום


aerosmith

Recommended Posts

שלום.

אז ככה יש לי מספר שאלות ב PHP ו MYSQL מאחר שאני חדשה בתחום אשמח אם תעזרו לי בכמה שיותר שאלות, אחרי לימוד אלו השאלות שנותרו לי, אני כרגע עוברת ומנסה למצוא פתרונות ויעזור מאוד אם את חלקם תתנו לי פה.

אז ככה:

1. הפונקצייה mysql_connect מחברת אותי לשרת, ואז אני יכול לבחור database בעזרת mysql_select_db. נגיד ויש לי מסד נתונים של רשימת משתמשים וססמאות. ואז אני עושה טופס של login.php, יש פה איזשהי בעיה מבחינתי, כי כשאני עושה את ההתחברות ל mysql_connect, המשתמש יכול לדעת את הסיסמא של ההתחברות לשרת הראשי לא? זה נראה לי ממש בעייתי מבחינת אז השאלה שלי היא איך עושים שהמשתמש לא יראה מה הסיסמא בהתחברות והאם זה הכרחי לעשות את זה בצורה שראיתי בכל המדריכים... שמגדירים $con לחיבור..

2. אני רוצה שהתחברות של משתמש דרך login.php תוביל למצב שאני יודעת מי הוא המשתמש ואז אני אוכל להציג דברים שרק לו יש גישה אליהם כמו המייל שלו השם שלו וכו'...

3. בניתי קובץ login.php והסיסמאות שיש לי של המשתמשים ב database הם בשיטת MD5.. כשאני מנסה להתחבר עם אחד המשתמשים, אם אני לא רושמת את הקוד ב LOGIN כשהוא מקודד זה לא עובד, זאת אומרת שאם הקוד שלי הוא mariamaria123 זה לא יעבוד אלא אם אני אשים את הקוד הבא לדוגמא eeeb29fffce4419 .... איך אני פותרת את זה?

4. בשיטת POST ו GET , אם אני רוצה שהנתונים לא יעבירו לדך אחר אלא ישלחו לדף עצמו, בלי שגיאות שלא הגדרתי משתנים וכו', למשל כשהמשתמש שולח את השם שלו ופרטים שלו דרך טופס, הם יודפסו דרף הנוכחי וה ACTION של ה FORM לא יהיה לקובץ PHP חיצוני..

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

6. מה ההבדלים בין PRINT ל ECHO..... ברוב המדריכים האחרונים שקראתי משתמשים ב ECHO אבל היו גם כאלה מקומות שראיתי PRINT , אז למה משמש כל אחד?

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

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

קישור לתוכן
שתף באתרים אחרים

1. הקוד שנמצא בתוך קובץ php לא חשוף למשתמש, אלא יושב רק בתוך השרת. המשתמש רואה רק את ה-html הסופי שנשלח אליו. אם אתה רוצה להיות בטוחה, את יכולה להיכנס לדף מהדפדפן שלך ואז לעשות view source, ותראי שאת לא רואה בשום מקום את הסיסמה (או את הקריאה ל-mysql_connect). אם את כן רואה, זה אומר שאת לא כותבת php בצורה נכונה.

2. בשביל זה עובדים עם session:

http://php.eitan.ac.il/main.php?id=00169

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

3. תוכלי להעלות קוד כדי שיהיה קצת יותר ברור?

4. אפשר לעשות שה-action של הטופס יפנה לדף הנוכחי... לא כל כך ברור לי מה את רוצה לעשות. אם את רוצה שהמידע יופיע בטופס בלי שהדף יטען מחדש אז אפשר לעשות את זה באמצעות javascript (ספציפית עם ajax) אבל זה נושא קצת יותר מתקדם.

5. זה כבר תחום שלם... בראש ובראשונה, את רוצה שכל גישה ל-database תתבצע באמצעות prepared statements על מנת למנוע sql injection. יש כאן דוגמאות בסיסיות:

http://docs.php.net/pdo.prepared-statements

חוץ מזה יש עוד הרבה דברים שצריך להתייחס אליהם - בראש ובראשונה, אם את מדפיסה מחרוזת שהגיעה מהמשתמש לתוך הדף, אז את צריכה לדאוג לקודד אותה ל-html באמצעות הפונקציה htmlspecialchars. בכל מקרה קצת קשה להסביר את זה על רגל אחת, כי זה ממש תחום שלם.

6. אין לי מושג :) אבל בגוגל מצאתי את זה:

http://stackoverflow.com/questions/234241/how-are-echo-and-print-different-in-php

7. אם מדובר בדף php אז זה פשוט - תבדקי את פרטי ה-session (ראי סעיף 2). אם לפי ה-session המשתמש עשה לוגין אז תציגי לו דף תקני, אחרת תציגי לו הודעת שגיאה. אם זה לא דף php אז זה קצת יותר מסורבל, אבל זה עדיין אפשרי.

קישור לתוכן
שתף באתרים אחרים

1. הקוד שנמצא בתוך קובץ php לא חשוף למשתמש, אלא יושב רק בתוך השרת. המשתמש רואה רק את ה-html הסופי שנשלח אליו. אם אתה רוצה להיות בטוחה, את יכולה להיכנס לדף מהדפדפן שלך ואז לעשות view source, ותראי שאת לא רואה בשום מקום את הסיסמה (או את הקריאה ל-mysql_connect). אם את כן רואה, זה אומר שאת לא כותבת php בצורה נכונה.

2. בשביל זה עובדים עם session:

http://php.eitan.ac.il/main.php?id=00169

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

3. תוכלי להעלות קוד כדי שיהיה קצת יותר ברור?

4. אפשר לעשות שה-action של הטופס יפנה לדף הנוכחי... לא כל כך ברור לי מה את רוצה לעשות. אם את רוצה שהמידע יופיע בטופס בלי שהדף יטען מחדש אז אפשר לעשות את זה באמצעות javascript (ספציפית עם ajax) אבל זה נושא קצת יותר מתקדם.

5. זה כבר תחום שלם... בראש ובראשונה, את רוצה שכל גישה ל-database תתבצע באמצעות prepared statements על מנת למנוע sql injection. יש כאן דוגמאות בסיסיות:

http://docs.php.net/pdo.prepared-statements

חוץ מזה יש עוד הרבה דברים שצריך להתייחס אליהם - בראש ובראשונה, אם את מדפיסה מחרוזת שהגיעה מהמשתמש לתוך הדף, אז את צריכה לדאוג לקודד אותה ל-html באמצעות הפונקציה htmlspecialchars. בכל מקרה קצת קשה להסביר את זה על רגל אחת, כי זה ממש תחום שלם.

6. אין לי מושג :) אבל בגוגל מצאתי את זה:

http://stackoverflow.com/questions/234241/how-are-echo-and-print-different-in-php

7. אם מדובר בדף php אז זה פשוט - תבדקי את פרטי ה-session (ראי סעיף 2). אם לפי ה-session המשתמש עשה לוגין אז תציגי לו דף תקני, אחרת תציגי לו הודעת שגיאה. אם זה לא דף php אז זה קצת יותר מסורבל, אבל זה עדיין אפשרי.

שניצל!!

תודה רבה :)

עזרת לי מאוד, אני עכשיו אקרא ואחקור לעומק את מה שרשמת..

בקשר לסעיף 7.

אני מתכוונת נגיד שיש לי דף שנקרא onlyregistered.php ובו יהיו דברים "סודיים" שרק משתמשים רשומים יכולים לראות. עכשיו אם אני בתור בנאדם שיש לו קצת יותר ידע, מריצה כל מיני דברים ויכולה לראות את כל שמות הקבצים שיש בשרת, אז אני מכניסה בכתובת ה url את ה localhost/onlyregistered.php ואז אני אראה את הדף בלי שאני רשומה לאתר..... איזה פונקציה או סקריפט משתמשים במקרה כזה?

קישור לתוכן
שתף באתרים אחרים

אין צורך לצטט את ההודעה האחרונה בת'רד, פשוט תלחצי על הוספת תגובה בשביל להגיב.

לגבי 7, כמו שאמרתי: בזמן הלוגין את שומרת ב-session פרטים על המשתמש - בין השאר, אם יש לו הרשאות לראות את הדף onlyregistered. בדף onlyregistered את שולפת את הפרטים מה-session ובודקת אם יש למשתמש את ההשראה. אם כן אז סבבה, את מציגה את התוכן של הדף. אם לא, אז את מציגה לו הודעת שגיאה ו/או עושה לו redirect לדף אחר (לדוגמה לדף ה-login). יש פה כמה דוגמאות (ספציפית תסתכלי על שתי הדוגמאות האחרונות):

http://www.wmtips.com/php/simple-ways-restrict-access-webpages-using.htm

קישור לתוכן
שתף באתרים אחרים

צודקת. אבל אין בעיה לשכתב את הפונקציה CheckSession ככה שכן תשתמש בו... שלחתי לך לינק אחר שמסביר איך משתמשים ב-session.

הנה עוד דוגמה פשוטה:

http://coredogs.com/lesson/php-sessions#The_menu

שימי לב מה עושים שם עם המשתנה user_name (למרות שעדיף להשתמש ב-isset על פני להשוות אותו למחרוזת ריקה).

קישור לתוכן
שתף באתרים אחרים

אוקיי אני עכשיו עובדת על זה קצת מנסה להבין את כל העסק של ה SESSIONS..

זה בכלל מומלץ להשתמש ב SESSIONS?

פורומים כמו HWZONE משתמשים ב SESSIONS? או שהכל עובד דרך ה DATABASE... לא הבנתי כל כך, קראתי באיזה מקום מקודם שאפשר לא להשתמש ב DATABASE בשביל השם משתמש והסיסמא כדי לחסוך זמן ומהירות.... אלא עם SESSIONS זה נראה לי לא הגיוני!

והאם אני צריכה להבין ב COOKIES אם אני רוצה להשתמש ב SESSIONS?

קישור לתוכן
שתף באתרים אחרים

ודאי שפורומים כמו hwzone משתמשים ב-session, וגם ב-cookies. זה הדרך של האתר לזכור מי את (יתרה מכך, session בד"כ מבוסס על cookies).

קודם כל אני ממליץ לך לקרוא בויקיפדיה על עוגיות.

session ב-php עובד באופן הבא: כשאת יוצרת session בפעם הראשונה, השרת יוצר מחרוזת אקראית שנקראת session id (מזהה השיחה). את המחרוזת הזו השרת שולח ללקוח, בדרך כלל באמצעות עוגיה. בנוסף, השרת שומר בזכרון רשימה של כל מזהי השיחה, ולכל מזהה כזה הוא שומר את המידע הרלוונטי לאותו לקוח. לדוגמה, אם עשיתי:

$_SESSION['name'] = 'yoav';

אז עכשיו במידע הרלוונטי למזהה השיחה של הלקוח שאני כרגע מדבר איתו ישמר הערך "yoav" תחת המפתח "name".

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

ה-session הוא מהיר, אבל ארעי - מתישהו המידע הזה כנראה ימחק. לעומת זאת, ה-database הוא איטי יותר, אבל קבוע - כל עוד לא ידאגו למחוק אותו, המידע לא ימחק.

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

קישור לתוכן
שתף באתרים אחרים

כן, בעקרון. זה לא אוטומטי לחלוטין (השרת לא יכול להחליט מה קורה על המחשב של המשתמש), אלא שכשאשר את יוצרת session, השרת יוצר את אותו session id ושולח אותו בתשובה לבקשת ה-http, באמצעות Set-Cookie. בכל אפשר להגדיר שלא לקבל עוגיות בכלל, ובמקרה כזה הדפדפן לא יעשה כלום עם אותה עוגיה ואז ה-session לא יעבוד (לכן כמובן לא נהוג להפעיל את האפשרות הזו). יש כל מיני דרכים אחרות לנהל סשנים (לדוגמה, ב-asp.net יש משהו שנקרא cookieless mode שדואג לשמור את ה-session id כחלק מהכתובת במקום באמצעות עוגיה).

קישור לתוכן
שתף באתרים אחרים

זאת אומרת הפונקצייה start_session() פותחת לבד בד"כ עוגייה?

ועוד משהו, אם נגיד המשתמש בוחר בדפדפן שלו לא לקבל עוגיות כלל, הרי שהוא בחיים לא יוכל לראות דף מדובר, למשל onlyregistered.php

ואז הוא לעולם לא יוכל לראות את התוכן, אז מה הפיתרון?

קישור לתוכן
שתף באתרים אחרים

כן.

כמו שאמרתי, הפתרון הוא לעבוד ב-cookieless mode. ב-asp.net זה מובנה, ב-php יש כל מיני שיטות לעשות את זה אבל זה יותר מסורבל (את מוזמנת לחפש על זה בגוגל). אבל כיום 99% מהאתרים שדורשים הרשמה עובדים עם עוגיות, ואם המשתמש כיבה את העוגיות בדפדפן אז אכן אחוז גדול מהאתרים לא יעבוד בצורה טובה (בדיוק כמו שאם המשתמש מכבה javascript אז הרבה אתרים לא יעבדו).

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...