הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] מערכת התחברות (https://hosts.co.il/forums/showthread.php?t=28334)

ofek_golan 08-08-06 12:49

[PHP] מערכת התחברות
 
או קי אני עשיתי במסד 3 תאים
username
password
level

עשיתי שיש 3 רמות מנהל זה לבל 4
רסלייר זה לבל 3
משתמש זה לבל 2

עכשיו לכל אחד שמתי משתמש בניפרד
ושמתי לפי הסדר הלבל הבא:
2
3
4
כלומר הסדר שכתוב במסד זה המשתמש ראשון והמנהל אחרון..

עשיתי הוצאת נתון מהמסד בצור ההבאה:
PHP קוד:


include "config.php";

$query mysql_query("SELECT username,password,level FROM users"); 
while (
$row mysql_fetch_array($query))
{
$username $row["username"];
$password $row["password"];
$level $row["level"];


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

Elad-A 08-08-06 13:08

אתה רוצה שכל המשתמשים יוכלו להיכנס?

Alon.R 08-08-06 13:54

ואיך הקוד שהבאת מתקשר להתחברות כמנהל/ריסיילר/משתמש?

דבר ראשון אני לא הבנתי למה אתה צריך while אם זה להתחברות, אז אתה צריך רק שורה אחת בשביל לאמת נתונים.

בכלליות אני יסביר לך איך אמור לעבוד ההתחברות.

נשלח טופס עם שם משתמש וסיסמא, אתה מריץ שאילתה בusers שלוקחת את הpassword של אותו משתמש.

אם הpassword שהוקש בטופס שווה למה שהוצאת מהשאילתה - אתה מציב 2 עוגיות:
1. username
2. password

בכל מה שנוגע לpassword תשתמש בהצפנת md5,

ובכלליות, בדף של הפאנל ניהול למשל.. אתה עושה שני מבני בקרה if

PHP קוד:

//במידה ואין להם אחד מהעוגיות של ההתחברות
if($_COOKIE['username'] OR $_COOKIE['password'])
{
 
//פה אתה שולח אותם בחזרה לטופס בטענה שהם אינם מחוברים.
 
}
//במידה ויש להם את שני העוגיות
else
{
 
/*פה אתה מאמת את הנתונים של העוגיות, שוב פעם אותו דבר כמו שהסברתי לך מקודם, לוקח את הערך מהעוגיה של הusername (במקום אז.. מהטופס)
ומאמת הסיסמא שהוצאת מהמסד דרך הusername לסיסמא של העוגיה....
*/
 


בהצלחה!

HighA 08-08-06 17:36

לא שאלת אותי את זה כשהתחברת, עכשיו הבנתי מה אתה עושה :\
חחחחחחח סבבה
בהצלחה
^^

ofek_golan 08-08-06 18:34

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

RS324 08-08-06 18:48

ציטוט:

נכתב במקור על ידי Alon.R
ואיך הקוד שהבאת מתקשר להתחברות כמנהל/ריסיילר/משתמש?

דבר ראשון אני לא הבנתי למה אתה צריך while אם זה להתחברות, אז אתה צריך רק שורה אחת בשביל לאמת נתונים.

בכלליות אני יסביר לך איך אמור לעבוד ההתחברות.

נשלח טופס עם שם משתמש וסיסמא, אתה מריץ שאילתה בusers שלוקחת את הpassword של אותו משתמש.

אם הpassword שהוקש בטופס שווה למה שהוצאת מהשאילתה - אתה מציב 2 עוגיות:
1. username
2. password

בכל מה שנוגע לpassword תשתמש בהצפנת md5,

ובכלליות, בדף של הפאנל ניהול למשל.. אתה עושה שני מבני בקרה if

PHP קוד:

//במידה ואין להם אחד מהעוגיות של ההתחברות
if($_COOKIE['username'] OR $_COOKIE['password'])
{
 
//פה אתה שולח אותם בחזרה לטופס בטענה שהם אינם מחוברים.
 
}
//במידה ויש להם את שני העוגיות
else
{
 
/*פה אתה מאמת את הנתונים של העוגיות, שוב פעם אותו דבר כמו שהסברתי לך מקודם, לוקח את הערך מהעוגיה של הusername (במקום אז.. מהטופס)
ומאמת הסיסמא שהוצאת מהמסד דרך הusername לסיסמא של העוגיה....
*/
 


בהצלחה!


MD5 אפשר לפרוץ בדיי קלות עם הכלים המתאימים, לאבטחה מוגברת רצוי להשתמש במחרוזת נוספת המשתנה ממשתמש למשתמש
ולעשות משהו בסגנון של
md5(userpassword.key)
יש הרבה אפשרויות לאבטחה אבל MD5 לבד לא מספיק

ofek_golan 08-08-06 19:04

אפשר לחזור לנושא?

RS324 08-08-06 19:14

PHP קוד:

<html>
SELECT FROM users WHERE username='$_POST[username]' AND password='$_POST[password]' 

ואז אתה בודק אם הוא החזיר שורות
mysql_num_rows
ואם כן אז המשתמש קיים

ofek_golan 08-08-06 19:57

אני לא רוצה לשנות אני עשיתי קובץ בשם GLOBALS שמה הוא ממיר נתון ממסד למשנה ובPHP הוא משווה בינהם אני לא רוצה לשנות עכשיו הכל ... רק את קובץ GLOBALS

Alon.R 08-08-06 20:25

ציטוט:

נכתב במקור על ידי RS324
MD5 אפשר לפרוץ בדיי קלות עם הכלים המתאימים, לאבטחה מוגברת רצוי להשתמש במחרוזת נוספת המשתנה ממשתמש למשתמש
ולעשות משהו בסגנון של
md5(userpassword.key)
יש הרבה אפשרויות לאבטחה אבל MD5 לבד לא מספיק

חחחחחח מה שתגיד, עדיין לא שמעתי על מישהו שהצליח לפצח את המפתח ההצפנה הזה.

ואם אתה כבר מדבר, בוא נראה אם יש לך משהו מאחורי הדברים, תתן לי את הערך הלא מוצפן של הערך הזה:

קוד:

2924a4686bd638be54deadfec7e5a27d
ואז אני יאמין..

ציטוט:

נכתב במקור על ידי RS324
PHP קוד:

<html>
SELECT FROM users WHERE username='$_POST[username]' AND password='$_POST[password]' 

ואז אתה בודק אם הוא החזיר שורות
mysql_num_rows
ואם כן אז המשתמש קיים

דבר ראשון זה טיפשי,
ככה אתה לא יודע אם אין כזה משתמש או שפשוט הסיסמא לא נכונה.
כמו שאמרתי הוא צריך להוציא את הpassword מusers איפה שהמשתמש שווה למה שהוא כתב בטופס.
ואז לבדוק עם mysql_num_rows אם הוא הוא מצא משו', אם לא סימן שהמשתמש לא קיים.
במידה וכן הוא מצפין את מה שהלקוח כתב בשדה של הסיסמא ומשווה אותו למה שהוא מצא מהשאילתה שהוא הריץ.
במידה וזה נכון הוא מציב עוגיות - מחובר.

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

ofek_golan 08-08-06 20:43

אני עשיתי ככה בעבר
 
PHP קוד:

$level2 mysql_query("SELECT * FROM users WHERE username='$_POST[username]' AND password='$_POST[password] AND level = 2'");
ככה עשיתי ל3 רמות
2
,3,4
ואז עשיתי
if($level2 1) {
...



Elad-A 09-08-06 08:25

עשית רק אם הרמה שלו 2 הוא יצליח להתחבר תוריד את החלק הזה.

ofek_golan 09-08-06 08:48

אתה לא הבנת אותי למעלה בשאילתה כתוב AND LEVEL=2 ואז עשיתי אם השאילתה = TRUE=1

Light-Era.Net || Ronen 09-08-06 09:59

אפשר בבקשה לשאול מה מחזירה שאילתה SELECT במידה והיא לא מוצאת כלום ?
אני מחפש תשובה לזה דיי הרבה זמן כבר. =\

Alon.R 09-08-06 12:53

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

בשביל לעשות השוואה, בIF למשל... משתמשים ב== שאתה משתמש ב= אחד הוא מציב את המשתנה לערך שניסת להשוואות לו.

עכשיו ofek_golan אני באמת לא מבין... אני סתם מציע לך פה עזרה?

תעשה כזאת שאילתה...(אני מבין שאתה רוצה שיעשו בשבילך את העבודה אז הינה...)

PHP קוד:

$ch_query mysql_query("SELECT password,level FROM users WHERE username ='$_POST[username]'",$mysql_link);

$md5pass md5($_POST['password']);

$row_ch mysql_fetch_array($ch_query);

if(
mysql_num_rows($ch_query) === 0)
{
die(
"לא נמצא משתמש");
}

if(
$row_ch['password'] == $md5pass)
{

echo 
"הסיסמא נכונה!";

$user_level $row_ch['level'];

//עכשיו $user_level הוא הרמה של המשתמש.
}
else
{
die(
"הסיסמא לא נכונה");
}

switch(
$user_level)
{

//בודקים אם הוא ברמה 2, אם כן הוא מריץ את הקוד של הפאנל שמיוחס לרמה 2
case "2":
//Code Panel 2
break;

//בודקים אם הוא ברמה 3, אם כן הוא מריץ את הקוד של הפאנל שמיוחס לרמה 3
 
case "3":
 
//Code Panel 3
 
break;

//בודקים אם הוא ברמה 4, אם כן הוא מריץ את הקוד של הפאנל שמיוחס לרמה 4
 
case "4":
 
//Code Panel 4
 
break;


קיבלת את הקוד על מגש של כסף..

ofek_golan 09-08-06 14:13

למה עשית SELECT רק של לבל ופאססוורד?
עריכה עכשיו שמתי לב שרשמתי שווה אחר בIF אבל אצלי רמשתי 2 לא עשיתי העתק הדבק אלה רק מהראש ושחכתי קורה

sUP 09-08-06 14:47

למה לא לעשות ישר
ציטוט:

mysql_query("SELECT password,level FROM users WHERE username = '$_POST[username]' AND password = '$_POST[password]'",$mysql_link);
ולהצפין את הpassword לפני :|

ואז לא צריך לעשות סתם תנאי וישר mysql num rows

Alon.R 09-08-06 15:06

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

ציטוט:

נכתב במקור על ידי sUP
למה לא לעשות ישר


ולהצפין את הpassword לפני :|

ואז לא צריך לעשות סתם תנאי וישר mysql num rows

כי אז אתה לא יודע אם השם משתמש לא קיים או שהסיסמא לא נכונה או שהרמה לא מתאימה.
וגם אתה צריך לעשות בטופס שיהיה למשל SELECT BOX שיבחרו באיזה רמה המשתמש וזה טיפשי.

סתכל בDA, אתה לא בוחר רמה הוא מזהה באיזה רמה אתה ומחבר אותך לרמה העליונה ביותר שמורשה למשתמש שלך.

ofek_golan 09-08-06 16:59

יש לי את שם המשתמש אבל אני רוצה גם לבדוק אם הוא קיים...
למרות שהבנתי שזה לא חייב אבל אני צריך

Tomer 09-08-06 17:02

טוב זה מוגזם, הביאו לך מספיק קודים שתוכל לבנות את השאילתא ואת המשך הקוד שלך לבד.

נעול.


כל הזמנים הם GMT +2. הזמן כעת הוא 09:58.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ