Diya Ayesa Ответов: 2

Страница входа в систему и перенаправление страницы в соответствии с типом пользователя asp.net использование базы данных mysql


У меня есть две таблицы в базе данных:
Login (LID, UName, UPasword, UserType_ID)
UserType(UserType_ID, UserType)

Мне нужно проверить имя пользователя и тип пользователя и создать переменную сеанса для имени пользователя (UName).
ниже код работает так же, как при входе администратора и пользователя они перенаправляются на страницу gallery.aspx, но я хочу, чтобы при входе администратора они перенаправлялись на страницу "View_Reports.aspx", а при входе публичного пользователя они перенаправлялись на страницу gallery.aspx

код
protected void Button1_Click1 ( object sender, EventArgs e )
{
	name = TextBox1.Text;
	pwd = TextBox1.Text;
	conn.Open( );
	MySqlCommand cmd = new MySqlCommand( " select * from login  where UName =  '" + name + "'  and  UPasword =  '" + pwd + "' " );
	cmd.Connection = conn;
	// cmd.Connection = conn;
	MySqlDataReader dr = cmd.ExecuteReader( );

	if ( dr.HasRows )
	{
		dr.Read( );
		Session[ " UName" ] = dr[ 1 ].ToString( );
		;
		Session[ " UPasword" ] = dr[ 4 ].ToString( );
		Session[ "UserType_ID" ] = dr[ 0 ].ToString( );
		;
		//Session["prenom"] = dr[2].ToString();
		//Session["telephone"] = dr[3].ToString();

		Response.Redirect( "View_Reports.aspx" );
	}
	else
	{
		Response.Redirect( "gallery.aspx" );
	}

	dr.Close( );
	conn.Close( );
}

2 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

1. Никогда не используйте конкатенацию строк для создания SQL - запроса-учитесь использовать параметризованный SQL-запрос! (Образец для вас - http://www.dreamincode.net/forums/topic/268104-parameterizing-your-sql-queries-the-right-way-to-query-a-database/[^])
2. Измените свой код, чтобы проверить тип пользователя после чтения его из базы данных, а не перенаправлять в соответствии с ним:

if ( dr.HasRows )
{
	dr.Read( );
	Session[ " UName" ] = dr[ 1 ].ToString( );
	;
	Session[ " UPasword" ] = dr[ 4 ].ToString( );
	Session[ "UserType_ID" ] = dr[ 0 ].ToString( );
	;
	//Session["prenom"] = dr[2].ToString();
	//Session["telephone"] = dr[3].ToString();
}
// !!!
if(Convert.ToString(Session[ "UserType_ID" ]) == "admin" )
{
	Response.Redirect( "View_Reports.aspx" );
}
else
{
	Response.Redirect( "gallery.aspx" );
}


Diya Ayesa

Спасибо Вам за ваш ответ, когда я пробую ваш код, он показывает мне ошибку: индекс находился за пределами массива. в этой строке Session ["UPasword"] = dr[ 4 ]. ToString( );

Kornfeld Eliyahu Peter

Это твоя линия! Я просто скопировал его сюда, чтобы сделать образец полным...

Diya Ayesa

и предупреждение об ошибке : предупреждение 20 возможное непреднамеренное сравнение ссылок; чтобы получить сравнение значений, приведите левую сторону к типу 'string'
в этой строке if (Session ["UserType_ID"] = = " admin" )

Kornfeld Eliyahu Peter

Измените строку на
если (преобразовать.ToString(Session ["UserType_ID"]) = = " admin" )

Diya Ayesa

это код который я пробую но админ всегда идет на страницу галереи где как я хочу админ должен перейти на страницу отчетов и это не работает

если (dr. HasRows )
{
др.Читать( );
Session ["UName" ] = dr[ 0 ]. ToString( );

Session ["UPasword"] = dr[ 1 ]. ToString( );
Session ["UserType_ID" ] = dr[ 2 ]. ToString( );

// Session ["prenom"] = dr[2].Метод toString();
// Session ["телефон"] = dr[3].Метод toString();
}
// !!!
если (преобразовать.ToString(Session ["UserType_ID"]) = = " admin" )
{
Ответ.Перенаправление ("View_Reports. aspx" );
}
ещё
{
Ответ.Перенаправление ("gallery. aspx" );
}

Kornfeld Eliyahu Peter

Может быть, ваш UserType_ID не является администратором? Я только что написал, что в качестве примерного значения фактическое значение известно только вам!!!

Member 13047328

я пытаюсь перенаправить adminhome или userhome, но он не может перенаправить.

Member 13047328

Защищенные суб btncont_Click(как byval отправителя как объект, как byval E Как системы.EventArgs) обрабатывает btncont.Щелчок
Dim conn как новый SqlConnection(WebConfigurationManager.Соединительные нити ("con1").Параметр connectionString)
Dim cmd As New SqlCommand ("select * from tbluser where UserName=@unm and Password=@pwd", conn)

УМК.Параметры.Добавить (новый SqlParameter ("@unm", txtnm. Text))
УМК.Параметры.Добавить(новый объект sqlparameter("@дуо", сессии("инвалидов")))
Коннектикут.Открыть()
Дим ДР в качестве объекта sqldatareader
dr = cmd.Метода executereader()
Если доктор.Читать Далее
utype = dr. GetString(7)
Если utype = "Admin", то
Ответ.Перенаправление("adminhome.аспн?Имя пользователя=" &амп; txtnm.Текст)
ElseIf utype = "пользователь", то
Ответ.Перенаправление("userhome.аспн?Имя пользователя=" &амп; txtnm.Текст)
Конец, Если
Конец, Если

др.Рядом()
Коннектикут.Закрывать()

Конец Подводной Лодки

Рейтинг:
0

VC.J

if (Convert.ToString(Session["UserType_ID"]).Equals("admin"))
            {
                Response.Redirect("View_Reports.aspx",false);
            }
            else
            {
                Response.Redirect("gallery.aspx",false);
            }


чтобы избежать исключения прерывания потока, используйте приведенный выше код.

и Корнфельд Элиягу Питер прав может быть UserType_Id не является администратором