Обновление счетчика MySql при входе пользователей - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть веб-сайт, на котором пользователи могут войти в систему. Клиент хочет, чтобы был способ записать, сколько раз какой-либо конкретный пользователь входит в систему. У меня есть строка «Счетчик» в таблице. Как мне запрограммировать приложение (встроенное в C # ASP.NET) для обновления счетчика, когда люди входят в систему? Является ли этот код правильным:

cmd.ExecuteNonQuery = "Счетчик ОБНОВЛЕНИЙ ОТ брокерского центра"

Я только что закончил (как и 10-го числа этого месяца), так что я новичок в этом, плюс я ничего не знаю о базах данных, я просто учусь на работе. Пожалуйста, дайте мне знать, если мне нужен какой-либо другой параметр или строка подключения или что-нибудь еще? Это событие нажатия кнопки, и там уже есть строка подключения для проверки имени пользователя и пароля, поэтому я не думаю, что мне нужна другая строка подключения, но я точно не знаю. Заранее спасибо!

В этом отношении, вот и все событие (вход в систему работает нормально, только обновление - мой вопрос):

string connectionString =         
    ConfigurationManager.ConnectionStrings["moverschoiceConnectionString"].ConnectionString;    
OdbcConnection conn = new OdbcConnection(connectionString);   
conn.Open();   OdbcCommand cmd = new OdbcCommand();   
cmd.Connection = conn;   
cmd.CommandText = "select Email, Password from brokercenter where Email = '" + txtLoginEmail.Text + "'";   
OdbcDataReader reader = cmd.ExecuteReader();   

while(reader.Read())   
{     
    if (reader["Password"].ToString() == txtLoginPassword.Text)     
    {         
        reader.Close();
        if (cbRememberMe.Checked == true)
        {
            Response.Cookies["username"].Value = txtLoginEmail.Text;
            Response.Cookies["username"].Expires = DateTime.Now.AddMonths(1);
            Response.Cookies["password"].Value = txtLoginPassword.Text;
            Response.Cookies["password"].Expires = DateTime.Now.AddMonths(1);
        }
        else
        {
            Response.Cookies["username"].Expires = DateTime.Now.AddMonths(-1);
            Response.Cookies["password"].Expires = DateTime.Now.AddMonths(-1);
        }

            Response.Redirect("BrokerResources.aspx");     
        }     
        else     
        {         
            lblLoginError.Text = "Invalid Password";     
        }   
    }   
    lblLoginError.Text = "Invalid Email or Password";    
    reader.Close();

    cmd.ExecuteNonQuery = "UPDATE counter FROM brokercenter";
}

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

Для начала вы должны прочитать об использовании UPDATE в Справочное руководство MySQL .

Существует даже пример того, что именно вы хотите сделать.
Цитата изссылка:

Если вы обращаетесь к столбцу из таблицы, которая будет обновлена ​​в выражении, UPDATE использует текущее значение столбца.Например, следующий оператор устанавливает col1 на единицу больше, чем его текущее значение:

UPDATE t1 SET col1 = col1 + 1;

Это в основном все, что вам нужно, вам просто нужно добавить предложение WHERE и фильтр для имени пользователяили для электронной почты.

Кроме того, вы должны прочитать о SQL-инъекция из-за этого:

where Email = '" + txtLoginEmail.Text + "'"; 

Конкатенация таких строк для передачи параметров может вызвать проблемы, как описанов ссылке.
Вот пример как это сделать лучше.

0 голосов
/ 24 февраля 2012
cmd.ExecuteNonQuery = String.Format("UPDATE brokercenter SET counter = {0} WHERE Email = {1}", myCounter++, txtLoginEmail.Text);

где "myCounter" - локальная переменная-счетчик (которая также должна считываться из базы данных). Имеет ли это смысл сейчас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...