Проблема с цикличной вставкой, перезагрузка страницы?

0

Я пытаюсь добиться состояния вставки и вернуться с помощью моей функции в pageload. Не уверен, как я могу вставлять одновременно то, что я вставлял в mysql снова заново, за один раз?

код:

public partial class UserProfileWall : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string theUserId = Session["UserID"].ToString();
        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=user_name; Password=password_here;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + theUserId + " ORDER BY idWallPosting DESC", cn))

            using (OdbcDataReader reader = cmd.ExecuteReader())
            {
                var divHtml = new System.Text.StringBuilder();
                while (reader.Read())
                {
                    divHtml.Append("<div id=test>");
                    divHtml.Append(String.Format("{0}", reader.GetString(0)));
                    divHtml.Append("</div>");
                }
                test1.InnerHtml = divHtml.ToString();
            }
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        string theUserId = Session["UserID"].ToString();
        OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=user_name; Password=password_here;");
        cn.Open();

        OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn);
        cmd.ExecuteNonQuery();
    //    {
    //        using (OdbcCommand md = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + theUserId + "", cn))

    //        using (OdbcDataReader reader = cmd.ExecuteReader())
    //        {
    //            var divHtml = new System.Text.StringBuilder();
    //            while (reader.Read())
    //            {
    //                divHtml.Append("<div id=test>");
    //                divHtml.Append(String.Format("{0}", reader.GetString(0)));
    //                divHtml.Append("</div>");
    //            }
    //            test1.InnerHtml = divHtml.ToString();
    //        }
    //    }
    //}
}

Я попробовал прокомментированную строку, но я получил несколько вложений и ничего не перезагрузил на странице. Есть ли простой способ после вставки, чтобы получить функцию pageload?

  • 0
    Не очень понятно, в чем именно проблема - какая вставка? В БД? На странице? В чем проблема? Начальная загрузка? Обратная передача?
  • 0
    прокрутите вниз код, который вставка в событии нажатия кнопки, это берет что-то, что пользователь печатает и вставляет в mysql, тогда мне нужно каким-то образом перезагрузить страницу be4, теряя текст пользователя, когда я вставляю и отправляю информацию обратно через функцию загрузки моей страницы т.е. цикл выбора
Показать ещё 1 комментарий
Теги:

1 ответ

5
Лучший ответ

Прежде всего, переместите код, который заполняет элемент стеновыми сообщениями, чтобы разделить функцию:

private void PopulateWallPosts(string userId)
{
    using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=user_name; Password=password_here;"))
        {
        cn.Open();
        using (OdbcCommand cmd = new OdbcCommand("SELECT Wallpostings FROM WallPosting WHERE UserID=" + userId) + " ORDER BY idWallPosting DESC", cn))
        {
            using (OdbcDataReader reader = cmd.ExecuteReader())
            {
                var divHtml = new System.Text.StringBuilder();
                while (reader.Read())
                {
                    divHtml.Append("<div id=test>");
                    divHtml.Append(String.Format("{0}", reader.GetString(0)));
                    divHtml.Append("</div>");
                }
                test1.InnerHtml = divHtml.ToString();
            }
        }
    }
}

Теперь вызовите это в Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    string theUserId = Session["UserID"].ToString();
    PopulateWallPosts(theUserId);
}

И, наконец, назовите его после вставки нового значения:

protected void Button1_Click(object sender, EventArgs e)
{
    string theUserId = Session["UserID"].ToString();
    using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=user_name; Password=password_here;"))
    {
        cn.Open();
        using (OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn))
        {
            cmd.ExecuteNonQuery();
        }
    }
    PopulateWallPosts(theUserId);
}

Ваш комментарий не работает, потому что вы снова выполнили команду INSERT INTO, а не команду SELECT.

В любом случае, вы действительно лучше узнаете о SQL Injection и измените свой код на использование параметров вместо прямого добавления идентификатора пользователя в строку SQL.

  • 4
    +1 за определение риска внедрения SQL
  • 1
    @ Спендер спасибо, это довольно бросается в глаза. Раньше видел все это еще со времен классического ASP. : /
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню