עבור לתוכן

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

Featured Replies

פורסם

שלום.

אז ככה יש לי מספר שאלות ב 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

פורסם
  • מחבר

תודה, אבל בדף בלינק שצירפת הם לא משתמשים ב SESSION...?..

פורסם

צודקת. אבל אין בעיה לשכתב את הפונקציה 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.

פורסם
  • מחבר

אוקיי שניצל תודה רבה! קראתי על COOKIES בויקיפדיה, וקראתי את מה שרשמת ודי הבנתי.

משהו נוסף -

1. כשאני יוצרת SESSION הוא פותח COOKIE על המחשב של המשתמש באופן אוטומטי?

פורסם

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

פורסם
  • מחבר

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

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

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

פורסם

כן.

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

ארכיון

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

דיונים חדשים