PDA

View Full Version : تعیین سطح دسترسی



Nil00 far
یک شنبه 26 خرداد 1392, 17:08 عصر
سلام دوستان
با عرض شرمندگی
من کد قسمت لاگین رو نوشتم ولی ایراد داره میگه قبل از درست کردن datareader جدید باید قبلی رو ببندیم
میشه همین کد رو برام اصلاح کنید بدو اینکه نیاز به جدول یا فیلد جدید داشته باشم
دو کاربر دارم مدیر و داوطلب
ممنون میشم راهنماییم کنید if (textbox1.text != " " && textbox2.text != " ")
{

sqlconnection n = new sqlconnection("data source=localhost;initial catalog=ielts language;integrated security=true");
sqlcommand command = new sqlcommand("select * from examiner where username=@username and password=@password", n);

sqlcommand command1 = new sqlcommand("select * from manager where username=@username and password=@password", n);

sqldatareader r;

sqldatareader r1;

command.parameters.addwithvalue("@username", textbox1.text);
command.parameters.addwithvalue("@password", textbox2.text);
command1.parameters.addwithvalue("@username", textbox1.text);
command1.parameters.addwithvalue("@password", textbox2.text);
n.open();
r = command.executereader();

r.read();
r1 = command1.executereader();
r1.read();
if (r.hasrows == true)
{

session["username"] = textbox1.text;
session["password"] = textbox2.text;
session["id"] = r[2];
response.redirect("form2.aspx");
}
else if (r1.hasrows == true)
{

response.redirect("login2.aspx");
}
else
{
label3.text = "your username or password is not valid";
}

n.close();

farzane_t
یک شنبه 26 خرداد 1392, 19:17 عصر
سلام
دوست عزیز منظورتون از اینکه دو کاربر دارید چیه؟ چرا نام کاربری و پسورد رو دوبار از دو جدول متفاوت اونم از یه textbox چک میکنید؟ شما اطلاعات کاربر و مدیر رو جدا نگهداری میکنید؟ اگه اینطوره بهتر نیست که یه Dropdown بزارید و بر اساس اون جدول مربوطه رو چک کنید؟

Nil00 far
یک شنبه 26 خرداد 1392, 19:36 عصر
سلام
دوست عزیز منظورتون از اینکه دو کاربر دارید چیه؟ چرا نام کاربری و پسورد رو دوبار از دو جدول متفاوت اونم از یه textbox چک میکنید؟ شما اطلاعات کاربر و مدیر رو جدا نگهداری میکنید؟ اگه اینطوره بهتر نیست که یه Dropdown بزارید و بر اساس اون جدول مربوطه رو چک کنید؟
شرمنده انگار بد توضيح دادم
منظورم از دو كاربر يكي مدير و يكي به فرض داشجو هستش و هركدوم جداول متفاوتي دارن و هر كدوم جداگانه داراي يوزرنيم و پسورد هستن

Nil00 far
یک شنبه 26 خرداد 1392, 19:43 عصر
البته حتما نبايد اين كد رو بنويسم اگه شما كد ديگه اي پيشنهاد ميكنيد من همون رو مينوسم

forestasphalt
یک شنبه 26 خرداد 1392, 19:55 عصر
sqlcommand command = new sqlcommand("select * from examiner where username=@username and password=@password", n);

sqlcommand command1 = new sqlcommand("select * from manager where username=@username and password=@password", n);
sqldatareader r;
command.parameters.addwithvalue("@username", textbox1.text);
command.parameters.addwithvalue("@password", textbox2.text);
n.open();
r = command.executereader();
r.read();
if (r.hasrows == true)
{

session["username"] = textbox1.text;
session["password"] = textbox2.text;
session["id"] = r[2];
response.redirect("form2.aspx");
n.close();
}
n.open();
sqldatareader r1;
command1.parameters.addwithvalue("@username", textbox1.text);
command1.parameters.addwithvalue("@password", textbox2.text);
r1 = command1.executereader();
r1.read();
if (r1.hasrows == true)
{

response.redirect("login2.aspx");
}
else
{
label3.text = "your username or password is not valid";
}
n.close();

vira1368
یک شنبه 26 خرداد 1392, 20:20 عصر
اگر همه یوزرها در یک جدول باشد و با یک فیلد type از هم جدا بشن(true, false) کار راحتتره.

SqlConnection con = new SqlConnection(@"data source=.\sqlexpress; attachdbfilename=|datadirectory|\Database.mdf; integrated security=true; user instance=True");
SqlDataReader r = null;
try
{
SqlCommand cmd = new SqlCommand("select * from users where username = @username", con);
con.Open();
cmd.Parameters.AddWithValue("@username", txtUsername.Text);
r = cmd.ExecuteReader();
r.Read();
if (r["password"].ToString() == txtPasword.Text)
{
if (r["type"].ToString() == "True")
Response.Redirect("Manager.aspx");
else
Response.Redirect("Student.aspx");
}
else
{
lblStatus.Text = "Wrong Username or Password!";
}
}
catch
{
lblStatus.Text = "Wrong Username or Password!";
}
finally
{
r.Close();
con.Close();
}

Nil00 far
یک شنبه 26 خرداد 1392, 20:34 عصر
sqlcommand command = new sqlcommand("select * from examiner where username=@username and password=@password", n);

sqlcommand command1 = new sqlcommand("select * from manager where username=@username and password=@password", n);
sqldatareader r;
command.parameters.addwithvalue("@username", textbox1.text);
command.parameters.addwithvalue("@password", textbox2.text);
n.open();
r = command.executereader();
r.read();
if (r.hasrows == true)
{

session["username"] = textbox1.text;
session["password"] = textbox2.text;
session["id"] = r[2];
response.redirect("form2.aspx");
n.close();
n.open();
sqldatareader r1;
command1.parameters.addwithvalue("@username", textbox1.text);
command1.parameters.addwithvalue("@password", textbox2.text);
r1 = command1.executereader();
r1.read();
if (r1.hasrows == true)
{

response.redirect("login2.aspx");
}
else
{
label3.text = "your username or password is not valid";
}
n.close();


مرسی دوست عزیز این کد خطایی ایجاد نمیکنه ولی فقط کاربر رو می شناسه نه مدیر رو چون هر کدومشون یه if جداگانه دارند به نظرتون نمی شه این دو رو توی یه شرط بذاریم؟

forestasphalt
یک شنبه 26 خرداد 1392, 20:43 عصر
متوجه منظور شما نشدم، دقیقا کاری رو که میخواید بکنید رو بهتر و بیشتر توضیح دهید
با تشکر

Nil00 far
یک شنبه 26 خرداد 1392, 20:46 عصر
اگر همه یوزرها در یک جدول باشد و با یک فیلد type از هم جدا بشن(true, false) کار راحتتره.

SqlConnection con = new SqlConnection(@"data source=.\sqlexpress; attachdbfilename=|datadirectory|\Database.mdf; integrated security=true; user instance=True");
SqlDataReader r = null;
try
{
SqlCommand cmd = new SqlCommand("select * from users where username = @username", con);
con.Open();
cmd.Parameters.AddWithValue("@username", txtUsername.Text);
r = cmd.ExecuteReader();
r.Read();
if (r["password"].ToString() == txtPasword.Text)
{
if (r["type"].ToString() == "True")
Response.Redirect("Manager.aspx");
else
Response.Redirect("Student.aspx");
}
else
{
lblStatus.Text = "Wrong Username or Password!";
}
}
catch
{
lblStatus.Text = "Wrong Username or Password!";
}
finally
{
r.Close();
con.Close();
}



با تشکر
من این کد رو امتحان کردم ولی باز در هر دو حالت به یک صفحه میرن هر دو به صفحه student میرن

Nil00 far
یک شنبه 26 خرداد 1392, 20:49 عصر
متوجه منظور شما نشدم، دقیقا کاری رو که میخواید بکنید رو بهتر و بیشتر توضیح دهید
با تشکر

من میخوام وقتی مدیر نام و رمز عبور رو میزنه به صفحه مدیر وارد بشه و وقتی دانشجو رمز خودش رو میزنه به صفحه دانشجو وارد بشه ولی این کد هم مدیر و هم دانشجو رو به صفحه دانشجو هدایت میکنه

Nil00 far
یک شنبه 26 خرداد 1392, 20:52 عصر
اگر همه یوزرها در یک جدول باشد و با یک فیلد type از هم جدا بشن(true, false) کار راحتتره.

SqlConnection con = new SqlConnection(@"data source=.\sqlexpress; attachdbfilename=|datadirectory|\Database.mdf; integrated security=true; user instance=True");
SqlDataReader r = null;
try
{
SqlCommand cmd = new SqlCommand("select * from users where username = @username", con);
con.Open();
cmd.Parameters.AddWithValue("@username", txtUsername.Text);
r = cmd.ExecuteReader();
r.Read();
if (r["password"].ToString() == txtPasword.Text)
{
if (r["type"].ToString() == "True")
Response.Redirect("Manager.aspx");
else
Response.Redirect("Student.aspx");
}
else
{
lblStatus.Text = "Wrong Username or Password!";
}
}
catch
{
lblStatus.Text = "Wrong Username or Password!";
}
finally
{
r.Close();
con.Close();
}


ممنون دوست عزیز ایرادش برطرف شد فقط آیا با این راه هم میتونم id دانشجو رو با سشن حفظ کنم ؟

maryammashkani
یک شنبه 26 خرداد 1392, 20:57 عصر
وقتی قطعه برنامه مربوط به r.read() تموم شد بنویسید r.close(). بعد بقیه کدها رو بنویسید

Nil00 far
یک شنبه 26 خرداد 1392, 21:15 عصر
وقتی قطعه برنامه مربوط به r.read() تموم شد بنویسید r.close(). بعد بقیه کدها رو بنویسید

دوست عزیز وقتی r رو میبندم دیگه نمی تونم توی if ازش استفاده کنم

vira1368
یک شنبه 26 خرداد 1392, 22:04 عصر
ممنون دوست عزیز ایرادش برطرف شد فقط آیا با این راه هم میتونم id دانشجو رو با سشن حفظ کنم ؟

بله شما میتونید این کار رو هم انجام بدید. عذر میخوام توی کد بالا ننوشته بودم. شما میتونید به این صورت کد بالا رو صحیح کنید.

//...
if (r["type"].ToString() == "True")
{
Session.Add("ID", r["ID"].ToString());
Response.Redirect("Manager.aspx");
}
else
{
Session.Add("ID", r["ID"].ToString());
Response.Redirect("Student.aspx");
}
//...

maryammashkani
یک شنبه 26 خرداد 1392, 22:54 عصر
SqlCommand cmd = new SqlCommand("select * from aza where username=@un and pass=@ps", con);
cmd.Parameters.AddWithValue("@un",txtusername.Text);
cmd.Parameters.AddWithValue("@ps",txtpass.Text);
//--------------------check nemoodan sehhat username va password-----------
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{

while (rdr.Read())
{
Session["type"] = rdr["type"].ToString();
}
rdr.Close();
con.Close();
lblerror.Text = Session["type"].ToString();
if (lblerror.Text =="modir")
{
Response.Redirect("index_modir.aspx");
}
if (lblerror.Text == "student")
{
Response.Redirect("index_student.aspx");
}

}



در اینجا جداول رو از هم جدا نکده بلکه یه فیلد type داره که نقش هر فرد هعم از مدیر یا دانشجو توی اون مشخص میشه

maryammashkani
یک شنبه 26 خرداد 1392, 22:56 عصر
اون خطی که بهم ریخته اینه
rdr.close();
con.close();

farzane_t
دوشنبه 27 خرداد 1392, 09:08 صبح
البته حتما نبايد اين كد رو بنويسم اگه شما كد ديگه اي پيشنهاد ميكنيد من همون رو مينوسم
این پیشنهاد منه :
ConnectionString رو درون web.config به این صورت قرار بده :



<connectionStrings>

<add name="ConStr" connectionString="data source=localhost;initial catalog=ielts language;integrated security=true"/>

</connectionStrings>



بعد یا ازطریق یه کلاس یا تابعی درون برنامت connection string رو به دست بیار :





public string ConnectionString
{
get
{
return ConfigurationManager.ConnectionStrings["ConStr"].ToString();
}
}

protected void Button1_Click(object sender, EventArgs e)
{
if (textbox1.Text != " " && textbox2.Text != " ")
{
string select = "";
string redirect = "";
switch (DropDownList1.SelectedValue)
{
case "manager":
select = "select * from examiner where username=@username and password=@password";
redirect = "examiner.aspx";
break;
case "student":
select = "select * from manager where username=@username and password=@password";
redirect = "student.aspx";
break;
default:
break;
}
using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand(select, con);
SqlDataReader dr;
cmd.Parameters.AddWithValue("@username", textbox1.Text);
cmd.Parameters.AddWithValue("@password", textbox2.Text);
try
{
con.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
Session["username"] = dr["username"].ToString();
Session["password"] = dr["password"].ToString();
Session["id"] = dr["id"].ToString();
Response.Redirect(redirect);
}
else
{
label3.Text = "your username or password is not valid";
}

}
catch (Exception exp)
{
throw exp;
}
finally
{
con.Close();
con.Dispose();
}

}

}
}