ساخت یک صفحه لاگین

rah

Member
سلام

من یک صفحه به نام Login.asp در ASP3.0 دارم. که در اون دو تا تکت باکس و یک دگمه ی ثامبیت گذاشتم.
در ضمن یک جدول به نام Table1 در db1 در اکسس دارم.
این جدول حاوی 2 فیلده:
User Name &Password
می خوام و قتی صفحه لاگین باز شد و کاربر یوزنیم و پسوردش را وارد کرد، سیستم به صورت خود کار یوزنیم و پسوورد را با رکوردهای درون بانک متابقت بده و اگر درست بود ،صفحه ی AddBank.asp باز شود و بالای آن نام کاربری که با یوزنیم و پسوورد وارد شده نمایش پیدا کند.
خیلی این درو اون در زدم چیزی گیرم نیومد.
کمکم کنید، ثواب داره، دعاتون می کنم.
ممنون همگی
منتظرم:)
 

rah

Member
برقرار کردن ارتباط با دیتا بیس را بلد هستید؟

بله.
اینطوری:
<%

set Conn=Server.CreateObject("ADODB.Connection")
Conn.Provider="Microsoft.Jet.OLEDB.4.0"
Conn.Open (Server.Mappath("Data\All.mdb"))
set RS = Server.CreateObject("ADODB.recordset")

%>

اگر اشکالی داره بگید.
 

mosyhey

Member
با سلام.
دوست عزیز شما یک فرم حاوی دو تکست باکس دارید در صفحه ای به نام login.asp. فرض می کنیم اسم تکست باکس ها هم user_str و pass_str باشد. اکشن فرم را جوری تعیین کنید که اطلاعات را پس از سابمیت کردن به صفحه مثلاً check.asp بفرستد و با متد post یعنی:
HTML:
<form name="login_frm" action="check.asp" method="post">
حالا برنامه صفحه check.asp را این جوری بنویس:
HTML:
<%@LANGUAGE="VBSCRIPT"%>
<%Option Explicit%>
<%

'چک کند که اگر هر کدام از تکست باکس ها خالی بود کاربر را به صفحه لوگین برگرداند
If Trim(Request.Form("user_str"))="" Or Trim(Request.Form("pass_str"))="" Then
	Response.Redirect("login.asp?msg=nouserpass")
End If

'مراحل برقرار کردن ارتباط با دیتابیس
Dim oconn
Dim ors
Dim filepath
filepath=Server.MapPath("data/db1.mdb")
Set oconn=Server.CreateObject("ADODB.Connection")
oconn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath

'معرفی متغیری برای فهم پیدا شدن رکورد یا نه
Dim accessibility_bol

'انتخاب از جدول
Set ors=oconn.Execute("SELECT dbusername,dbpassword FROM table1")
accessibility_bol=False

'پیمایش کل رکورد ها و مطابقت دادن تک تک آن ها با مقادیر ورودی
Do while not ors.eof
	If LCase(ors("dbusername"))=LCase(Request.Form("user_str")) And LCase(ors("dbpassword"))=LCase(Request.Form("pass_str")) Then

		accessibility_bol=True

		'بستن آبجکت های ایجاد شده
		ors.close
		oconn.close
		Set ors=Nothing
		Set oconn=Nothing

		'با صحت درستی یوزر و پسورد به این صفحه می رود کاربر
		Response.Redirect("AddBank.asp")
		Exit Do
	End If
	ors.MoveNext
loop

'بستن آبجکت های ایجاد شده
ors.close
oconn.close
Set ors=Nothing
Set oconn=Nothing

'رفتن به این صفحه اگر یوزر و پسورد کاربر با هیچ کدام مطابق نبود
If not accessibility_bol Then 
	Response.Redirect("login.asp?msg=baduserpass")
End If
%>
در صورت خالی بودن یا اشتباه بودن یوزر و پسورد پیامهایی از طریق کویری استرینگ به صفحه login.asp فرستاده می شود که با استفاده از آن ها می توانید پیام دهید به کاربر که مثلاً پوزر و پسورد اشتباه است.
 
آخرین ویرایش:
  • Like
Reactions: rah

rah

Member
سلام

خیلی خیلی خیلی خیلی خیلی خیلی خیلی ........................................................
ممنون
خیر ببینی
دستت درد نکنه
دعات می کنم
بای
 

rah

Member
سلام

اگر کابر آدرس addbank.asp/... رو وارد کنه مستقیم به اون صفحه میره. اون وقت یوزنیم و پسوورد فایده ای نداره!
باید یه کدی بزارم که فقط با وارد کردن یوز و پسوورد بتونه addbank.asp رو ببینه.
ممنون می شم اگه راهنماییم کنید.
------------------------------
در ضمن:
توی همون صفحه ی addbank می خواهم یک فرم بزارم.
نام
عنوان
تاریخ
textarea، درسته؟ منظورم برای وارد کردن متون دراز و طولانیه.
ارتباط بقیه اجزای فرم را تونست با بانک برای add کردن بر قرار کنم اما textarea رو نتونستم
اگه یه راهنمایی کنی ممنون می شم.
بای
 
آخرین ویرایش:

mosyhey

Member
درست است. شخص با وارد کردن آدرس addbank.asp وارد می شود. برای این کار می توانید همان اول صفحه چک کنید که آیا این فرد از صفحه check.asp فرستاده شده یا نه. اگر نه که به صفحه login.asp بازش گردانید. اگر برنامه اش را نمی دانید بگویید بگردم برایتان گذارم.
روش دوم که فکر کنم بهتر است و خودم از همین راه استفاده می کنم ایجاد سکشن است. یعنی در صفحه check.asp اگر مقادیر ورودی با یکی از رکورد ها مطابق شد برای آن فرد سکشن می سازیم این طور:
HTML:
'پیمایش کل رکورد ها و مطابقت دادن تک تک آن ها با مقادیر ورودی
Do while not ors.eof
	If LCase(ors("dbusername"))=LCase(Request.Form("user_str")) And LCase(ors("dbpassword"))=LCase(Request.Form("pass_str")) Then

		accessibility_bol=True

		Session("member")=True

		'بستن آبجکت های ایجاد شده
		ors.close
		oconn.close
		Set ors=Nothing
		Set oconn=Nothing

		'با صحت درستی یوزر و پسورد به این صفحه می رود کاربر
		Response.Redirect("AddBank.asp")
		Exit Do
	End If
	ors.MoveNext
loop
البته یک خط هم در پست قبلی جا افتاده بود که اضافه کرده ام. پس یک سکشن ایجاد شد. حالا باید اول صفحه addbank.asp چک کنیم آیا این سکشن ایجاد شده یا نه که اگر شده برگردد آن صفحه نمایش داده شود ورنه برود به صفحه login.aspp.
HTML:
<%
If Session("member")  Then
Else
Response.Redirect("login.asp?msg=nologin")
End If
%>
 

mosyhey

Member
در مورد مشکل دوم هم اگر برنامه html اش را درست نوشته اید این نکته را در نظر بگیرید که اگر از 256 کاراکتر بیشتر وارد کردید برای این که بتواند در یک خانه دیتابیس وارد شود آن خانه به جای نوع text باید از نوع memo انتخاب شده باشد. اگر مشکل این نبود بگویید.
 

rah

Member
سلام
عذر می خوام، درست متوجه نشدم.
اون یک خطی که گفتید جا افتادهaccessibility_bol=True بوده دیگه؟
بعد، من در صفحه Check.asp همانچیزی که گفتید اضافه کردم یعنیSession("member")=True
بعد باید در صفحه addbank.asp هم این را :
<%
If Session("member") Then
Else
Response.Redirect("login.asp?msg=nologin")
End If
%>

وارد کنم دیگه.

فقط اینکه بجای msg=nologin میشه هرچیزی دیگه وارد کرد دیگه؟
بعدش در پست های اول گفتید که اگر یوزنیم یا پسوورد اشتباه یا خالی بود می توانید پیغام مربوطه را نمایش دهید.
من از Response.write استفاده کردم، اما چون تو Check.asp بودم نمی تونستم متن مورد نظرمو تو Login.asp چاپ کنم.
اگر در مورد اینم توضیح بدید یک دنیا ممنون می شم.
و
یه لینک هم می خوام تو صفحه ی addbank.asp بزارم که Logout کنه.چه جوری میشه؟

در ضمن سیستم اصلی درست کار کرد.
ممنون
بای

ممنون
 
آخرین ویرایش:

rah

Member
در مورد مشکل دوم هم اگر برنامه html اش را درست نوشته اید این نکته را در نظر بگیرید که اگر از 256 کاراکتر بیشتر وارد کردید برای این که بتواند در یک خانه دیتابیس وارد شود آن خانه به جای نوع text باید از نوع memo انتخاب شده باشد. اگر مشکل این نبود بگویید.

نه مشکل از این نیست.
اگه امکانش هست یه مثال از add در اکسس توسط 1 تکست باکس و یک textarea بدید.
چون من تونستم محتویات تکستباکسو add کنم اما textarea رو نه.

ممنون
بای
 

mosyhey

Member
همه چیز درست فقط اون چهار پنج خط را اول فایل addbank.asp وارد کنید تا اول صفحه چک کند.
به جای msg=nologin می شود هر چیز گذاشت. این پیام ها را باید در فایل login.asp پردازش شود. مثلاً بالای صفحه login.asp وارد کنید:
HTML:
<%
Select Case Request.QueryString("msg")
	Case "baduserpass"
		Response.Write("<br><pre style=background-color:#333333>")
		Response.Write("یوزر یا پسورد اشتباه است")
		Response.Write("</pre>")
	Case "nouserpass"
		Response.Write("<br><pre style=background-color:#333333>")
		Response.Write("یوزر یا پسورد خالی است")
		Response.Write("</pre>")
	Case "nologin"
		Response.Write("<br><pre style=background-color:#333333>")
		Response.Write("بدون لاگین کردن نمی توانید وارد شوید")
		Response.Write("</pre>")
	Case "exit"
		Response.Write("<br><pre style=background-color:#333333>")
		Response.Write("شما از سایت حارج شدید")
		Response.Write("</pre>")
End Select
%>
برای لاگوت کردن هم برنامه ای بنویسید که در آن این دستور اجرا شود و سپس کاربر به صفحه login.asp فرستاده شود .
HTML:
<%
Session("member")=False
Response.Redirect("login.asp?msg=exit")
%>
 

rah

Member
mosyhey عزیز
من کد Loout کردنو توی یه دونه a href قرار دادم. اما وقتیکه addbank.asp باز میشه سریع به login.asp میره!
لینک لاگ اوت ساخته شده اما از من در خواست کلیک نمی خواهد و بلافاصله که صفحه برگذاری میشه لاگوت میشه و به login.asp میره.
فکر می کنم نباید توی لینک بزارم!
چیکار کنم؟
----
در ضمن من می خواستم، یعنی در پست های اول هم گفته بودم که می خواهم توی addbank.asp نام اون کسی که با یوزر ونیم و پسووردش وارد شده نمایش پیدا کنه. نه یوزنیمش. من تو همون table1 ، سه تا فیلد دارم.
نام ونام خانوادگی،یوزر و پسوورد
که می خوام قسمت نام و نام خانوادگی اش نمایش پیدا کنه.
ممنون
بای
 

mosyhey

Member
بله این دستورات را نباید توی a href بگذارید. بلکه باید یک فایل دیگر بسازید مثل exit.asp که با کلیک بر روی لاگوت برود به آن فایل یعنی آدرس آن فایل را در a href بگذارید و آن فایل هم طبق دستورات ذکر شده در پست های قبل سکشن را فالس کند و کاربر را بفرستد به login.asp. البته حتماً لازم نیست یک فایل جدید بسازید. می توانید مثلاً با فرستادن کویری به فایل login.asp این کار را در فایل login.asp بکنید.

در مورد نام کاربر هم چندین کار می توانید بکنید. ساده ترینش که غیر حرفه ای است کمی این است که بخش ذکر شده فایل check.asp را این طور تغییر دهید:
HTML:
'انتخاب از جدول
Set ors=oconn.Execute("SELECT dbname,dbfamil,dbusername,dbpassword FROM table1")
accessibility_bol=False

'پیمایش کل رکورد ها و مطابقت دادن تک تک آن ها با مقادیر ورودی
Do while not ors.eof
	If LCase(ors("dbusername"))=LCase(Request.Form("user_str")) And LCase(ors("dbpassword"))=LCase(Request.Form("pass_str")) Then

		accessibility_bol=True

		'سکشن سازی
		Session("member")=True
		Session("member_name")=ors("dbname")
		Session("member_famil")=ors("dbfamil")

		'بستن آبجکت های ایجاد شده
		ors.close
		oconn.close
		Set ors=Nothing
		Set oconn=Nothing

		'با صحت درستی یوزر و پسورد به این صفحه می رود کاربر
		Response.Redirect("AddBank.asp")
		Exit Do
	End If
	ors.MoveNext
loop
در این صورت نام و فامیل هر کاربر هم در سکشن خودش ذخیره می شود و برای پیام خوش آمد گویی در بالای صفحه addbank.asp این طوری می توان نوشت که:
HTML:
<%
Response.Write("خوش آمدید " & Session("member_name") & " " & Session("member_famil"))
%>
 

rah

Member
سلام
دستت درد نکنه درست شد.
من در چند پست قبل هم یک سوالی کرده بودم ولی مثل اینکه ندیدیدش .
اون add کردن محتویات فرم در اکسس بود.
همونطور که گفتم من تونستم ارتباط تکست باکس ها رو با بانک برای addکردن برقرار کنم.
اما textarea رو نه. من از datatype ممو Memo هم استفاده نمی کنم. از تکست استفاده می کنم.
این درحالی است که وقتی حتی یک کلمه در textarea تایپ و sumbitی می کنم قبول نمی کند!!

ممنون
بای
 

MDP

Well-Known Member
جواب اینه

آقا کار شما عالیه

هون کد رو داشتی یا الان نوشتی؟
 

mosyhey

Member
با سلام و تشکر از شما و vb_bmw
برای ساخت تکست اریا ساده می توانید این طور بنویسید:
HTML:
<form method="post" action="form.asp">
<textarea name="note_str"></textarea>
<input type="submit" value="Send">
</form>
در صفحه مقصد هم با این کد به محتویات تکست اریا پی می رید که می توانید آن ها را در بانک بریزید:
HTML:
Request.Form("note_str")
 

rah

Member
سلام
mosyhey جان من صفحه ای که باید ورودی های فرم رو وارد بانک کنه رو اینطوری نوشتم
ولی اشکال می گیره!
اسم تکست اریا: txt وفیلد مربوز به تکست اریا:txt

<!--#include file="DatabaseConnect.asp"-->

<html dir="rtl">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>New Page 1</title>
</head>
<body>
RS.Open "Select * From download", conn

RS.Movefirst
RS.Addnew
("RS ("txt") = Request.Form ("txt
RS.update

("Response.redirect("test.asp

conn.close
set conn=Nothing
RS.close
Set RS=Nothing

<%
</body>
</html>


در ضمن صفحه databaseconnect.asp درست تعریف شده. در جای دیگر امتحان کردم.
Thanks
 
آخرین ویرایش:

mosyhey

Member
با سلام.
ظاهراً که درست است، اما به نظر من جلوی Open به جای دستور sql تنها نام جدول را بگذارید مثلاً "download" چون مطمین نیستم بشود دستور sql را گذاشت.
نکته بعدی هم اینکه فکر کنم RS.Movefirst زیادی باشد اما این نیست که باعث خطا شده. همچنین بهتر است Response.redirect بعد از دستورات بستن آبجکت ها و باشد تا قبل از رفتن به آن صفحه دستورات اجرا شود و منابع سرور هدر نرود.
راستی RS کجا تعریف و آبجکت سازی شده است؟ اگر در فایل اینکلود شده این کار شده که فبها ورنه جای این دو خط خالی است:
HTML:
Dim RS
Set RS=Server.CreateObject("ADODB.Recordset")
به جای Request.Form هم یک متن مانند "salam" قرار بده که ببینی مشکل از این هم نباشد.
اگر درست نشد دقیقاً متن خطا و خطی که باعث ایجاد خطا شده را بگو.
 

rah

Member
سلام
کارهایی که گفتید انجام دادم :
این صفحه ثبت اطلاعات تکست اریا:
HTML:
<!--#include file="DatabaseConnect.asp"-->

<%
RS.Open "Select * from download", Conn

RS.Movefirst
RS.Addnew
RS ("txt") = Request.Form ("txt")
RS.update

conn.close
set conn=Nothing
RS.close
Set RS=Nothing

	Response.redirect("test.asp")
%>


اینم databaseconnect:

HTML:
<%
Dim Conn
set Conn=Server.CreateObject("ADODB.Connection")
Conn.Provider="Microsoft.Jet.OLEDB.4.0"
Conn.Open (Server.Mappath("Data\db1.mdb"))
Dim RS
set RS = Server.CreateObject("ADODB.Recordset")
%>

اینم Error:

Error Type:
ADODB.Recordset (0x800A0CB3)
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.

در این موقعیت از خط RS.Addnew اشکال می گیرد.
در ضمن خطRS.Open "Select * from download", Conn هم در جایی دیگر امتحان کرده ام. درست بوده.

ممنون
بای
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا