Edward Mergel Ответов: 2

Нужна помощь с отправкой session( )


На моем форуме я пытаюсь получить сообщение, работая правильно. Я попытался сделать сеанс ("член") = "" пустым, и я получил ошибку, поэтому я добавил фальшивое имя, и теперь он отправляет сообщение.

Я этого не хочу. Я хочу, чтобы он читал, какой член публикует свой "MemberName".

Ошибка (0)(0) была вызвана тем, что когда член регистрируется, он должен получить 1 балл, и я обнаружил, что он не дает этого балла. Причина этого заключается в том, что он заполняет новый член в таблице баллов. Я исправил это, и ошибка (0)(0) исчезла.

Однако мой первоначальный проблема, я пытался найти пример кода или если кто-то может показать мне, почему я, чтобы мое имя или имя (фейк) в: сессии("участник") = "" (не публиковать) сессии("участник") = "вымышленное имя" , (публикует как вымышленное имя). Мне нужно, чтобы он опубликовал "MemberName" на основе члена, выполняющего публикацию.

Пример вопроса таблицы БД
Колонка 1: memQuestion (заголовок) Почему растение зеленеет?
Столбец 2: qPostedBymem (заголовок) Чарльз Смит (поле MemberName)
Колонка 3: qAnswer (заголовок), потому что растения не видят зеленого цвета
Колонка 4: qanswerbymem (заголовок) поддельное имя (MemberName)
Колонка 5: qAnswerDate (заголовок) 09/03/20017

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

Что я уже пробовал:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    If Button1.Text = "Ask Question" Then
        If TextBox1.Text <> "" Then
            For Each s As String In invalid
                If TextBox1.Text.ToLower.Contains(s) = True Then
                    errMessage.Text = Server.HtmlEncode("Cannot Contain <h1>,<Script>,<input>,<a> etc tags")
                    Exit Sub
                End If
            Next
            con = New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0 ;data source=" & Server.MapPath("app_data/SimpleQSet.mdb") & ";")

            com.Connection = con
            Session("member") = ""
            Dim ran As New Random
            Dim qid As String = ran.Next(0, TextBox1.Text.Length)
            com.CommandText = "insert into QuestionList values('" + qid + "','" + TextBox1.Text + "','" + DropDownList1.SelectedValue + "','" + DateTime.Now.ToLongDateString() + "','" + Session("member") + "')"
            con.Open()
            com.ExecuteNonQuery()
            Dim pointCnt As New DataTable
            pointDs = New OleDbDataAdapter("select [points] from Points where Member='" + Session("member") + "'", con)
            pointDs.Fill(pointCnt)
            Dim pnt As Integer = pointCnt.Rows(0)(0) + 1
            com.CommandText = "update points set [points]='" & pnt & "' where member='" & Session("member") & "'"
            com.ExecuteNonQuery()
            con.Close()
        Else
            errMessage.Text = "Question Cannot Be Blank"
        End If
    Else
        Response.Redirect("default.aspx")
    End If
End Sub

Graeme_Grant

Почему вы постоянно меняете название своего вопроса? Если это другой вопрос,то поставьте новый. Если нет, то не меняйте его, обновите детали вопроса вместо названия.

Ответ заключается в отладке вашего кода. Это звучит как логическая ошибка. Установите точку останова и перешагните через код. Отладчик даст вам все подсказки, необходимые для исправления вашего кода.

2 Ответов

Рейтинг:
2

Patrice T

Проблема в том, что вы не проверяете, есть ли ответ на ваш вопрос. select, используйте отладчик для проверки переменных в положении ошибки.
Проблема в том, что вы не проверяете, есть ли что-то внутри. pointCnt- это плохая привычка.
В нем ничего нет. pointCnt потому что ты никогда не пытаешься что-то в него вложить.
На самом деле ваша SQL-команда выполняется в pointDs.
С помощью отладчика вы можете проверять переменные в точке отказа, это обычно очень помогает понять, что происходит не так.
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Visual Basic / Visual Studio Video Tutorial-Базовая Отладка-YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и инструменты отладки[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.
-----
Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


0x01AA

Некоторая компенсация за 1.

Patrice T

Спасибо, очень любезно с вашей стороны

Edward Mergel

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

Edward Mergel

Извините, если я был немного груб, не спал 2 дня и наконец принял лекарство. (0) (0) было потому, что, когда член регистрируется, он должен получить 1 балл, и я обнаружил, что он не дает этого балла. Причина этого заключается в том, что он заполняет новый член в таблице баллов. Я исправил это, и ошибка (0)(0) исчезла.

Однако мой первоначальный проблема, я пытался найти пример кода или если кто-то может показать мне, почему я, чтобы мое имя или имя (фейк) в: сессии("участник") = "" (не публиковать) сессии("участник") = "вымышленное имя" , (публикует как вымышленное имя). Мне нужно, чтобы он опубликовал "MemberName" на основе члена, выполняющего публикацию.

Пример вопроса таблицы БД

Колонка 1: memQuestion (заголовок) Почему растение зеленеет?
Столбец 2: qPostedBymem (заголовок) Чарльз Смит (поле MemberName)
Колонка 3: qAnswer (заголовок), потому что растения не видят зеленого цвета
Колонка 4: qanswerbymem (заголовок) поддельное имя (MemberName)
Колонка 5: qAnswerDate (заголовок) 09/03/20017

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

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Или откройте новый вопрос для этой проблемы.

Edward Mergel

Даже не по теме. Я попросил помочь с размещением имени участника. Каждый пост стоит 1 балл, а каждый ответ-2 балла. Поэтому, пожалуйста, позвольте мне кодировать так, как я есть, и просто ответить на этот вопрос.

Richard Deeming

Если бы вы увидели, что кто-то собирается поплавать в бассейне, полном крокодилов, и они спросили бы вас, где они могут оставить свое полотенце, вы бы сказали им, где оставить свое полотенце, или предупредили бы их о крокодилах?

Код, который вы разместили, содержит самую опасную уязвимость безопасности № 1 - ту, которая может быть использована для кражи ваших данных, повреждения или уничтожения вашей базы данных, изменения вашего сайта для обслуживания вредоносных программ для ваших посетителей или даже установки вредоносного кода на ваш сервер. Это так тривиально использовать это трехлетний ребенок может это сделать[^].

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

Patrice T

Парень может просто дать вам полотенце, потому что есть вероятность, что оно ему больше никогда не понадобится. :)

Рейтинг:
0

Graeme_Grant

В вашем коде есть следующее:

Dim pointCnt As New DataTable

В следующий раз, когда вы ссылаетесь pointCnt переменная здесь:
Dim pnt As Integer = pointCnt.Rows(0)(0) + 1

Конечно, он потерпит неудачу, нет никаких настроенных таблиц данных, вы только настроили его как пустой.