Vb.net формы элементов управления и панелей
Здравствуйте, может кто-нибудь сказать мне, почему у меня возникла эта проблема.
Я пытаюсь создать 1 основную форму, и внутри у меня есть панель, которая будет загружать другую форму внутри нее. И у меня есть проблема, когда мой запрос запускается внутри базы данных, он заполнен пустыми полями, похоже, он не читает то, что есть внутри текстовых полей, и флажки они проверяются, если они есть "1"
Вот моя основная форма вызывающая внутри панели другую форму :
Dim form2 As UsersAddCP = New UsersAddCP() form2.TopLevel = False form2.TopMost = True Dim form1 As AdminMenu = CType(Application.OpenForms("AdminMenu"), AdminMenu) Dim panel1 As Panel = CType(form1.Controls("panel1"), Panel) panel1.Controls.Clear() panel1.Controls.Add(form2) form2.Show()
А вот мой модуль запроса для вставки информации.
Public Sub RegisterUser() Try With cmd .Connection = conn .CommandText = "INSERT INTO users (uname,upassword,ucode,ucreate,utools,usearch) VALUES (@user,@pass,@ucd,@crt,@uto,@usrh)" .Parameters.AddWithValue("@user", UsersAddCP.txtUsername.Text) .Parameters.AddWithValue("@pass", UsersAddCP.txtPassword.Text) .Parameters.AddWithValue("@ucd", UsersAddCP.AdminCheck.Checked) .Parameters.AddWithValue("@crt", UsersAddCP.CreateCheck.Checked) .Parameters.AddWithValue("@uto", UsersAddCP.ToolsCheck.Checked) .Parameters.AddWithValue("@usrh", UsersAddCP.SearchCheck.Checked) .ExecuteNonQuery() .Parameters.Clear() .CommandText = "INSERT INTO personal (pacc,pName,pEmail,pYazaki,pPhone,pPosition) VALUES (@user,@name,@email,@yazaki,@phone,@position)" .Parameters.AddWithValue("@user", UsersAddCP.txtUsername.Text) .Parameters.AddWithValue("@name", UsersAddCP.txtName.Text) .Parameters.AddWithValue("@email", UsersAddCP.txtEmail.Text) .Parameters.AddWithValue("@yazaki", UsersAddCP.txtyazaki.Text) .Parameters.AddWithValue("@phone", UsersAddCP.txtPhone.Text) .Parameters.AddWithValue("@position", UsersAddCP.txtPossition.Text) Result = .ExecuteNonQuery End With Catch ex As Exception MsgBox(ex.Message) Finally If Result > 0 Then MessageBox.Show("Sign Up Successful", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information) Else MsgBox("Failed to register user!") End If cmd.Dispose() If conn IsNot Nothing Then conn.Close() End If End Try End Sub End Module
Проблема возникает только тогда, когда я использую для загрузки форму внутри панели.
Если я использую обычную загрузку форм и заполняю поля, записи считываются и вставляются в поля базы данных, но когда я использую панель в базе данных, создаются пустые поля..Странно, может быть, кто-то может помочь мне решить эту проблему?
Что я уже пробовал:
Нормальная загрузка формы и вставка записей - работает
Загрузить в панель другую форму и вставить записи - дать пустые поля в базе данных
Maciej Los
Я не вижу той части кода, которая отвечает за чтение данных...
Ralf Meier
Я не могу проверить это в данный момент (возможно, позже) ... но, на мой взгляд, вы можете сделать панель членом коллекции элементов управления формы, но вы не можете сделать форму членом коллекции элементов управления панели (которая на самом деле является элементом управления, но, конечно, это контейнер-элемент управления).
Ваши дополнительные комментарии указывают мне также и на это направление ...
Но вопрос : почему вы хотите иметь это (или почему вы думаете, что вам это нужно таким образом) ? Вы также можете добавить каждый элемент управления в коллекцию элементов управления вашей панели ...
diablo22
Не могли бы вы дать более подробную информацию или пример того, что вы имеете в виду, извините, что я не смог уловить вашу точку зрения.
Заранее спасибо.
Richard Deeming
NB: Похоже, что вы храните пароли в обычном тексте. Не делай этого.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]
diablo22
насколько я читал, лучший вариант для anti-inject-это использовать параметры, как я делаю в своей функции, я не знаю, правда ли это до сих пор или как проверить, чтобы сделать sql inject, чтобы увидеть, будет ли он работать
diablo22
как вы упомянули, я осмотрел свой код, и Вы были правы, что я оставил пустые места для sql-инъекции, я просто тестирую его сам, поэтому одну идею, которую вы упомянули, я приведу в пример, чтобы другие люди тоже могли найти ее полезной.
Не так и легко запросов SQL инъекции :
.Свойства commandtext = "выбрать * из пользователей, где команде uname = '" &усилителя; формы.txtUsername.Текст & "'"
должно стать вот так:
.Свойства commandtext = "выбрать * из пользователей, где команде uname = @имя пользователя"
.Параметры.AddWithValue("@UserName", theForm.txtUsername.Текст)