שלח תשובה

זירת השאלות

290
צפיות
30
תשובות

מה לא בסדר כאן ?????

,‏ 15 באפריל, 2004

עשיתי מערכת השעיה של משתמש והכנסתי למסד נתונים 5 משתמשים
2 מושעים
2 רגילים
1 מנהל
כשהקשתי את הקוד הנכון של המנהל הוא אמר לי שאני מושעה
כשהקשתי סתם שטויות זה הקליד לי שיש טעות בשם משתמש או הסיסמא – שזה טוב
וכשהקשתי את השם משתמש וסיסמא של משתמש רגיל זה אמר לי שאני מושעה
מה לא בסדר בקוד הנ"ל



<%
Dim conn, rs, gogo

Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conn.Open "myDSN"

rs.Open "SELECT * FROM godonodo WHERE Login=’" & Request("Login") & "’" ,conn
if rs.EOF then
Response.Write "<center><FONT COLOR=’red’>"
Response.Write "שם המשתמש או הסיסמא אינם נכונים</FONT></center>"
else
If Request("Password")<>rs("Password") Then
gogo = false
Else
gogo = true
session("Login") = rs("Login")
if rs.fields("Admin") = true then
session("Admin") = true
Else
session("Admin") = false
if rs.fields("Status") = true then
session("Status") = true
else
session("Status") = false
End If
End If
End If
End If



rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing

If gogo = true and session("Status") = false and Session("Admin") = true Then
Response.Redirect "/Default.asp"
else
if gogo = true and session("Status") = true Then
Response.Write "<center><FONT COLOR=’red’>"
Response.Write "שם המשתמש מושעה <BR> לבירור נוסף אנא פנה למנהל האתר </FONT></center>"
else
if gogo = true and Session("Admin") = False Then
Response.Redirect "/nonono.asp"

End If
End If
End If


ודרך אגב יש לי 2 עמודות שהם כן/לא אחת למנהל ואחת להשעיה
השעיה – Status
מנהל – Admin
תודה מראש נועם צברי

תגיות:

30 תשובות

  1. sza הגיב:

    חבל, זה סתם לשמור יותר מידי משתנים
    על כל משתמש…

    במערכת שלי בניתי שעל כל משתמש נשמר הסטטוס משתמש..

    אם הסטטוס=0 זה אומר שהוא מושעה
    אם הסטטוס=1 זה אומר שהוא פעיל
    אם הסטטוס=2 זה אומר שהוא מנהל
    אם הסטטוס=3 זה אומר שהוא מנהל גלובאלי
    וכן הלאה…

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

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

    בהצלחה.

  2. MasterMind הגיב:

    לא זה לא נכנס בכלל
    כשאני מכניס קוד שגוי זה אומר לי סיסמא שגוייה
    שכאני מכניס שם משתמש מודעה זו אומר לי מושעה
    כשאנימכניס שם משתמש של מנהל או רגיל זה אומר לי גם מושעה
    אם אתם רוצים קוד יש בהודעה הקודמת !!

  3. sza הגיב:

    הנה הבעיה
    בהתחלה כתבת:


    If Request("Password")<>rs("Password") Then
    gogo = false
    Else
    gogo = true

    מה שאומר שכשהמשתנה gogo מקבל את הערך "אמת" זה אומר שהמשתמש יכול להכנס כי זה המשתמש האמיתי (הססמא שלו שווה לססמא שבמסד הנתונים)

    ואילו אח"כ בתנאי כתבת:

    if gogo = true and session("Status") = true Then
    Response.Write "<center><FONT COLOR=’red’>"
    Response.Write "שם המשתמש מושעה <BR> לבירור נוסף אנא פנה למנהל האתר </FONT></center>"

    כלומר, אם gogo הוא "אמת", אז- תכתוב למשתמש שהוא מושעה?! למה?..
    אם הוא נכון, אז תפנה אותו לדף המתאים, אם הוא לא נכון- אז תפנה אותו להזדהות מחדש…

    בהצלחה.

  4. MasterMind הגיב:

    אוקיי אבל…….
    שים לב מה רשום אחרי ה gogo אמת רשום ו סטטוס = אמת
    שכאשר סטטוס= אמת הוא מושעה

    אבל עזוב החלטתי לקחת בעצתו של SZA ואני אבנה את זה כמספרים
    1-רגיל
    2- מושעה
    3- עורך כתבות
    4- מנהל גלובאלי
    ול SZA אם אני רוצה לשנות את זה אני עושה
    rs.update ל ID של המשתמש
    כאילו אם המשתמש הוא 2 ואני רוצה להעביר אותו ל 1 אז אני עושה


    rs(status)=1
    rs.update

    זה נכון או לא ????????

  5. sza הגיב:

    הרעיון נכון הביצוע לא כ"כ 🙂


    rs.Edit
    rs("status")=1
    rs.update

  6. sza הגיב:

    או ש…
    כמובן אפשר לעשות את זה בSQL:


    UPDATE users
    SET staus=4
    WHERE usernameTBL="sza"

    משפט הSQL הזה ישנה את כל מי ששם המשתמש שלו הוא "sza" למנהל ראשי 😉

  7. MasterMind הגיב:

    שאלה בקשר למסדי נתונים
    איך אני נותן לעמודה במסד נתונים גבולות
    כלומר אני רוצה שאני אוכל לרשום מ 1 עד 4
    אם אני ארשום 5 זה יציג לי שגיאה !!!!
    איך עושים את זה????

  8. אוריקס הגיב:

    ככה:
    אתה פותח את הטבלה שלך בתצוגת עיצוב, ולוחץ על השדה שאתה רוצה. למטה בתיבת "חוק אימות" אתה שם את זה:


    Between 1 And 4

  9. MasterMind הגיב:

    מה לא בסדר בקוד הזה
    זה קוד הרשמה::


    <%
    dim conn,rs

    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open "myDSN"

    rs.open "Select * from godonodo where Login=’" & trim(Login) & "’", conn, 3, 3
    if Rs.eof then
    reg = "no"
    else
    reg = "yes"
    end if
    rs.close

    if reg = "no" then

    rs.Open "Select * From godonodo", conn, 3, 3
    Rs.AddNew
    Rs.Fields("FName") = request.form("Fname")
    Rs.Fields("LName") = request.form("Lname")
    Rs.Fields("Login") = request.form("Login")
    Rs.Fields("Password") = request.form("Password")
    Rs.Fields("IPaddress") = Request.ServerVariables ("REMOTE_ADDR")
    Rs.Update
    Rs.Close
    if reg = "yes" then

    response.write ("!שם משתמש קיים במערכת, אנא בחר שם משתמש אחר")
    end if
    end if
    %>

  10. MasterMind הגיב:

    אהההה והטעות היא בשורה של האיי פי

  11. אוריקס הגיב:

    נסה את זה:


    <%
    dim conn,rs

    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open "myDSN"

    rs.open "Select * from godonodo where Login=’" & trim(Login) & "’", conn, 3, 3
    if Rs.eof then
    reg = "no"
    else
    reg = "yes"
    end if
    rs.close

    if reg = "no" then

    rs.Open "Select * From godonodo", conn, 3, 3
    Rs.AddNew
    Rs.Fields("FName") = request.form("Fname")
    Rs.Fields("LName") = request.form("Lname")
    Rs.Fields("Login") = request.form("Login")
    Rs.Fields("Password") = request.form("Password")
    Rs.Fields("IPaddress") = Request.ServerVariables ("REMOTE_ADDR")
    Rs.Update
    Rs.Close
    end if

    if reg = "yes" then
    response.write ("!שם משתמש קיים במערכת, אנא בחר שם משתמש אחר")
    end if
    %>

    זה לא אמור לפתור את הבעייה, אבל זה תיקון של טעות לוגית קטנה… מאיזו סוג השדה IPaddres?

  12. MasterMind הגיב:

    הסתדר ולא הסתדר
    מצד אחד זה עושה את ההרשמה אבל מצד שני כאשר
    אני פותח את מסד הנתונים זה מראה לי את ההרשמה מקום אחרון
    ושני מקומות ריקים אבל עם אותו ה IP כלומר זה מראה לי הכול ריק חוץ
    מהאיי פי
    איך זה יכול להיות !!
    כאילו זה שלח את האייפי שלוש פעמים ואת השם משתמש וסיסמא פעם אחת

  13. MasterMind הגיב:

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


    Rs.Fields("Name") = Session("Login")

  14. MasterMind הגיב:

    גם את זה סידרתי כבר
    מה זה הטעות הזאת ???????


    Response object error ‘ASP 0156 : 80004005’

    Header Error

    /Login.asp, line 39

    The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.


    הנה שורה 39


    response.redirect "/nonono.asp"

  15. ניר טייב הגיב:

    response.redirect
    מכתיב http headers של מעבר (אם אני לא טועה)
    ובזמן שאתה מכתיב HTML אי אפשר להפנות את הדף כי אתה כותב בו משהו

  16. sza הגיב:

    כותבים לדף את פקודות הHTML אחרי ה..
    Response.Redirect.

    בהצלחה.

  17. MasterMind הגיב:

    אני מצטער אבל…..
    לא הבנתי !!!
    לאחר RESPONSE.REDIRECT בא


    "your_page.asp/"

    לא קוד HTML !!!!
    אתה יכול להסביר לי קצת יותר??????

  18. sza הגיב:

    הרעיון הוא כזה
    אי אפשר לעשות Response.Redirect אם כתבת משהו ללקוח (לזה שרואה את הדף…)

    במקרה הזה כתבת לו כבר <HTML> או כל תג HTML אחר שיוצג לו על הדף, ולכן הדפדפן לא יכול להעביר אותו לדף אחר…

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

    או שתכתוב ללקוח רק אחרי כל הקוד…

  19. MasterMind הגיב:

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


    <%
    Dim conn, rs, gogo

    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open "myDSN"

    rs.Open "SELECT * FROM godonodo WHERE Login=’" & Request("Login") & "’" ,conn
    if rs.EOF then
    Response.Write "<center><FONT COLOR=’red’>"
    Response.Write "שם המשתמש או הסיסמא אינם נכונים</FONT></center>"
    Else
    if Request("Password")<>rs("Password") Then
    gogo = false
    Else
    gogo = true
    if rs.fields("Status") = 1 then
    session("Admin") = false and gogo = true
    Elseif rs.fields("Status") = 2 then
    Elseif gogo = false and Session("Admin") = false then
    Elseif rs.fields("Status") = 3 then
    session("Admin") = true and gogo = true
    Elseif rs.fields("Status") = 4 then
    session("Writer") = true and gogo = true

    End If
    End If
    End If

    if gogo = true then
    session("Login") = rs.fields("Login")
    End If
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing

    If session("Admin") = false and gogo = true then
    response.redirect "/nonono.asp"

    Elseif session("Admin") = true and gogo = true then
    response.redirect "/Default.asp"

    Elseif gogo = false and Session("Admin") = false then
    response.write" <CENTER>שם המשתמש מושעה <BR> לבירור נוסף אנא פנה למנהל האתר</CENTER>"

    Elseif session("Writer") = true and gogo = true then
    response.redirect "/Default.asp"

    End If
    %>

    ועוד שאלה איך אני בוחר את כל המשתמשים שמושעים ??? (מצב 2)
    ככה ????


    rs.Open "SELECT * FROM godonodo WHERE Status = 2"

  20. MasterMind הגיב:

    אהההה
    לא משנה מצאתי תטעות !!!!
    ובקשר לשאלה השנייה ?????

  21. sza הגיב:

    בקשר לשאלה השניה:
    ככה:

    rs.Open "SELECT * FROM godonodo WHERE Status=2" ,conn

    בהצלחה! 🙂

שלח תשובה