PDA

View Full Version : سوال: مشکل در فرم لاگین کاربر



پیام حیاتی
شنبه 05 دی 1394, 17:22 عصر
سلام عزیزان
این فرم من هست :

137685
در رویداد load_page صفحه لاگین یه تابع هست برای پر ردن dropdown سازمان.
کاربر بر اساس انتخاب نام سازمان ، یوزر و پسورد به صفحه Request هدایت می شود.
این جدول :

137686

کدهای فرم لاگین :

SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=Ticket;Integrated Security=SSPI;");
SqlCommand cmd = new SqlCommand("select * from OrganizUser where ou_depart= '" + dropOrganizLogin.SelectedItem.Text + "' and ou_user='" + txtUser.Text + "' and ou_pass='" + txtPass.Text + "' ", con);
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
con.Open();
SqlDataReader Reader = cmd.ExecuteReader();
dt.Load(Reader);
con.Close();


if (dt.Rows.Count != 0)
{


Session["ou_id"] = dt.Rows[0]["ou_id"];
Response.Redirect("Request.aspx");
}
else
{
lblError.Visible = true;
}

کد page_load صفحه Request :

if (Session["ou_id"] == null)
Response.Redirect("OrganizLogin.aspx");

مشکل اینجاست که شرط اول در کوئری رعایت نمیشه.یعنی هر نام سازمانی در DropDown انتخاب بشه مهم نیست فقط کافیه یوزر و پس درست باشه تا کاربر منتقل بشه.

تشکر.

پیام حیاتی
یک شنبه 06 دی 1394, 00:47 صبح
بروزرسانی.....

پیام حیاتی
یک شنبه 06 دی 1394, 18:37 عصر
الآن متوجه شدم اگر مقادیر drop را دستی بدم شرط ها بدرستی برقرار می شوند اما اگر از بانک خوانده شود مقدار drop بررسی نمی شود به چه شکل باید این مشکل رو حل کنم؟

Mahmoud.Afrad
یک شنبه 06 دی 1394, 22:52 عصر
DropDown از چه جدولی پر میشه و کدش چیه؟ اگر برای سازمانها جدول جدا دارید برای چی نام سازمان رو در جدول یوزر ذخیره کردید؟

پیام حیاتی
دوشنبه 07 دی 1394, 12:15 عصر
DropDown از جدولی به نام Department تغذیه میشه.
این کد کامل صفحه Login هست :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Globalization;


public partial class OrganizLogin : System.Web.UI.Page
{


SqlConnection con = new SqlConnection("Data Source=localhost; Initial Catalog=Ticket; Integrated Security=TRUE ");


public void load_drop_organiz_login()
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from Department", con);
DataSet ds = new DataSet();
da.Fill(ds, "Temp");
dropOrganizLogin.DataSource = ds;
dropOrganizLogin.DataTextField = "d_name";
dropOrganizLogin.DataValueField = "d_id";
dropOrganizLogin.DataBind();
con.Close();
}
protected void Page_Load(object sender, EventArgs e)
{
load_drop_organiz_login();
}
protected void Buttlogin_Click(object sender, EventArgs e)
{


//SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=Ticket;Integrated Security=SSPI;");
SqlCommand cmd = new SqlCommand("select * from OrganizUser where ou_depart= '" + dropOrganizLogin.SelectedItem.Text + "'and ou_user='" + txtUser.Text + "' and ou_pass='" + txtPass.Text + "' ", con);
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
con.Open();
SqlDataReader Reader = cmd.ExecuteReader();
dt.Load(Reader);
con.Close();


if (dt.Rows.Count != 0)
{
//Session["DropData"] = dropOrganizLogin.SelectedItem.Text;
Session["ou_id"] = dt.Rows[0]["ou_id"];
Response.Redirect("Request.aspx");
}
else
{
lblError.Visible = true;
}
}
}

ذخیره کردم تا بتونم شرط ورود را بر اساس سه فیلد نام سازمان ، نام کاربری و رمزعبور قرار بدم.

Mahmoud.Afrad
دوشنبه 07 دی 1394, 18:26 عصر
چرا در جدول OrganizUser به جای آیدی سازمان ، نامش رو ذخیره کردید؟ این باعث افزونگی داده ها میشه و از طرفی ارتباط بین جداول رو از بین میبره.
جدول OrganizUser را از طریق ستون ou_depart به جدول Department متصل کنید و آیدی سازمان رو در ou_depart ذخیره کنید.
در زمان لاگین value آیتم انتخابی رو در مقایسه شرکت بدید.

پیام حیاتی
دوشنبه 07 دی 1394, 19:45 عصر
کاری رو که فرمودید انجام دادم :
137848
137849
کوئری هم بدین شکل شد :


SqlCommand cmd = new SqlCommand("select * from OrganizUser where ou_depart_d_id= '" + dropOrganizLogin.SelectedItem.Value + "'and ou_user='" + txtUser.Text + "' and ou_pass='" + txtPass.Text + "' ", con);

اما همچنان شرط نام سازمان رعایت نمیشه و با زدن یوزر و پسورد به درستی ، کاربر منتقل میشه.
من در مرحلع بعد می خواهم بر اساس نام سازمان انتخاب شده در صفحه لاگین اطلاعات آن سازمان را به کاربر لاگین شده نمایش بدم.

پیام حیاتی
چهارشنبه 09 دی 1394, 07:06 صبح
مشکل رو با راهنمایی و کمک استاد موسوی برطرف کردم.
باید از if (!this.IsPostBack) استفاده می کردم.
کدها رو کامل قرار می دم شاید در آینده به کار کسی آمد :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Globalization;


public partial class OrganizLogin : System.Web.UI.Page
{


SqlConnection con = new SqlConnection("Data Source=localhost; Initial Catalog=Ticket; Integrated Security=TRUE ");


public void load_drop_organiz_login()
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from Department", con);
DataSet ds = new DataSet();
da.Fill(ds, "Temp");
dropOrganizLogin.DataSource = ds;
dropOrganizLogin.DataTextField = "d_name";
dropOrganizLogin.DataValueField = "d_id";
dropOrganizLogin.DataBind();
con.Close();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
load_drop_organiz_login();
}
}
protected void Buttlogin_Click(object sender, EventArgs e)
{

SqlCommand cmd = new SqlCommand("select * from OrganizUser where ou_depart_d_id= '" + dropOrganizLogin.SelectedValue + "' and ou_user='" + txtUser.Text + "' and ou_pass='" + txtPass.Text + "' ", con);
//SqlCommand cmd = new SqlCommand("select * from OrganizUser where ou_depart_d_id= " + dropOrganizLogin.SelectedValue + " and ou_user='" + txtUser.Text + "' and ou_pass='" + txtPass.Text + "' ", con);
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
con.Open();
SqlDataReader Reader = cmd.ExecuteReader();
dt.Load(Reader);
con.Close();


if (dt.Rows.Count != 0)
{
//Session["DropData"] = dropOrganizLogin.SelectedValue;
Session["ou_id"] = dt.Rows[0]["ou_id"];
Response.Redirect("Request.aspx");
}
else
{
lblError.Visible = true;
}
}
}